网络抓包篇
#抓包工具
Fiddler 或 Charles 这类使用的代理的抓包软件与Wireshark是完全不同的(Wireshark 使用的网卡数据复制,只要是经过指定网卡都会被抓取),其只能对使用代理的应用层网络协议生效,比如常见的HTTP(https),Websocket 。
我们启动Fiddler 或 Charles就是启动了一个HTTP代理服务器,这类工具会通知操作系统,创建了一个HTTP代理,IP为XXXXXX端口为XX,移动端在WiFi处设置;设置后相当于告诉系统我们想要使用代理,这个时候运行在系统上的http客户端再去发送请求的时候,他就不会再去进行DNS解析,去连接目标服务器,而是直接连接系统告诉他代理所在的地址(代理的ip及端口,注意无论是http或https或其他支持代理的协议都会连接同一个端口)。然后代理服务器会与客户端建立连接,再然后代理服务器根据请求信息再去连接真正的服务器。
#抓包问题:
1.fiddler websocket设置抓包
打开Fiddler,点开菜单栏的Rules > Customize Rules…
class Handlers中加入以下代码
static function OnWebSocketMessage(oMsg: WebSocketMessage) { // Log Message to the LOG tab FiddlerApplication.Log.LogString(oMsg.ToString()); }
Customize Rules设置中还可以进行添加代码其他代码来达到操作如,筛选相应的URL保存到本地:将下面代码插入OnBeforeRequest 方法中
/保存到本地添加开始 //这是筛选URL的地址,只需要写入关键部分即可 if ( oSession.fullUrl.Contains("XXX.com") ){ var fso; var file; fso = new ActiveXObject("Scripting.FileSystemObject"); //文件保存路径,可自定义 自动保存的txt文档地址 file = fso.OpenTextFile("E:\\url_bt\\xxx.txt",8,true); file.writeLine("http://"+oSession.url); //url地址 //file.writeLine("Request-host:" + oSession.host); //host //file.writeLine("Request-header:" + "\n" + oSession.oRequest.headers); //file.writeLine("Request-body:" + oSession.GetRequestBodyAsString()); //file.writeLine("\n"); file.close(); } //保存到本地添加结束
#添加代码操作获取请求,除了Fiddler,还有更加方便的交互式抓包工具:mitmproxy (优点:可以命令行方式或脚本的方式进行拦截修改抓包)
2.mitmproxy-使用以及手机抓包证书安装
mitmproxy工程工具包,主要包含了3个组件
- mitmproxy:拦截的http(s)记录控制台显示 【window不支持】
- mitmdump:命令行接口,可以对接python脚本,通过脚本实现监听后的处理,可定制个人需求
- mitmweb:web形式展示
安装:提前搭建好python环境(推荐3.7以上,3.6有一些未知bug)
直接pip安装即可,如卡断较慢 后面加 -i 指定国内源
pip install mitmproxy
安装成功后可以直接在控制台输入:mitmdump 启动,默认端口为8080,需打开设置电脑代理端口
访问安装电脑证书:http://mitm.it/
安装之后即可抓电脑端的http,https请求
手机抓包也与fiddler,Charles一致,电脑手机同一网络(WIFI)--然后WiFi处设置代理填写电脑端ip和mitm设定的端口,下载安装证书。完成后即可抓包手机;
问题:手机在连接mitmproxy代理后通过浏览器访问mitm.it下载android证书后无法成功安装证书-----因为手机证书默认只能直接打开cer证书,如果下载证书后缀为pem则无法识别
解决:点击“设置”-“WLAN”-“高级设置”-“安装证书”(Download为下载的证书所在的目录,点击可以选择更换目录)
以上环境则搭建完毕,贴一个python与mitm交互demo
# -*- coding: utf-8 -*- from mitmproxy import options from mitmproxy import proxy from mitmproxy.tools.dump import DumpMaster from mitmproxy import ctx, http class QttMitm: def response(self, flow: http.HTTPFlow): url = flow.request.url print(url) try: if 'baidu.com' in url: print(url) # response = flow.response.get_text() #获取返回 # response = flow.request.text #获取post表单 # response = flow.request.headers #获取headers # response = flow.request.cookies #获取cookies # response = flow.request.data #请求信息包含headers,port,host等 except Exception as e: print("出错:",e) if __name__ == '__main__': myaddon = QttMitm() opts = options.Options(listen_port=8083) #自定义端口 pconf = proxy.config.ProxyConfig(opts) m = DumpMaster(opts) m.server = proxy.server.ProxyServer(pconf) m.addons.add(myaddon) m.run()
3.SSL Pinning #理解:客户端和服务器双向验证技术来防止市场上常见的抓包工具进行抓包。
(1),安卓: 设备root手机(非root手机目前个人还未找到解决方法)
方案1:Xposed+JustTrustMe
目前老版已年久失修:https://github.com/Fuzion24/JustTrustMe/releases/tag/v.2
采用varjar写的plush升级版:https://bbs.pediy.com/thread-254114.htm
yuanjiang写的魔改edxposed的工具:自行联系yuanjiang要;
方案2:frida hook自行实现,比较费力,可参考看雪大佬们的文章:https://bbs.pediy.com/thread-267387.htm
肉丝的R0capture抓包通杀:https://github.com/r0ysue/r0capture
说完安卓的再顺带讲下iOS的,iOS也有SSL!!
(2)ios: (越狱手机这个是必须)
安装环境需要使用Cydia安装以下依赖项:
Debian Packager Cydia Substrate PreferenceLoader
使用ssl-kill-switch,安装步骤如下:作者说明:https://github.com/nabla-c0d3/ssl-kill-switch2
下载地址:https://github.com/nabla-c0d3/ssl-kill-switch2/releases
push到手机中:scp -P22 com.nablac0d3.sslkillswitch2_0.14.deb root@127.0.0.1:/tmp
然后进入手机对应的文件路径下安装命令:dpkg -i com.nablac0d3.sslkillswitch2_0.14.deb
安装失败,需要安装preferenceloader ,直接在cydia里面搜索安装即可
安装完成后需要在ios中打开设置--->下滑找到ssl kill...点进去打开开关即可
4,VPN代理抓包。
在抓包中碰到的http和https都在应用层,socks在会话层,tcp和udp在传输层。ip在网络层。
我们平时用代理的时候,都是通过给wifi设置http代理的方式进行抓包,只是在应用层抓包,所以会被很轻易的检测到和绕过的。
很多应用会通过:
System.getProperty(“http.proxyHost”)
System.getProperty(“http.proxyPort”);
这两个API来查看当前系统是否挂了http代理,会很轻松的让你的抓包失效。
所以我们需要换一种方式来设置代理。就是设置vpn代理,vpn是属于网络层的,设置了vpn后,你的手机上ifconfig后会多一个接口,等于加了一个虚拟网卡,所有的流量都会从这走。应用层和传输层的请求都可以拿到,还不会被上面提及的两个api所检测。
(1),安卓,目前安卓中常用的VPN工具有:Postern,Drony等(非root手机) ,ProxyDroid(root手机) 这些VPN工具需要配合fiddler之类的抓包工具使用
手机独立VPN抓包工具:HttpCanary
(2)IOS,VPN工具:shadowrocket +抓包工具,国内app store无法搜到
独立抓包工具:stream等