CLI参数助力MITM插件升级,起飞!

动图封面

为了解决上述问题,yakit在本周的更新中支持了在 MITM中间人劫持 和 插件调试 部分使用带 CLI参数的 MITM 插件。一个简单的案例是

test = cli.String("input", cli.setRequired(true))cli.check()
# mirrorHTTPFlow 会镜像所有的流量到这里,包括 .js / .css / .jpg 这类一般会被劫持程序过滤的请求mirrorHTTPFlow = func(isHttps /*bool*/, url /*string*/, req /*[]byte*/, rsp /*[]byte*/, body /*[]byte*/) { yakit.Output(sprintf("input data %s", test))}

此插件可以接收一个cli参数,然后在流量经过的时候将其发送给yakit,写好这样的代码会发现在参数预览一栏中已经有了对应的参数存在。

输入参数执行也成功地在日志中打印了参数数据。

之前在社区中有师傅提到需要测试越权的插件,需要配置低权限账户的cookie,但是每次都去修改插件的源码略显繁琐。在本周更新之后可以通过Cli参数来动态设置cookie。接下我们就来简单实现一个越权测试插件的demo。

这是一个非常简单的越权检测插件,可以通过 cli 参数动态设置一个低权限的cookie ,在mitm hook中替换掉高权限的cookie,再发送一个数据包,比较两次数据包的,检查是否有权限问题

oc.replaceHeader("Cookie", lowCookie),poc.https(isHttps)) log.error("send low permissions cookie request err %s", err) if lowRsp == rsp { risk.NewRisk( url, risk.title("越权访问"), risk.severity("high"), risk.titleVerbose("越权访问"), risk.details({ "target": url, "request": lowReq, "response": lowRsp, }), risk.description("越权访问"), risk.solution("增强权限检查") ) } }}
但是这样简单的检测逻辑是不够在实战中使用的,很多页面是本身就不需要鉴权的,无论使用什么身份访问都是返回相同的响应,这样会出现大量的误报情况,所以可以再丰富一下插件的逻辑,来减少误报的可能性。

lowCookie = cli.Text("lowCookie", cli.setRequired(true),cli.setVerboseName("低权限cookie"))website = cli.String("website",cli.setRequired(true),cli.setVerboseName("目标检测网站"))pathPrefix = cli.String("pathPrefix", cli.setRequired(true),cli.setVerboseName("路径前缀过滤"))再加入两个cli参数

  • Website :指定只检测某个网站
  • pathPrefix:指定网站路径前缀 只做敏感的路径检查

mirrorHTTPFlow = func(isHttps , url , req , rsp , body ) { urlIns,err = str.ParseStringUrlToUrlInstance(url) if err != nil{ log.error("parse url string to url instance err %s", err) return } if urlIns.Host != website || str.HasPrefix(urlIns.Path, pathPrefix){ return }
if poc.GetHTTPPacketHeader(req,"Cookie") != ""{ lowRsp,lowReq,err = poc.HTTP(req, poc.replaceHeader("Cookie", lowCookie),poc.https(isHttps)) log.error("send low permissions cookie request err %s", err) if lowRsp == rsp { risk.NewRisk( url, risk.title("越权访问"), risk.severity("high"), risk.titleVerbose("越权访问"), risk.details({ "target": url, "request": lowReq, "response": lowRsp, }), risk.description("越权访问"), risk.solution("增强权限检查") ) } }}
单个调试

在单个插件执行这些额外的参数是放在 固定输入的上方

直接输入即可
MITM中间人劫持

在mitm中间人劫持模块的插件栏 在更新之后分出了 带参数部分。

只需要点击插件输入参数即可加载成功。

使用Vulinbox的越权靶场验证一下 先注册两个账户 yak、yaklang 先使用获取一个yak账户的cookie: _cookie=7d367973-c806-436d-a2e0-778eec224b6e再抓取一个yaklang账户访问自身信息的数据包:

GET /logic/user/profile?id=24 HTTP/1.1Host: 127.0.0.1:8787Cookie: _cookie=7d367973-c806-436d-a2e0-778eec224b6eSec-Fetch-Mode: navigatesec-ch-ua-platform: "Windows"Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36Sec-Fetch-Dest: documentsec-ch-ua: "Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"Referer: http://127.0.0.1:8787/logic/user/loginSec-Fetch-Site: same-originAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflate, br, zstdSec-Fetch-User: ?1Accept-Language: zh-CN,zh;q=0.9sec-ch-ua-mobile: ?0

使用调试插件执行

成功检测漏洞


END


YAK官方资源 Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

<think> 首先,用户的问题是:“我想了解使用mitm进行抓包并获取请求参数的方法 请问mitm抓包获取请求参数的方法”。这涉及到使用MITM(中间人攻击)技术来抓取网络包并提取请求参数。 从系统级指令中,我需要: - 使用$...$格式表示行内数学表达式,但在这个上下文中,可能没有太多数学内容。 - 独立公式使用$$...$$格式,但如果不需要公式,就不用。 - 保证LaTeX语法正确。 - 用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,例如[^1]。 - 结构清晰,逐步解决问题。 - 参考提供的引用内容。 提供的引用内容: - [^1]:提到使用mitmproxy拦截加密请求,解密HTTPS流量,请求重放,修改请求头等。 - [^2]:描述mitmproxy的功能,如捕获请求和响应,解析数据,修改请求等。 - [^3]:使用Python和mitmproxy抓包过滤,结合Redis和WebSocket。 - [^4]:谈论ARP攻击和欺骗进行MITM。 用户的问题聚焦在“mitm抓包获取请求参数的方法”,所以我应该基于这些引用内容构建回答。 关键步骤: 1. **设置mitmproxy**:安装和配置mitmproxy以捕获流量。 2. **解密HTTPS流量**:因为现代网络多用HTTPS,需要处理SSL/TLS解密。 3. **捕获请求**:使用mitmproxy捕获HTTP/HTTPS请求。 4. **提取请求参数**:从请求中解析参数,这些通常在URL查询字符串、POST数据等中。 5. **处理反爬机制**:有时需要修改请求头,如Referer链,以避免被检测。 从引用中: - [^1] 提到“通过mitmproxy中间人代理拦截加密请求,解密HTTPS流量”和“修改请求头包含完整Referer链”。 - [^2] 提到“实时捕获设备与服务器之间的网络请求和响应”和“提供完整数据解析”。 - [^3] 提到用Python脚本处理mitmproxy输出。 回答结构: 1. **引言**:简要解释MITM抓包的基本概念。 2. **步骤**:详细描述如何设置和使用mitmproxy来获取请求参数。 3. **示例**:提供代码示例或命令示例。 4. **注意事项**:讨论潜在问题,如反爬机制。 5. **生成相关问题**:基于主题。 确保回答真实可靠:mitmproxy是开源工具,常用于网络安全测试。 用中文回答。 最后,添加引用标识在引用的段落末尾。 生成相关问题: - 例如:如何解密HTTPS流量?如何避免反爬?等等。 大纲: 1. **介绍MITM抓包**:解释什么是MITM抓包和为什么用mitmproxy。 2. **安装和设置mitmproxy**:简述安装过程。 3. **配置HTTPS解密**:安装根证书以解密HTTPS。 4. **捕获请求**:使用mitmproxy命令行或GUI。 5. **提取请求参数**:如何从请求中获取参数,如查看URL、POST数据。 6. **处理反爬**:修改请求头等。 7. **Python脚本示例**:引用[^3]提到用Python脚本处理数据。 8. **总结**。 9. **相关问题**。 </think> ### 使用MITM抓包获取请求参数的方法 MITM(中间人攻击)抓包是一种网络分析技术,通过在客户端和服务器之间插入代理来拦截、查看和修改网络流量。mitmproxy是一个强大的开源工具,专门用于此目的。以下我将逐步解释如何使用mitmproxy进行抓包并获取请求参数,确保方法实用且可靠(基于实际网络安全测试场景)。整个过程分为设置、抓包、参数提取和反爬处理等步骤。 #### 1. **安装和设置mitmproxy** mitmproxy支持Windows、macOS和Linux系统。安装方法如下: - 使用Python的包管理器pip安装(确保Python 3.6+已安装): ```bash pip install mitmproxy ``` - 安装后,启动mitmproxy的命令行工具: ```bash mitmproxy ``` 这会启动一个交互式控制台,显示所有捕获的流量。对于初学者,可以使用`mitmweb`(基于Web的UI)更直观地查看数据: ```bash mitmweb ``` 访问 `http://127.0.0.1:8081` 即可在浏览器中查看界面[^2]。 **关键点**:mitmproxy作为中间人代理,默认监听8080端口。您需要配置设备(如手机或电脑)的代理设置,指向运行mitmproxy的机器的IP地址和端口(例如,`192.168.1.100:8080`)。 #### 2. **配置HTTPS解密以获取加密请求参数** 现代网站广泛使用HTTPS,mitmproxy通过SSL/TLS解密来捕获明文请求参数。步骤如下: - **安装根证书**: - 启动mitmproxy后,访问 `http://mitm.it` 下载并安装根证书(支持Windows、macOS、Android/iOS)。例如,在浏览器中打开该链接,按提示安装证书。 - 安装后,设备会信任mitmproxy的证书,允许它解密HTTPS流量[^1][^2]。 - **验证解密**:捕获的HTTPS请求在mitmproxy中会显示为明文。未安装证书时,流量可能显示为乱码。 #### 3. **捕获请求并提取参数** 一旦mitmproxy运行,它会实时拦截所有HTTP/HTTPS请求。获取请求参数的方法包括: - **查看请求细节**: - 在`mitmweb`界面中,选择任意请求,查看“Request”部分。 - 请求参数通常位于: - **URL查询字符串**:例如,`http://example.com/api?key=value&user=123` 中的 `key` 和 `user`。 - **POST数据**:如JSON、Form表单中的参数(例如,`{"username":"admin","password":"123"}`)。 - **Headers**:如Cookie或Authorization头中的参数。 - mitmproxy提供多视图浏览(Raw/Hex/JSON),便于解析复杂载荷[^2]。 - **使用过滤功能**:只关注特定应用或关键词的请求,避免信息过载。例如,在命令行中: ```bash mitmproxy -s filter_script.py # 运行自定义过滤脚本 ``` 其中 `filter_script.py` 是一个Python脚本,用于提取参数(稍后详述)。 示例抓包输出(简化): ``` GET /login?user=test&token=abc HTTP/1.1 Host: example.com ... ``` 这里,请求参数是 `user=test` 和 `token=abc`。 #### 4. **提取参数并导出数据** 使用Python脚本自动化参数提取(引用[^3]的方法): - 创建一个mitmproxy脚本(如 `param_extractor.py`),使用mitmproxy的API处理请求: ```python from mitmproxy import http def request(flow: http.HTTPFlow): # 提取URL中的查询参数 if flow.request.query: print("URL参数:", flow.request.query) # 提取POST数据中的参数(如JSON) if flow.request.method == "POST" and flow.request.content: content = flow.request.content.decode('utf-8') if 'application/json' in flow.request.headers.get('Content-Type', ''): import json data = json.loads(content) print("POST参数:", data) # 过滤特定请求,只处理目标域名 if "example.com" in flow.request.url: print(f"捕获到请求: {flow.request.url}") # 将参数保存到文件或数据库 with open("params.log", "a") as f: f.write(str(flow.request.query) + "\n") ``` - 运行脚本: ```bash mitmproxy -s param_extractor.py ``` 参数会被实时输出到控制台或日志文件。您可以将数据发布到Redis或WebSocket,便于实时监控(如引用[^3]所述)。 - **动态修改请求**:测试参数时,可以使用mitmproxy的断点功能重放请求(如引用[^1]提到的“请求重放”)。在`mitmweb`中,右键请求选择“Replay”并编辑参数。 #### 5. **处理反爬机制** 许多网站有反爬措施,mitmproxy需模拟真实浏览器行为: - **修改请求头**:添加完整`Referer`链、`User-Agent`等,避免被检测。例如,在脚本中: ```python def request(flow: http.HTTPFlow): flow.request.headers['Referer'] = 'https://google.com' # 伪造Referer flow.request.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' ``` - **避免ARP欺骗问题**:在局域网中使用时,可能需结合ARP欺骗(如引用[^4]所述),但mitmproxy本身不依赖于此。确保在测试环境中使用,避免法律风险。 - **性能优化**:对于高流量场景,使用过滤减少数据量(如只捕获特定API路径)。 #### 6. **注意事项** - **合法性**:MITM抓包仅用于授权测试(如安全审计或开发调试)。未经许可拦截他人流量可能违法。 - **可靠性**:在测试环境中验证(例如,使用Docker容器)。HTTPS解密可能失败于证书固定(certificate pinning)的App,需额外处理。 - **工具选择**:mitmproxy比Wireshark更专注于HTTP层,适合参数提取;结合tcpdump可处理底层流量。 通过以上步骤,您能高效获取请求参数。例如,在API测试中,这有助于分析认证机制或数据泄露点[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值