移动端https抓包那些事--进阶篇

本文深入探讨了在已root的Android设备和已越狱的iOS设备上抓取HTTPS流量的方法。介绍了通过Xposed框架结合JustTrustMe模块及SSLKillSwitch2工具实现证书校验的绕过,从而实现深层次抓包。

上一次和大家介绍了手机端https抓包的初级篇,即在手机未root或者未越狱的情况下如何抓取https流量,但是当时分析应用时会发现,好多应用的https的流量还是无法抓取到,这是为什么呢?

主要原因还是客户端在实现https请求时对于证书的校验上,如果仅仅校验是否有证书但是未严格校验证书的有效性时,就可以通过手机客户端安装抓包工具的证书来绕过签名校验,但是如果客户端做了严格的证书校验,如果不是受信任证书则无法正常进行https通信,遇到这种情况我们该如何抓取https流量来进行业务分析呢?

接下来就进入我们的第二篇章-进阶篇,深层次抓包(浅层次抓包 -> 移动端https抓包那些事--初级篇)。

这一次就会对我们的设备有所要求了,安卓设备要求设备root,iOS设备要求越狱。后续我们依然会分两个平台来依次介绍如何进行操作。

 


Android平台

 

在Android平台上的操作主要是通过hook的方式,将应用及系统中验证https证书的逻辑全部hook为验证结果正确,这样无论安装的证书是否有效,皆可进行正常的https通信。

这里就需要对手机安装hook框架,这里用到的hook框架为Xposted,官方下载地址:

http://repo.xposed.info/module/de.robv.android.xposed.installer ,这里需要注意的是,在Android4.0-4.4是可以直接通过安装apk的方式开刷入Xposted框架,而在Android 5.0以上则需要刷入Xposted的固件包,具体的操作这里就不再赘述了,网上有很多教程已经讲的很详细了。

 

想要进行https抓包的话需要安装Xposted的一个开源模块--JustTrustMe,github链接地址为:https://github.com/Fuzion24/JustTrustMe ,下载最新版本的安装包,安装进手机,在Xposted中激活并重启手机,这时就可以随意抓取手机中的流量了。

 


iOS平台

 

iOS上就需要将手机进行越狱了,可以使用目前市面上比较流行的盘古越狱工具,但是目前只支持iOS10之前的版本,所以做移动安全研究或者渗透测试的,准备一台老版本的测试机还是很有必要的,说不定什么时候哪款工具就在最新系统上用不了了。

言归正传,在iOS上用到的这款工具叫做SSL Kill Switch 2,该工具使用了Cydia Substrate的钩子技术,这个钩子Hook了IOS的验证证书函数,使得他们接受任何证书。

 

SSL Kill Switch 2同样也是一款在Github上开源的软件:https://github.com/nabla-c0d3/ssl-kill-switch2 ,这里给大家简单介绍下如何安装这个工具。

首先在越狱后的Cydia工具中查看以下几项软件是否都安装完成:

Debian Packager

Cydia Substrate

PreferenceLoader

 

如图中所示:

 

 

如果都安装完成,那么从Github上下载最新的release包:https://github.com/nabla-c0d3/ssl-kill-switch2/releases ,如现在最新版的为v0.11 安装包为 com.nablac0d3.SSLKillSwitch2_0.11.deb ,将该文件拷贝到iOS设备中,拷贝文件可用iTools、iFunBox等工具。

如图所示:

用ssh链接iOS设备,找到deb文件传输目录(/User/Media):

 

执行如下命令进行安装:

dpkg -i com.nablac0d3.SSLKillSwitch2_0.11.deb
killall -HUP SpringBoard

回到Cydia中,查看安装的软件,已经在列表中了。

 

这时候就可以抓取https的流量了。

 


测试

证书安装完成之后,用手机访问一个https的网站,这时就发现https的数据包可以抓取到了。

原创作者 @龙刃(JDragons)转载请注明出处如有任何疑问请联系:JDragons@yeah.net
<think>我们讨论的是在TCP包中查看User-Agent。User-Agent是HTTP协议头部的一个字段,因此我们需要在TCP承载的HTTP流量中查找。 根据引用[2]:User-Agent是Request header的一部分,用于告诉服务器客户端的操作系统和浏览器信息。 因此,要查看TCP包中的User-Agent,实际上需要: 1. 捕获包含HTTP请求的TCP流量(通常是80或443端口,但也可以是其他HTTP端口)。 2. 在HTTP请求头中查找User-Agent字段。 具体步骤: 使用抓包工具(如Wireshark)捕获网络流量,然后过滤出HTTP流量并查看请求头。 但注意:TCP是传输层协议,HTTP是应用层协议,所以我们需要解析到应用层才能看到User-Agent。 操作步骤(以Wireshark为例): 1. 捕获流量:启动Wireshark,选择网卡,开始捕获。 2. 过滤HTTP流量:在过滤器中输入`http`,这样只显示HTTP流量。 3. 查找HTTP请求:选择一个HTTP请求(如GET请求),展开它的协议详情。 4. 查看User-Agent:在Hypertext Transfer Protocol -> Header fields: 中找到User-Agent行。 或者,我们可以直接使用显示过滤器:`http.user_agent` 如果流量是HTTPS(加密的),则需要先解密才能看到。这需要配置Wireshark的SSL/TLS解密(提供服务器私钥或配置SSLKEYLOGFILE)。 另外,引用[3]中提到,在Nginx配置中可以根据`$http_user_agent`变量来区分客户端设备类型,这同样说明User-Agent存在于HTTP头中。 因此,在TCP包中查看User-Agent,本质上是在TCP载荷中解析HTTP头部。 注意项: - 如果TCP包是分段的,需要重组TCP流才能看到完整的HTTP头部。 - 确保捕获的流量包含HTTP请求(例如,访问网页的流量)。 示例(Wireshark): 1. 捕获一个HTTP请求(如访问http://example.com)。 2. 在Packet Details面板展开: Frame Ethernet II Internet Protocol Version 4 Transmission Control Protocol Hypertext Transfer Protocol <--- 展开这个 Request Method: GET Request URI: / Request Version: HTTP/1.1 ... 其他头部 ... User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 如果没有看到HTTP协议,可能是因为: - 端口不对(非标准端口需在Wireshark中设置解码为HTTP) - 加密的HTTPS未解密 命令行工具(如tcpdump)也可以捕获,但需要解析HTTP头部,可以使用`tcpdump -A`以ASCII格式打印,然后查找User-Agent字符串,但这可能不方便,因为一个TCP包可能不完整。 更好的命令行工具是使用tshark(Wireshark的命令行版本): ```bash tshark -Y "http.user_agent" -Tfields -e http.user_agent ``` 总结:在TCP包中查看User-Agent,实际上是在TCP段重组后得到HTTP请求头中的User-Agent字段。 相关问题: 1. 如何在Wireshark中解密HTTPS流量? 2. 如何过滤出包含特定User-Agent的HTTP请求? 3. 如果HTTP请求被分到多个TCP包中,如何重组? 4. 如何通过命令行工具(如tshark)提取User-Agent? 5. User-Agent字符串的结构是怎样的?如何解析它? 根据引用[1]中提到的自定义监控,虽然与User-Agent无关,但我们可以联想到,如果我们需要监控某个User-Agent的出现次数,也可以使用类似方法(通过脚本解析日志或流量)。 注意:引用[1]主要讲的是Zabbix监控TCP会话,引用[2]讲的是HTTP头部,引用[3]讲的是基于User-Agent的负载均衡。 </think>### 在TCP包中查看User-Agent的方法 User-Agent是HTTP协议头部字段,需要从TCP承载的HTTP流量中提取。以下是具体操作步骤: --- #### 🔍 **核心步骤** 1. **捕获HTTP流量** TCP本身不包含User-Agent,需捕获端口80(HTTP)或443(HTTPS)的流量: ```bash tcpdump -i any -s0 'port 80 or port 443' -w http.pcap ``` 2. **解析HTTP头部** 使用Wireshark打开捕获文件后: - 过滤HTTP请求:`http.request` - 展开协议栈:`Transmission Control Protocol → Hypertext Transfer Protocol → Header: User-Agent` - 示例值:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...` --- #### ⚙️ **进阶技巧** 1. **HTTPS流量解密(需预配置)** 在Wireshark中配置SSL/TLS密钥: ```plaintext 编辑 → 首选项 → Protocols → TLS → (Pre)-Master-Secret log 添加浏览器生成的SSLKEYLOGFILE[^2] ``` 2. **命令行快速提取** 使用`tshark`直接过滤User-Agent: ```bash tshark -r http.pcap -Y "http.user_agent" -Tfields -e http.user_agent ``` 3. **设备类型识别** 根据User-Agent特征判断设备: ```markdown | 特征字符串 | 设备类型 | |----------------|------------------| | `Android` | 安卓设备 | | `iPhone` | iOS设备 | | `Windows NT` | Windows PC | | `Macintosh` | macOS设备 | ``` --- #### ⚠️ **注意项** 1. **TCP分段重组** 大型HTTP请求会被TCP分段传输,需在Wireshark中启用重组: ```plaintext 右键TCP包 → Protocol Preferences → Allow subdissector to reassemble TCP streams ``` 2. **移动端特殊标识** App流量可能包含自定义UA,如: `MyApp/2.1.3 (com.example.app; build:1024; iOS 15.4)` 其中`com.example.app`为应用包名[^2] 3. **负载均衡场景** 反向代理(如Nginx)可能修改UA,需检查`X-Forwarded-User-Agent`头[^3] --- #### 🧪 **验证示例** 在Wireshark中过滤安卓设备请求: ```bash http.user_agent contains "Android" ``` 结果示例: ``` User-Agent: Mozilla/5.0 (Linux; Android 13; SM-S901U) AppleWebKit/537.36... ``` --- ### 📚 相关问题 1. 如何从HTTPS流量中提取未解密的User-Agent? 2. 当User-Agent被故意伪装时如何识别真实设备? 3. 如何通过TCP流重组技术解析分段的HTTP请求? 4. 反向代理修改User-Agent时如何追溯原始设备信息? 5. 命令行工具如何批量提取PCAP文件中的设备类型统计? [^1]: TCP会话监控需依赖Zabbix等工具配置特定参数 [^2]: User-Agent头部包含设备类型和浏览器标识 [^3]: Nginx等代理可通过$http_user_agent变量实现设备分流
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值