专栏首页Deen的代金券日记fiddler二次转发实现动态改包
原创

fiddler二次转发实现动态改包

问题场景描述

正如我上一篇所提到的,如何更加精确有状态地实现动态修改请求返回包?对有状态这里理解可能有点问题,我描述一个场景会更直观一点。

一个应用软件向服务器请求时间戳,第一次请求返回为A,通过修改返回包,使第二次返回A+B,第三次返回A+B+B.....这里面有一个递增的关系,这就是我所描述的状态。

常见的改包是无状态的,即我使用burp,他的自动改包是一个正则表达式匹配的字符串替换;使用fiddler,通过的他脚本进行返回包修改,但修改函数是无状态的,每请求一次,函数便重新运行一次,是无法计数的,也就是我所说的无状态。

解决问题思考

要解决这个问题,首先想到的是重写的一个代理,但这部分工作我觉得并不是那么简单,要做到像burp或者fiddler那样成熟的工具,并不是个简单的活。

偶然间的想法,让我想到可以在fiddler这一层代理上,进行一个请求的二次“转发”,这个转发有点歧义,我所说的转发是将请求的返回结果进行一次转发,再发送到一个第三方服务器,这个服务器返回我们要的结果。自然,这个第三方服务器是我们可以控制的,自然。

fiddler发送请求实现

查找资料发现fiddler的script可以通过以下三个函数进行请求发送:

  1. FiddlerApplication.oProxy.SendRequest
  2. FiddlerApplication.oProxy.SendRequestAndWait
  3. FiddlerObject.utilIssueRequest

SendRequest和SendRequestAndWait用法是一样的,区别在于一个只是发送了请求,并不能处理返回包,SendRequestAndWait可以处理返回包,所以SendRequestAndWait就是我们需要的函数。utilIssueRequest也是发送请求无法处理返回包。

这里也简单提一下utilIssueRequest的使用方法,utilIssueRequest的使用比另外两个函数要简单得多,只是处理字符串,然后拼接成一个请求头,而SendRequest和SendRequestAndWait得两个参数分别是HTTPRequestHeaders和Byte[]类型。utilIssueRequest使用简单demo如下,即向http://localhost:9090/发送了一个POST请求:

var method:String = 'POST';
var url:String = 'http://localhost:9090/';
var protocol = "HTTP/1.1";
raw += method + " " + url + " " + protocol + "\r\n";
var body = 'test';
raw += "\r\n" + body;
FiddlerObject.utilIssueRequest(raw);

回到真正所需要得SendRequestAndWait函数,这个函数用法挺难找的,所幸还是找到了,我最后写的代码如下:

if (oSession.HostnameIs("www.humblegames.cn")&& oSession.uriContains('fightingx/utils/timeUtil2.php')){
			var responses = oSession.GetResponseBodyAsString();
            oSession.utilDecodeResponse(); //解码 
			var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(responses);
			var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders("/", ['Host: 127.0.0.1:9090','Content-Length: '+Content.length.ToString(), 'Content-Type: application/x-www-url-encoded']);
			oRQH.HTTPMethod = "POST";
			var oSD = new System.Collections.Specialized.StringDictionary();
			var newSession = FiddlerApplication.oProxy.SendRequestAndWait(oRQH, Content, oSD, null);     	
			var second_res = newSession.GetResponseBodyAsString();			
			FiddlerApplication.Log.LogString(second_res);
			oSession.utilSetResponseBody(second_res);    
        }

代码实现的内容:首先获取当前请求的返回包,将返回包的body通过POST请求转发到127.0.0.1:9090,再将127.0.0.1:9090返回的结果当作最后此次请求的返回body。

在9090端口也是一个简单的flask服务器,这里通过一个计数器便可以解决上面的状态问题:

# -*- coding: utf-8 -*-
from flask import Flask,request
app = Flask(__name__)

count = 0

@app.route('/', methods=['GET', 'POST'])
def index():
    global count
    count += 1
    time = str(1569076091 + count * 21700)
    return time


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=9090,debug=True)

这上面两段代码也就解决了我一开始所描述的场景问题。

又一个问题

这里我所实现的第三方服务器是一个flask,但当请求返回的结果是一个复杂的html时,里面有各种换行各种符号等等,将这种数据作为POST请求的data,在flask这边是很难处理的。是否有更优雅更加完备的第三方服务器实现方式,能够获取所有POST数据,处理这种问题?

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 破解某单机游戏到学习fiddler脚本改包

    前段日子出去玩了,游山玩水的,网太差,就下了个单机耍耍。水墨风,打斗效果挺不错的(那么,请问哪里能够下载到呢?)

    Deen_
  • Nginx能为前端开发带来什么?

    Nginx那么好,我想去看看。 接连逛了两个书城后,我发现并没有Nginx相关的书籍。 这就很奇怪!

    IMWeb前端团队
  • Nginx能为前端开发带来什么?

    本文作者:IMWeb 黎腾 原文出处:IMWeb社区 未经同意,禁止转载 Nginx那么好,我想去看看。 接连逛了两个书城后,我发现并没有Nginx相...

    IMWeb前端团队
  • 十分钟学会 Fiddler

    Fiddler是一个http抓包改包工具,fiddle英文中有“欺骗、伪造”之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和https数...

    腾讯移动品质中心TMQ
  • 通过Proxifier、V2ray和Newwifi捕获任意的http和https流量

    通常情况下,有一个设备无法设置代理的情况下,要做到修改它的发包或者改包比较困难,以前我们都是用arp欺骗进行流量导流来做的,但是下面我介绍一种新的方法。

    FB客服
  • Mitmproxy 的安装与使用案例

    上篇文章简单介绍了手机端的抓包工具fiddler的使用,实现了抓取抖音某用户“喜欢”的视频列表的操作。

    singleli
  • Fiddler 抓包 Android

    设置系统代理后,依然抓不到包 ( 没有相关请求的包 ),但是 app 却依旧正常返回数据,没有断网。

    yiyun
  • 程序员大型甩锅现场,太搞笑了!

    TSW
  • 借助FreeHttp任意篡改Websocket报文(Websocket改包)

    作为Web应用中最常见的数据传输协议之一的Websocket,在我们日常工作中也势必会经常使用到,而在调试或测试中我们常常也有直接改变Websocket数据报文...

    lulianqi
  • ELK Stack之Beats简介

    Beats 是ELK Stack技术栈中负责单一用途数据采集并推送给Logstash或Elasticsearch的轻量级产品。

    Java后端技术
  • 同学利用Python爬虫制作王者荣耀出装助手,引来了隔壁班的女生!

    暑假回家,”小皇帝”般的生活持续了几天,头几天还挺舒服,闲久了顿时觉得好没意思。眼看着10天的假期就要结束,曾信誓旦旦地说要回家学习,可拿回家的两本书至今一页未...

    sergiojune
  • 全网最全的爆款抓包工具的综合对比

    作为软件测试工程师,抓包总是不可避免:遇到问题要做分析需要抓包;发现 bug 需要定位要抓包;检查数据传输的安全性需要抓包;接口测试遇到需求不全的也需要抓包.....

    程序员白楠楠
  • fiddler对Android手机APP抓包

    公司有一个APP项目,因为涉及第三方开发好的接口返回的数据,APP需要根据这些返回数据或者返回的状态进行相对于的处理,但是我一开始也是懵逼的,我不知道怎么办,不...

    搁浅同学
  • 部分APP无法代理抓包的原因及解决方法

    HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了...

    lulianqi
  • 移动安全(七)|实战获取某APP登陆算法

    本文依然是团队大佬 非尘 学习逆向的学习笔记,这一系列都将以实验的方式进行知识点学习和总结,后续将持续更新,不喜勿喷~

    7089bAt@PowerLi
  • 太干了,Android 抓包姿势总结!

    App 服务端测试基本就是 Web 安全那一套,但如果抓不到服务器的包?哎~就很难受,空报告?

    信安之路
  • HTTPS协议下Fiddler抓包

    浏览器通过http协议发送给服务器的内容很容易被拦截,因此,用http协议传输一些敏感数据的话是非常危险的,因此,现在好多网站都采用的是https协议。

    小博测试成长之路
  • 抬头看天 | 谈谈移动端抓包方式和原理及如何防犯中间人攻击

    工欲善其事,必先利其器 ,要抓包,怎么可能没有好的工具,对于普通抓包来说,我们有下面几个工具

    Petterp

扫码关注腾讯云开发者

领取腾讯云代金券