目录
PHP-RCE涉及函数
基础命令符
靶场练习
PHP-RCE涉及函数
- 代码注入
eval() 把字符串 code 作为 PHP 代码执行assert() 检查一个断言是否为 falsepreg_replace() 执行一个正则表达式的搜索和替换create_function() 创建一个匿名函数并且返回函数名创call_user_func()/call_user_func_array() 把第一个参数作为回调函数调用usort()/uasort() 使用用户自定义的比较函数对数组中的值进行排 序并保持索引关联
- 命令注入/执行
system() 执行外部程序,并且显示输出exec()/shell_exec() 通过 shell 环境执行命令,并且将完整的输出以 字符串的方式返回pcntl_exec() 在当前进程空间执行指定程序passthru() 执行外部程序并且显示原始输出popen() 打开进程文件指针proc_open() 执行一个命令,并且打开用来输入/ 输出的文件 指针
基础命令符
- Windows命令拼接符号
&& 左边的命令执行成功,右边的才执行& 简单的拼接| 上一条命令的输出,作为下一条命令参数|| 左边的命令执行失败,右边的才执行
- Linux命令拼接符号
; 没有任何逻辑关系的连接符&& 左边的命令执行成功,右边的才执行| 上一条命令的输出,作为下一条命令参数|| 左边的命令执行失败,右边的才执行& 任务后台执行,与nohup 命令功能差不多
靶场练习
- Pikachu靶场
- DVWA靶场
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
payload
1|ipconfig
impossible
// Split the IP into 4 octects
$octet = explode( ".", $target );
// Check IF each octet is an integer
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];