小程序抓包

工具准备

先在官网下载抓包工具以及proxifier官方版本:
https://www.proxifier.com/download/
然后下载proxifier破解注册机:
https://github.com/y9nhjy/Proxifier-Keygen
在安装了proxifier的机器上运行注册机,得到序列码,激活并运行proxifier

基本配置

Burpsuit

在Proxy—->Options里设置代理端口等,我这里设置了监听本地8080端口:

然后点击下方的“Import/export CA certificate”,将证书文件导出,然后win+r,输入certmgr.msc打开证书管理器,在“受到信任的证书”处点击,右键导入新的证书:

然后将burp的证书导入

Burp小技巧

启用远程代理

我们进入Proxy选项的设置中,在proxy listener处添加一个有specific address的代理,这里的specific address填写抓包电脑的内网地址,端口填写想要的端口:

设置好之后就可以让局域网中的其他设备通过burp的代理抓包了

启用HTTP 1.0

之前抓包的时候遇到过一些网站不能使用HTTP 2.0,会导致burp报错,无法访问网页,面对合格问题,我们可以同样在proxy的设置中,滑倒最下面Miscellaneous选项,启用Use HTTP/1.0的选项:

拦截设置

我们可以通过Proxy的设置来控制burp对请求和响应的拦截,这里我将所有都打开了:

Proxifier

打开Proxifier,进入profile—->proxy servers,加入本地响应的代理,比如我的burp监听本地的8080端口:

然后进入profile—->proxification rules—->Add,添加一条规则,名字可以随便取,然后在Application处填入你想抓的进程,可以点击browse来浏览,也可以打开任务管理器直接输入进程的名字,比如这里微信网页和小程序的进程名为WeChatAppEX.exe

这样就配置完成了

Fiddler

fiddler的设置总体上和burp差不多,使用fiddler的好处是可以让整个浏览过程更加的流畅自然,避免被发现,fiddler虽然不能拦截,但是可以重放

实操示例

这里以某小程序越权修改价格为例:
首先我们打开Proxifier和Burpsuit,然后进入小程序,发现每张票的价格为50元

在支付界面拦截抓包

将其中的seatPrice参数改为负数并放包,最后支付的金额减少了:

APP抓包

安卓抓包会比较麻烦,根据多种不同的情况,有多种不同的方法,以下分类说明(需要root的情况可以用模拟器,但我做实验的时候用的是真机)

最简单的方法,WIFI代理(免root)

打开手机设置,在手机手动安装证书(大致在设置—->安全—->凭证处)

然后在wifi处设置代理

然后打开要抓的APP和抓包工具就可以了,比如我们抓一下优学院:

嗯……抓到token和getPaperAnswer了……

更好使的方法(需要root)

我们来试试更难的,在我尝试抓取“i莞工”APP的包时,用上面的方法不能成功,于是尝试更激进的方法

安装系统证书

我们尝试安装一个系统证书,让APP无条件信任这个证书,需要一个面具模块 trustusercert:https://github.com/NVISOsecurity/MagiskTrustUserCerts/releases/tag/v0.4.1
下载安装到面具中:

这个模块会在每次重启手机时将新安装的用户证书升级为系统证书
安装好证书之后重启,尝试使用wifi代理,成功抓包:

说明”i莞工“app默认不信任用户证书

使用VPN代理

HTTPCanary 手机抓包

wifi代理对app来说仅仅是一个君子协议,有时app可以选择不走这个代理,但vpn不一样,这种操作需要用到HTTPCanary(小黄鸟)这款app,安装在手机上,并导出用户级证书:

然后使用上文的方法安装证书并重启升级为系统证书,最后回到黄鸟,开始抓包:


成功抓包,但是这种方法有一个问题,手机看着多难受啊,始终没有电脑分析包,手机操作好,于是有以下的方法

Postern VPN代理(免root的自定义VPN代理)

我们先下载Postern:
https://github.com/postern-overwal/postern-stuff/blob/master/Postern-3.1.2.apk
安装到手机后,在配置代理处配置好相应的代理,将流量转发到抓包工具:

在配置规则处将规则配置为“匹配所有地址”:

然后开启这个vpn,就可以愉快的在电脑上抓包啦

使用路由重定向+透明代理(通杀招数,需root)

VPN代理就已经可以绕过一般的代理检测了,但有时候VPN这种方式也可能失效,这时我们可以使用透明代理的方法,让应用检测不出代理,基本做到这层就能抓到大部分APP的包了。
首先设置burpsuit的透明代理:


将需要抓的端口每个都像这样设置(一般抓80,443以及8080等网络通信端口)

回到手机端,使用有root的shell执行以下代码修改iptables来达到路由重定向的效果,将流量转发到电脑上由burpsuit透明代理:

iptables -t nat -A OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to (电脑IP地址) #设置重定向
iptables -t nat -D OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to (电脑IP地址) #取消重定向

然后就可以成功抓包了

eCapture旁观者:Android HTTPS明文抓包,无需CA证书(大杀器,反SSL pining 反自定义SSL库 不需要hook)

一种很新的app抓包方法,仅仅需要root权限,不过对内核版本有要求,要求操作系统 Linux kernel 4.18以上,Android kernel 5.4以上,不失为高版本安卓的抓包好方法

eCapture简介

eCapture是一款无需CA证书即可抓获HTTPS明文的软件。支持pcapng格式,支持Wireshark直接查看。基于eBPF技术,仅需root权限,即可一键抓包。
eCapture中文名旁观者,即 当局者迷,旁观者清。

操作过程

先下载对应架构的ecapture包:
https://github.com/gojue/ecapture/releases
解压后将里面编译好的ecapture文件放到安卓的 /data/local/tmp 目录下,然后在直接在root的shell中./ecapture -tls即可开始抓带有https的包(可以先用ssh或者adb之类的连接安卓的shell,然后在电脑上看)这款工具还能导出pcapng格式文件,可以和wirshark联动

iOS抓包

这里列举的是未越狱的iOS设备的抓包方法

WIFI代理

这种方法与上文较为简单的安卓抓包方法大同小异,也是安装证书后在WIFI设置处设置代理抓包,但似乎只有在iOS13以下的设备中可行,我是用iOS16的设备测试,发现无法抓取https的包

VPN抓包

stream

stream是App Store上免费的一款抓包软件(国区有),下载安装后打开,安装第三方证书,即可使用vpn抓包,操作类似上文提到的小黄鸟,只能在手机里查看包的内容,比较不方便。类似的app还有spider proxy,这款不仅可以抓包还可以写脚本重放。

Shadowrocket

有没有在电脑上操作的方法呢?有,我们可以在设备上安装一个叫Shadowrocket的app(锁国区),将流量通过VPN转发到电脑上,使用该方法需要一个非国区的Apple ID,并且Shadowrocket是付费软件。

SSL Pining

证书锁定原理

证书锁定(SSL/TLS Pinning)提供了两种锁定方式: Certificate Pinning 和 Public Key Pinning,文头和概述描述的实际上是Certificate Pinning(证书锁定)。

证书锁定

我们需要将APP代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此我们移动端APP与服务端(例如API网关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,所以缺点是在证书续期后需要将证书重新内置到APP中。

公钥锁定

公钥锁定则是提取证书中的公钥并内置到移动端APP中,通过与服务器对比公钥值来验证连接的合法性,我们在制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题。

Just Trust Me

JustTrustMe 一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。简单来说,JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查的

LSPosed+Just Trust Me

LSPosed(下载zygisk版本的):https://github.com/LSPosed/LSPosed/releases/tag/v1.9.2
Just Trust Me:https://githubfast.com/Fuzion24/JustTrustMe/releases/tag/v.2
Trust Me Already:https://github.com/ViRb3/TrustMeAlready/
SSLUnpinning:https://githubfast.com/ac-pm/SSLUnpinning_Xposed
最后两个与just trust me差不多,作为备用选项
安装前,我们需要在面具的设置里面打开zygisk,然后安装LSPosed模块,重启手机后,安装Just Trust Me,然后在重启手机,这时就能愉快的开始抓包了

其他方法绕过SSL Pinning

1.直接用低版本安卓(低于7.0),基本可以绕过大部分,但有一些不行
2.VirtualXposed(VirtualApp)
这个方案原理不明,疑似VirtualApp在转发其内部APP的操作时没有进行校验证书的操作?希望有研究过的大佬解释一下具体原理。
使用这个方案时直接安装VirtualXposed即可,代理的设置还是在原来的地方操作,只需要将需要抓包的APP添加至VirtualXposed中,再打开它内部的那一个对应的APP就可以抓到包了。但并未详细测试这个方案对各种HTTP请求库的兼容性,所以不清楚用了其他HTTP请求库的APP是否也会是同样的效果。

SSL双向认证

比较复杂,需要逆向APP,这里不做叙述


处女SRC,赚了600米,好开心:)

⬆︎TOP