PHP命令执行漏洞初探
Mirror王宇阳 byphp
PHP 命令执行
PHP提供以下函数用于执行外部应用程序;例如:system()、shell_exec()、exec()、passthru()
linux
system()
<?php $host = $argv[1]; system("ping ".$host); ?>
在服务端运行php.exe index.php 192.168.2.1
git
执行php.exe index.php "|net user"
(这里的“|”符号的做用时屏蔽源代码的ping字符)github
passthru() — 执行外部程序而且显示原始输出 proc_open() — 执行一个命令,而且打开用来输入/输出的文件指针。 shell_exec() — 经过 shell 环境执行命令,而且将完整的输出以字符串的方式返回。 popen() — 经过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行正则表达式
eval()
PHP中的eval()
函数能够把参数字符串按照PHP代码来动态执行,输入的字符串必须是合法的PHP代码字段并以分号结尾shell
<?php eval($_REQUEST['code']); // $_REQUEST:支持GET和POST两种请求的数据 ?>
在URL中插入?code=phpinfo();
利用GET方法向服务器请求,服务端的index.php处理代码中的eval()
函数会将请求的字符串作为PHP代码执行数组
动态调用
<?php function T1() { echo "<script>alert('Hello,World!');</script>"; return 0 ; } function T2() { echo "<script>alert('Error');</script>"; return 0 ; } $fun = $_REQUEST['fun']; echo $fun(); // 当fun的value为:phpinfo时,在php的echo中构成 phpinfo() ?>
固然了,并不会仅仅只执行一个phpinfo()、T1()……服务器
<?php $fun = $_GET['fun']; $par = $_GET['par']; $fun($par); ?>
PHP的其它危险函数
array_map()
<?php $arr = $_GET['arr']; $array = array(1,2,3,4,5); $new_array = array_map($arr, $array); ?>
array_map()
返回用户自定义函数处理后的数组函数
assert()
bool assert(mixed $assertion [,string $description])
检查一个断言是否为False;把字符串$description
做为PHP代码进行执行spa
preg_replace()
执行一个正则表达式的搜索和替换
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
pattern
要搜索的正则匹配模式
replacement
用于替换的字符串或数组
subject
要进行搜索和替换的字符串或数组
include
include $file
在变量$file
可控的状况下,咱们就能够包含任意文件,从而达到getshell的目的;
因为不一样的配置环境和不一样的包含文件分为:远程文件包含和本地文件包含
文件操做函数
copy:拷贝文件
file_get_contents:将整个文件读入为一个字符串
file_put_contents:将一个字符串写入文件
file:把整个文件读入一个数组中
fopen:打开文件或者 URL
move_uploaded_file:将上传的文件移动到新位置
readfile:输出文件
rename:重命名一个文件或目录
rmdir:删除目录
unlink & delete:删除文件
特殊函数
phpinfo():这个文件里面包含了PHP的编译选项,启动的扩展、版本、服务器配置信息、环境变量、操做系统信息、path变量等很是重要的敏感配置信息
使用软链接读取文件内容
symlink():通常是在linux服务器上使用的,为一个目标创建一个链接,在读取这个连接所链接的文件的内容,并返回内容
环境变量
getenv:获取一个环境变量的值
putenv($a) :添加$a到服务器环境变量,但环境变量仅存活于当前请求期间。 在请求结束时环境会恢复到初始状态。
推荐文章: PHP代码审计——常见危险及特殊函数