Burp Suite API插件开发指北 | Part 2 篡改HTTP请求头

2025-01-11 19 0

写在前面的话

正如开篇结尾时说的,我们这个系列文章会更接近实际问题来进行讲解

现在我们假设一个场景:目标站点在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 ***");

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Windows远程桌面网关出现重大漏洞
信安常用术语汇总
python分享 | 写出自己的第一个exp
hackthebox vintage writeup
网络安全基础之windows常用DOS命令
Java反序列化绕WAF tricks及一个GUI工具

发布评论