Burp Suite API插件开发指北 | Part 2 篡改HTTP请求头
鸢尾
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
收藏一下~
可以收录到专辑噢~
写在前面的话
正如开篇结尾时说的,我们这个系列文章会更接近实际问题来进行讲解
现在我们假设一个场景:目标站点在HTTP 请求头中有一个SHA256的Hash值需要校验,如果我们在拦截修改请求之后没有对这个哈希值重新计算,那么该请求会被目标站点的后端拒绝。
当然,我们也可以通过Proxy以及Repeater中手动给每一个请求替换哈希值。手动替换一两个倒还没啥,数量多了显然就不是一个明智之举。当前最优的解决方案就是写一个插件,让插件来完成这个繁琐的任务。
场景模拟
用flask Web框架快速创建一个模拟场景:
import flask
from flask import request
from hashlib import sha256
app = flask.Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def handle_request():
hash = request.headers.get('Hash')
body = request.get_data()
calculated_hash = sha256(body).hexdigest()
if hash is not None:
if str(hash).strip() == calculated_hash:
data = request.form.get('data')
if data is not None:
return data
else:
return "No data provided."
else:
return "Invalid signature!"
else:
return "No hash provided."
app.run(host="127.0.0.1", port=5000, debug=True)
从请求头提取Hash值,然后与计算得出的请求体的哈希值进行比对,校验通过就返回请求体中data字段内容,否则后端就返回失败消息。
以下是正常通过校验的请求以及响应
GET / HTTP/1.1
Host: 127.0.0.1:5000
Connection: keep-alive
Hash: 8897c835cf0001adff74ddf1953bc2f24d36fb3448ec180528ae0640f55f42e0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
data=Attack+succeed!
HTTP/1.1 200 OK
Server: Werkzeug/3.1.3 Python/3.12.6
Date: Mon, 23 Dec 2024 03:46:38 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 15
Connection: close
Attack succeed!
以下是我们修改了请求体内容,却没有重新计算生成新的hash,导致无法通过后端校验的请求及响应
GET / HTTP/1.1
Host: 127.0.0.1:5000
Connection: keep-alive
Hash: 8897c835cf0001adff74ddf1953bc2f24d36fb3448ec180528ae0640f55f42e0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
data=Attack+succeed!+1
HTTP/1.1 200 OK
Server: Werkzeug/3.1.3 Python/3.12.6
Date: Mon, 23 Dec 2024 03:58:26 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 18
Connection: close
Invalid signature!
编写插件
直接照搬我们上一章的内容,先把插件框架写出来
package arr;
import burp.api.montoya.BurpExtension;
import burp.api.montoya.MontoyaApi;
import burp.api.montoya.logging.Logging;
public class HelloWorld implements BurpExtension {
MontoyaApi api;
Logging logging;
@Override
public void initialize(MontoyaApi api) {
api.extension().setName("Hello World");
this.api = api;
this.logging = api.logging();
this.logging.logToOutput("*** Freebuf.com - Hello World loaded ***");
可试读前30%内容
¥ 19.9 全文查看
9.9元开通FVIP会员
畅读付费文章
畅读付费文章
最低0.3元/天
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 鸢尾 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏

相关推荐
Burp Suite API插件开发指北 | Part 3 篡改WebSocket报文
2025-01-20
Burp Suite API插件开发指北 | Part 1 Hello World
2024-12-03
CVE-2017-3085:Adobe Flash泄漏Windows用户凭证
2017-08-20
文章目录