0x00 前言
最近看到一篇QQ抓IP的文,简单分析了下其原理,并应用在微信上,我先贴一下QQ的步奏,后面根据QQ的来分析微信
0x01 QQ步骤
1.利用wireshark抓包
wireshark下载,有官中
https://www.wireshark.org/#download
选择单当前网卡开始抓包,一般就选WLAN就行
2.具体实施
打开QQ聊天框,拨打语音,在对方在线的情况下,需要对方同意的情况下可以获取到IP,查文献有说可以不需要同意就可以拿到IP的,可能是QQ版本不同的问题,这里提供两种查询方法
一. 利用Ctrl+F进行查询
Ctrl+F打开搜索框,搜索020048,这样看包不太直观,我们换一种较为直观的方法
二. 利用过滤进行筛选
在过滤器中填写udp[8:3]==02:00:48进行过滤,比第一种方法更加直观
3.为什么是020048 ?
QQ语音通话使用的是UDP直连,简单来说就是语音通话的双方直接连接,不通过其他服务器,020048是QQ UDP协议72字节的报文头
同时也是为什么可以使用udp[8:3]==02:00:48进行过滤的原因,UDP前面包括8字节UDP头,后面就是数据,但是wireshark并没有提供udp.data这种直接的过滤方式,故我们使用偏移来实现此过滤,也就只能靠udp[8:x]这样偏移来获取(注:8是固定的八个字节),QQ前面的报文头是不会变化的,所以说我们可以通过之前说的两种方式来找到包含带有真实IP的包
0x02 微信步骤
微信的通讯方式跟QQ相比可以说是截然不同,他的data是动态的,无法固定一个值进行查询,但是我们可以分析带有真实IP的数据包来寻找特征,最后一样可以实现相同的功能,下面我说的是我实验的过程,师傅们直接使用的话根据我找的特征进行过滤即可
1.使用已知的IP做包的逆向筛选
这里我们使用ip.dst(目的地址)和ip.src(源地址)两个命令,知道可以查到跟刚才一样的IP即可,这样我们就拿到包含真实IP的数据包,接下来我们只需要找到他们的特征点即可
2.两个结果
2.1 利用报文头进行过滤
微信与QQ不同,他的报文头是随机的值,通过找规律发现前两位都是a3,根据之前说的原理,使用udp[8:1]==a3进行过滤,不过这个应该会随着版本更新失效
2.2 利用data.len进行过滤
这个抓的并没有上面的第一种方法准确(并不缺少数据,但是过滤后的无关IP较多),此方法参考了台湾中央警察大学三位研究员2020年9月在公开会议上分享的一篇论文,其中提到了根据Length、Time to live、Flags三个维度来来判断嫌疑人真实IP的技巧,根据这篇论文提供的思路,最后得出的命令为data.len >= 120 and data.len <= 150,也就是筛选Length长度为120到150区间的包
0x03 补充一个hvv相关的思路
在hvv时,可以根据我提供的上述方法进行IP的获取,无代理情况下,可以根据IP的历史绑定域名来进行溯源,在有代理的情况下,可以获取到代理IP,流量情况下,可以获取到区级IP(部分地区也有市级IP)
0x04 数据说明&参考资料
本测试一共测试了18例样本,均符合上述实验规律
1.Forensic Artifacts of Network Traffic on WeChat Calls ——ICACT
2.利用Wireshark任意获取QQ好友IP实施精准定位——Oran9e
0x05 过滤表
因具体操作方式都差不多,直接放出过滤命令
钉钉:udp[8:4]==00:01:00:4c
QQ:udp[8:3]==02:00:48
微信:udp[8:1]==a3
飞信:没有含有真实IP的包
如果有师傅有交流需要可以加我微信:liyi19960723
原文始发于微信公众号(天禧信安):【钉钉 QQ WX】通过语音获取真实IP浅析