|
一、Wireshark 下载
非盈利性 Wireshark 基金会支持 Wireshark 的开发,这是一款免费的开源工具,全球数百万人使用。
wirechark
过滤语法简单介绍
wireshark的过滤语法总结起来其实也很简单,就是以协议开头,后面可以跟着协议的属性,然后加上一些判断符号,比如contains、==、>、<等等。比如只想展示http的协议内容,则直接在过滤器输入框中输入http即可
优缺点
优点:
1、功能强大,可以抓取所有协议的包
2、抓到的包容易分析
缺点:
1、由于线上服务器没有GUI,只有命令行,因此无法在线上服务器使用
2、无法分析https数据包,由于wireshark是在链路层获取的数据包信息,所以获取到的https包是加密后的数据,因此无法分析包内容。当然,我们可以对https数据包进行解密, 但是操作具有一定的复杂度,可能要消耗很多时间。
过滤掉目标地址为 8.8.8.8
!ip.dst == 8.8.8.8
过滤掉
!ip.dst == 8.8.8.8 and !ip.dst == 8.8.4.4 and !dns and !ssdp and !_ws.col.protocol == "IGMPv3" and !_ws.col.protocol == "ARP"
(!ip.dst == 8.8.8.8 and !ip.dst == 8.8.4.4 and !dns and !ssdp and !_ws.col.protocol == "IGMPv3" and !_ws.col.protocol == "ARP") and !(_ws.col.protocol == "UDP")
((!ip.dst == 8.8.8.8 and !ip.dst == 8.8.4.4 and !dns and !ssdp and !_ws.col.protocol == "IGMPv3" and !_ws.col.protocol == "ARP") and !(_ws.col.protocol == "UDP") ) && !(_ws.col.protocol == "BT-DHT")
筛选网址:
通过IP和域名筛选
ip.dst == 39.105.141.205 and http.host == "jinshuangshi.com"
(ip.src == 120.232.51.242 || (ip.dst == 120.232.51.242)) && (_ws.col.protocol == "HTTP")
(http.host == "u.refblogs.com") || (ip.dst == 211.159.166.105) || (http.host == "www.jinshuangshi.com") || (http.host == "jinshuangshi.com")
uri中的关键词搜索
http.request.uri matches "viewthread"
从微信小程序开发文档上了解到,产品模式下微信小程序强制要求客户端和服务端通过HTTPS协议进行交互(传统的手机App并没有这种限制),而不允许不安全的HTTP。这就意味着如果直接抓包(例如,使用Wireshark),我们看到的也是一堆乱码(HTTPS数据是加密传输的),无法了解交互的接口和过程。
二、Fiddler
Web协议调试神器Fiddler,它最强大的地方就是能够抓取并明文展示HTTPS报文。它抓取HTTPS的原理是这样的,首先Fiddler是以HTTPS代理模式工作的,当Fiddler接收到客户端(浏览器)CONNECT请求时,它冒充服务端(网站)接受客户端的请求,并回送客户端一个伪造的证书,并冒充客户端(浏览器)和真实的服务端(网站)建立连接,之后它就充当一个中间人的角色,向服务端(网站)转发客户端(浏览器)的请求数据,向客户端(浏览器)转发服务端(网站) 的应答数据。对于这个中间人来说两边的请都是和其直接建立的,所以两边发送的数据它都能解密成明文。
Fiddler下载
需要注册一个账号才能使用
安装之后会默认添加一个代理端口:8866
允许远程连接
安装证书
安卓设置代理教程
打开设置
进入WLAN.
选择已连接的WIFI网络 点 方向箭头 进入设置
进入代理设置 点击 手动
配置代理服务器 主机名:填入代理服务器IP. 端口:填入端口号 点击右上角保存按钮 使用提示 ...
确认代理设置成功
Fiddler高级应用
1.断点调试
bpu 在请求开始时中断
bpafter 在响应到达时中断
bps 在特定http状态码时中断
bpv/bpm 在特定请求method时中断
用bpu命令对特定url设置断点,这种方式断点设在Before Requests。取消断点时只需要再执行bpu命令即可。 执行如下命令(如下图):
bpu www.baidu.com/
清除断点命令
bpu
2.URL地址重写
urlreplace a.com b.com
3.使用脚本
添加一个Rules设置,在fiddlerScript中添加如下代码
public static RulesOption("是否开启替换请求URL参数")
BindPref("fiddlerscript.rules.isURL")
var m_isURL: boolean = false;
在static function OnBeforeRequest(oSession: Session) {}内添加如下代码
if(m_isURL){
//这里一般填写Host+?前面的的内容,因为?后面的内容容易变动
//这里由于问题中的人说会变动,那么我们就直接写host
if(oSession.fullUrl.Contains("www.jinshuangshi.com")){
try{
//问题中是把M6替换,那你就把UpdateCheck替换成M6,而52pojie替换成想替换的字符串
oSession.fullUrl = oSession.fullUrl.Replace("tid=132","tid=133")
}catch(err){
FiddlerObject.log("出现异常,错误原因:"+err)
}
}
}
◆判断请求 uri 是否包含某些字符
oSession.uriContains("xieboke.net")
oSession.fullUrl.Contains("xieboke.net")
◆获取返回结果并转成 字符串
oSession.GetResponseBodyAsString();
◆获取 json 返回结果中的中某个字段
var response_string = oSession.GetResponseBodyAsString();
// 字符串 转成可以操作的 json 格式
var response_json = Fiddler.WebFormats.JSON.JsonDecode(response_string);
var is_double = response_json.JSONObject["isDouble"]
◆修改 Session 的样式等
oSession["ui-backcolor"] = "yellow"; // 背景色 - yellow 黄色,red 红色,green 绿色,Lavender 淡紫色
oSession["ui-color"] = "red"; // 字体颜色
oSession["ui-hide"] = "true"; // 不显示
oSession["ui-bold"]="true"; // 字体加粗
oSession["ui-italic"] = "yup"; //设置字体斜体,字符串无所谓
oSession["ui-customcolumn"] = '高佣api'; //设置Custom一列显示文案
FiddlerObject.playSound("C:\windows\media\tada.wav"); //设置请求时播放的声音
◆打印日志
FiddlerApplication.Log.LogString("xieboke_net_log: " + "test");
◆获取请求的参数
oSession.oRequest.headers; // 获取整个请求头
oSession.oRequest.headers["token"]; // 获取 请求头 token 的值
oSession.oRequest.headers.Exists("Authorization"); // 判断请求头 Authorization 是否存在
oSession.Hostname; // 获取请求的域名
oSession.port; // 获取请求的端口
◆在消息框中显示 HTTP POST 正文
oSession.requestBodyBytes
var oBodyString = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);//解码
◆修改请求头的参数
oSession.RequestHeaders.Remove("User-Agent"); // 删除 User-Agent 传参
oSession.RequestHeaders["uid"] = "0"; //修改请求头
OnBeforeRequest在每个请求之前调用,OnBeforeResponse在每个响应之前调用。
// 字符串 转成可以操作的 json 格式
var response_json = Fiddler.WebFormats.JSON.JsonDecode(response_string);
var is_double = response_json.JSONObject["isDouble"]
//使用正则表达式修改token
var oBodyString = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
var oRegEx = /"token":"(.*?)"/gi;
oBodyString = oBodyString.replace(oRegEx, "\"token\":\"be5466bb44034d4fbbf8cdfbef4b0368\"");
FiddlerApplication.Log.LogString("c.dun.163.com/api/v2/mp/check oBodyString: " + oBodyString);
oSession.utilSetResponseBody(oBodyString);
参考:
https://www.jianshu.com/p/47ddbf92d00e
Fiddler 的旧版本
【Fiddler】利用Fiddler中的FiddlerScript自动替换请求URL中的字符
三、MitmProxy
这是一个用 Python 编写的工具,其安装使用简单,而且通过与自定义的 Python 脚本相结合,可以非常方便的篡改 request 和 response 内容。官网
安装配置 MitmProxy
安装非常简单,直接 pip 即可
pip install mitmproxy
安装
安装成功:
Successfully built pyperclip
Installing collected packages: urwid-mitmproxy, sortedcontainers, pyperclip, pydivert, publicsuffix2, passlib, Brotli, zstandard, tornado, ruamel.yaml.clib, pyparsing, pylsqpack, msgpack, mitmproxy_windows, ldap3, kaitaistruct, Jinja2, itsdangerous, hyperframe, hpack, h11, colorama, blinker, attrs, asgiref, wsproto, ruamel.yaml, mitmproxy-rs, h2, cryptography, click, service-identity, pyOpenSSL, flask, aioquic, mitmproxy
Successfully installed Brotli-1.1.0 Jinja2-3.1.3 aioquic-0.9.25 asgiref-3.7.2 attrs-23.2.0 blinker-1.7.0 click-8.1.7 colorama-0.4.6 cryptography-42.0.5 flask-3.0.2 h11-0.14.0 h2-4.1.0 hpack-4.0.0 hyperframe-6.0.1 itsdangerous-2.1.2 kaitaistruct-0.10 ldap3-2.9.1 mitmproxy-10.2.4 mitmproxy-rs-0.5.1 mitmproxy_windows-0.5.1 msgpack-1.0.8 passlib-1.7.4 publicsuffix2-2.20191221 pyOpenSSL-24.0.0 pydivert-2.1.0 pylsqpack-0.3.18 pyparsing-3.1.2 pyperclip-1.8.2 ruamel.yaml-0.18.6 ruamel.yaml.clib-0.2.8 service-identity-24.1.0 sortedcontainers-2.4.0 tornado-6.4 urwid-mitmproxy-2.1.2.1 wsproto-1.2.0 zstandard-0.22.0
启动
mitmproxy
启动
在手机上设置代理就可以截获到手机的访问数据了。
点击链接可以查看详细信息(无法查看图片),按q键返回。
https的数据自动解析
拿到账号也就不在话下了
账号
手机对代理的信任需要安装证书
访问:http://mitm.it/
If you can see this, traffic is not passing through mitmproxy.
如果你能看到这一点,交通并没有通过mitmproxy。
请求经过代理转发之后请求会有什么变化呢?
要判断请求是否来自代理,可以通过检查请求头中的一些特定字段来判断。以下是一些常见的请求头字段,可以用来判断请求是否来自代理:
X-Forwarded-For:该字段表示请求经过的代理服务器的 IP 地址列表。如果请求经过了多个代理服务器,则该字段会包含多个 IP 地址。
X-Real-IP:该字段表示请求的真实 IP 地址,即客户端的 IP 地址。
Via:该字段表示请求经过的代理服务器列表。如果请求经过了多个代理服务器,则该字段会包含多个代理服务器的名称。
Forwarded:该字段表示请求的转发信息,包括请求的原始 IP 地址、端口号等信息。
通过检查这些请求头字段,可以判断请求是否来自代理。如果这些字段中包含了代理服务器的信息,则说明请求是通过代理发送的。
client-ip:
需要注意的是,这些请求头字段可以被伪造或篡改,因此不能完全依赖这些字段来判断请求是否来自代理。在实际应用中,需要结合其他方式来判断请求是否来自代理,例如使用 IP 地址白名单、验证码等方式。
另外要调试微信小程序呢可以使用下面这个方法
微信小程序抓包新方式一
四大网络抓包神器,总有一款适合你 mitmproxy的用法
wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) wireshark 的用法
如何抓取微信小程序的数据? Fiddler的使用
以羊了个羊为例,浅谈小程序抓包与响应报文篡改 mitmproxy修改返回数据的用法
FiddlerScript 规则
|
|