命令执行与代码执行
命令执行与代码执行:没有对用户的输入进行有效的过滤,用户输入与程序员开发的代码拼接后构成完成的可执行的代码段被服务器执行。
漏洞危害
- 继承Web服务器程序的权限,去执行系统命令
- 继承Web服务器程序的权限,读写文件
- 反弹shell
- 控制整个网站
- 甚至控制整个服务器
常见的代码执行函数:
eval() assert() call_user_func() create_function() array_map()
例子:
//1 eval()
<?php
eval($_POST["cmd"])
?>
//cmd=phpinfo();
//2 assert()
<?php
assert($_POST["cmd"])
?>
//cmd=phpinfo();
//3 call_user_func()
<?php
call_user_func($_POST["fun"],$_POST["para"])
?>
//fun=assert¶=phpinfo();
//4 create_function()
<?php
$a= $_POST['func'];
$b = create_function('$a',"echo $a");
$b('');
?>
//func=phpinfo();
//5 array_map()
<?php
$array = array(0,1,2,3,4,5);
array_map($_GET['func'],$array);
?>
//func=phpinfo();
常见的命令执行函数:
system() passthru() exec() pcntl_exec() shell_exec() popen()/proc_popen() ``
例子:
//1 system()
<?php system($_POST["cmd"]);?>
//2 passthru()
<?php passthru($_POST["cmd"]);?>
//3 exec()
<?php echo exec($_POST["cmd"]);?>
//4 pcntl_exec()
<?php
pcntl_exec("/bin/bash",array($_POST["cmd"]));
?>
//5 shell_exec()
<?php echo shell_exec($_POST["cmd"]); ?>
//6 popen()
<?php $handle = popen("/bin/ls","r");?>
//7 proc_popen()
<?php $handle = proc_popen("/bin/ls","r");?>
//8 ``符号
<?php echo `whoami`?>
我们能够控制的点是程序的整个参数,我们可以直接用&&或|等等,利用与、或、管道命令来执行其他命令。
- /?cmd=127.0.0.1| ifconfig
- System(“ping –c 3 127.0.0.1; ifconfig)
- linux 下支持分号 ”;”
- |,||,%26,%26%26,
- 中间加任意字符,后面都会执行-,//,/*/
// 短路与&&的特点,前面如果为真,才执行后面的,如果为假,都不执行。
// 逻辑与&的特点,前面无论真假,后面都执行
// 短路或||&的特点,前面如果为真,后面的不执行了,前面为假,后面执行
// 逻辑或|前面无论真假,后面都执行
参考的有道云笔记:文档:命令执行漏洞.note
链接:http://note.youdao.com/noteshare?id=64457b716dd6e8fcce8b825d34567785