freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

抓不到APP的包怎么办?
2023-03-11 23:08:31
所属地 北京

摘要:随着现在各大厂商对安全的日渐重视,好多app做了特殊处理,直接通过传统http代理的方式是抓取不到数据的,现在给大家介绍一个可以绕过这种防御机制捕获app数据的方法。

0x00 起因

最近想搞搞src,兴致满满的一通安装模拟器、配置证书、设置代理操作之后,发现burp的历史记录中空空如也。P都没抓到,刚才的热情瞬间冷却。。。。。

在网上搜了搜类似的问题,可能是app设置了强制不走代理。

顾名思义就是即使手机操作系统层面设置了http代理,app的某些请求依然不会通过代理去访问。

一般把手机设置好代理,但代理软件不打开,这时候手机浏览器访问各种网站是无法访问的,但是app却能够正常使用,这种情况一般就是app强制不走代理。

应对这种情况网上给出的解决方案是可以通过HTTP Debugger Pro+安卓虚拟机的形式来抓取https流量,我简单测试了一下发现能抓到部分请求,有些还是抓不到,可能是使用的不太对,有这方面熟悉的师傅能否给我指导一下。

接下来讨论一个其他的解决方案:DNS劫持+隐形代理

0x01 详述

需要的角色

A:客户端(手机、平板、模拟器都可以)

B:dns服务器(我使用的是linux+dnsmasq,也可以使用任何其他的dns服务器都可以)

C:隐形代理(我用的是windows+burp)


简单聊一下http代理和隐形代理

Rfc文档地址:https://www.rfc-editor.org/rfc/rfc7230

其实http代理没有其他协议那么复杂,简单点说正常http请求头里 有host、有path,他俩组合在一起才是完整的url 。

而http代理的数据包是下图左边这样的,就是原本的path字段换成了完整的url,代理服务器收到后会按照这个url去请求真正的服务端。

1678544587_640c8ecbd06d0f909f42f.png!small?1678544589734

其实即使不这样,用原始的http请求(不设置代理的)也可以通过host+path去找到真正的服务端,这就是burp隐形代理能实现的基本原理。

关于隐形代理的描述可以参考burp官方的解释:

https://portswigger.net/burp/documentation/desktop/tools/proxy/invisible#:~:text=Burp%27s%20support%20for%20invisible%20proxying%20allows%20non-proxy-aware%20clients,makes%20HTTP%20requests%20outside%20of%20the%20browser%27s%20framework.


大概思路:

首先A、B、C三者网络要互通

  1. burp先开启隐形代理模式(配图)
  2. 配置DNS服务器,将指定(或者所有)的域名解析到burp所在的IP地址(实际就是dns劫持)。
  3. 客户端添加信任burp的证书。
  4. 客户端设置DNS为我们自己搭建的DNS服务器地址。

这样一通设置之后,启动app,app的所有请求都会发到burp的隐形代理上并能解析成功。

注意:有些情况这种方式应对,1、http dns请求的 2、直接IP通信的不用域名

以上两种情况可以再进行降维,去IP层劫持,大概就是找个路由做静态路由,在burp机器的网卡上绑定多个IP地址,比较麻烦 但是理论可行。


下面一步一步讲解怎么配置

  1. burp开启隐形代理1678544847_640c8fcf38c5909e3c703.png!small?16785448490841678544859_640c8fdb93c71470e5576.png!small?16785448605591678544873_640c8fe90cca9f43158ae.png!small?1678544875219
  2. 配置DNS服务器,将指定的域名解析到burp所在的IP地址。

      我用的是dnsmasq作为dns服务器,使用任何其他的dns服务器都行

      Dnsmasq安装方法我就不多说了去网上查一下就OK,配置起来比较简单,就是新建一个/etc/dnsmasq.conf文件,然后配置上如下域名解析就好

       address=/.com/192.168.1.10

       address=/.cn/192.168.1.10

1678546072_640c9498e907cbe8096ae.png!small?1678546073689

        意思就是把所有.com和.cn结尾的域名都解析到192.168.1.10这个IP上(这里的192.168.1.10要替换成实际burp监听的IP地址)

   3.客户端添加信任burp的证书

  1. 添加证书在ios上比较简单,就常规的方法(添加完之后要在关于本机-证书信任设置-针对根证书启用安全信任中开启)。
  2. 安卓7以下版本也比较简单,也是常规的方法
  3. 安卓7以及以上版本app就不信任用户添加的证书了,需要开root权限把证书复制到特定位置

首先需要用openssl工具把burp默认的cer格式的证书转换为pem格式

openssl x509 -inform der -in demo.der -out demo.pem

然后算一下证书的哈希值

openssl x509 -subject_hash_old -in demo.pem

1678545145_640c90f9278c9496d40b2.png!small?1678545146205

然后把证书文件的名字改成“算出的哈希值.0”,在这里就是改成9a5ba575.0

最后通过adb或者文件管理的形式把证书文件拷贝到/system/etc/security/cacerts/文件夹下

adb remount

adb push 9a5ba575.0 /system/etc/security/cacerts/

注意:安卓11及以上我也不会弄了,adb remount一直不成功,所以考不进去,建议大家不要用mumu x模拟器,因为他是安卓12版本,我开始用的这个一直不行,有知道原因的小伙伴可以告诉我一下解决方案。


   4.客户端设置DNS为我们自己搭建的DNS服务器地址。

这个就比较简单了,在设置IP地址的地方一般都支持手动设置DNS服务器,设置成我们自己搭建的dns服务器就好。

注意:安卓虚拟机和vmware虚拟机同时装在一台windows电脑上的话容易出些bug,导致两个虚拟机之间网络不太好,所以建议还是不要同时用两种虚拟机来做。

千万不要把burp所在机器的dns改成我们自己搭建的dns服务器地址,否则会出现死循环。


0x02 开始抓包

一切调试结束后,就可以打开app,开始愉快的抓包了。

1678546143_640c94df767355fc1a066.png!small?1678546144707

1678545236_640c915442a608936e2fa.png!small?1678545237684

# 渗透测试 # 网络安全 # web安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录