平时电脑浏览器抓包主要使用Fiddler设置代理进行抓包,使用非常方便。但是在app抓包中这种方法却时常不好使。使用Wireshark这类工具可以看到APP的流量,说明APP使用的主要应用协议依然是HTTP(https),但是在Fiddler中却抓不到任何流量,下面来说下如何处理这种情况。
问题分析:
为整明白这类代理抓包软件为什么在APP抓包过程中不好使了,就需要简单了解下代理抓包的原理。这里只是简单的白话描述,专业解释请自行查阅相关知识。
首先,Fiddler 或 Charles 这类使用的代理的抓包软件与Wireshark是完全不同的Wireshark 使用的网卡数据复制,只要是经过指定网卡都会被抓取。代理类的抓包软件只能对使用代理的应用层网络协议生效,比如常见的HTTP(https),Websocket等 。
代理抓包的关键就是需要HTTP客户端按照要求去连接代理服务器,一般情况下APP抓包中我们在手机设备上设置连接WIFI时会手动指定一个代理地址指向我们的Fiddler,理论上我们在这种系统层面上设置了代理,http客户端在进行http请求前会先检查系统代理,如果有设置代理,客户端会直接使用完整uri去连接代理服务器。但是不是所有客户端都会遵守这个规则,而且不守规则的还不算少数。当然这种策略也是有好处的,虽然给测试及调试带来了不便不过也在一程度上提高了安全。
正是因为HTTP客户端没有使用我们设置的系统代理,他们自然也不会连接Fiddler 或 Charles创建的代理服务器,最终导致我们无法获取任何请求。
知道了原因,解决起来也就有思路了,只要想办法让客户端重新连接到代理服务器就可以了。方法主要有二种:
方法1:使用VPN将终端设备的流量转发到代理服务器。优点是使用VPN软件不用添加其他软件就可以搞定此事。缺点是需要在手机上安装软件,受限于Android/IOS系统版本,软件版本等,必要时可能还需要root。
方法2:在网络设备上直接做流量转发,将指定终端设备上发往80/443端口的数据直接转到代理服务器的目标端口上。优点是手机端不需要安装任何软件和特别设置。缺点是需要一个单独的支持混杂模式的USB无线网卡。
详细操作步骤:
这里以方法2为例,使用iptables来实现透明代理,进行web流量截取的方法,用到的系统及工具主要有Kali,iptables,hostapd。硬件需要有一个支持混杂模式的USB无线网卡。
我们会将Kali Linux配置成一台代理型路由器,连接至这台“路由器”的客户端(例如嵌入式设备和手机App)都可以正常进行网络通信,但是其中的某些数据包将会被我们的Kali Linux设备所拦截并重定向至代理服务器。Kali Linux设备以及BurpSuite、Mitmproxy、Fiddler(需要额外一些设置)都将以透明代理的形式运行,客户端不会感受到它们的存在。整个运行架构如下图所示:
一、虚拟机安装Kali
在配置我们的Kali Linux之前,我们需要配置VMWare和网络接口。
1. 我们在VMWare中运行Kali Linux,并将网络改为桥接模式,这样可以让Kali Linux直接链接到网络之中,而被监控的设备(应用程序或手机)同样可以正常连接至网络。
2. 我们需要连接两个适配器(以太网和WiFi),并给Kali分配USB适配器,我手头上有个TP_Link TL-WN722N 老无线网卡,将它连接到VM虚拟机。你可以使用任何一款Linux兼容的USB无线网卡,只要它支持混杂模式即可。判断你的网卡是否支持可以百度网卡型号或者Win下运行netsh wlan show drivers 其中有“支持的承载网络”一项。如果是“是”,就表示此无线网卡支持,否则就表示此无线网卡不支持。
3.官网下载Kali,这里依2020.4版本来说明,安装过程不细讲,需要注意的是安装完成后个人习惯使用root帐号来进行操作。Kali新的版本做了安全改动,帐号默认为普通的帐号,在进行更改配置文件等操作时会不太方便,进入系统后命令行内输入:sudo su – 然后输入用户的密码,kali官方VMware安装文件中,账户和密码都为:kali,当前的用户就可以得到超级用户的权限。但默认的情况下5分钟root权限就失效了。这时输入:sudo passwd root更改一下root的密码,然后注销再进入root帐户就可以了。
二、配置Kali Linux 为路由器
开始配置之前,我们需要先查看本机的网络接口。我们可以使用命令ifconfig查看插入USB适配器之前和之后的设备状态。
1.给WIFI配置IP
在创建监听网络之前,我们需要选择一个合适的网络地址和子网掩码。我们这里要选择一个与Kali所在网络IP范围(eth0)不同的地址空间,以此来确保受监控设备的IP地址不会跟我们的监控网络发生冲突。在我们的配置环境中,我们选择的是192.168.2.1/24。
给这个wlan0接口设置一个IP地址。因为它的功能是作为被监控设备的网关:
ip addr add 192.168.2.1/24 dev wlan0
2.配置DNS 和 DHCP
我们使用dnsmasq来作为我们的DNS和DHCP服务器。使用下列命令安装dsnmasq:
apt-get install dnsmasq
在安装完dnsmasq后就会在/etc/dnsmasq.conf 处有个示例文件,内容很多,有兴趣可以挨着看看,这里我们将原dnsmasq.conf文件更名,并新建一个dnsmasq.conf,只写入我们自已的编辑的必要内容,如下:
# 需提供服务的接口,这里是给wlan0 提供dhcp服务
interface=wlan0
# 分配的IP地址范围
dhcp-range=192.168.2.10,192.168.2.250,8h
# 网关地址
dhcp-option=3,192.168.2.1
# DNS服务器地址
dhcp-option=6,192.168.2.1
# 上级DNS服务器地址
# server=8.8.8.8
server=114.114.114.114
log-queries
log-dhcp
# 加快解析速度,不同的网站使用不同的dns
# address=/cn/114.114.114.114
配置完成之后,我们需要重启dnsmasq守护进程,这里dnsmasq会自动读取/etc/dnsmasq.conf内容并应用,命令:
service dnsmasq restart
3.通过hostapd创建热点
首先安装hostapd:
$ apt-get install hostapd
建立一个配置文件hostapd.conf,这里我是放到了/etc/hostapd/hostapd.conf,写入以下必要内容:
# ssid:别人看到的我们这个无线接入点的名称
ssid=kali
# 指定802.11协议,包括a=ieee802.11a,b=IEEE 802.11b,g=IEEE 802.11g;
hw_mode=g
# 设定无线频道
channel=10
# 接入点设备名称,不能包含ap后缀
interface=wlan0
# bridge:指定所处网桥,对于同时接入公网,提供内部网和无线接入的路由器来说,设定网桥有必要
# bridge=br0
#driver:设定无线驱动,这里是nl80211;
driver=nl80211
# auth_algs认证方式 1,2,3 这里使用1就可以了
auth_algs=1
# 推荐的加密方式WPA/WPA2
wpa=2
# 密码8-63个字符
wpa_passphrase=12345678
# CCMP就是AES,除非不支持,否则建议使用此
rsn_pairwise=CCMP
#wpa_pairwise=TKIP CCMP
wpa_key_mgmt=WPA-PSK
启动wlan0接口:
ip link set dev wlan0 up
让hostapd程序开启监控网络,接受其它移动端链接到此wlan0设备:
hostapd ./etc/hostapd/hostapd.conf
4.添加自动SNAT规则
开启Linux的内核IP转发功能
sudo sysctl -w net.ipv4.ip_forward=1
# 或者
sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
# 前者重启失效,后者重启仍有效
给防火墙添加自动SNAT规则
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
操作至此,就无线路由器部分配置完成。用设备链接wlan0的wifi理论上可以正常上网。测试无问题后接下来就可以配置HTTP+HTTPS截流并转发。
三、流量转发配置
这里默认并不能将Fiddler来替代Mitmproxy,因为Fiddler不支持Transparent Proxying模式。因为我们转发的是原始HTTP请求,而不是HTTP代理协议请求。
1.HTTP + HTTPS截流并转发给Mitmproxy
Mitmproxy是通过代理模式工作的,但不需要我们连接WIFI时设置代理,况且还有些设备你无法给它设置代理,例如小米音响。我们目的是只要我们的设备(PC、手机、平板、或者其它支持WIFI连接的智能设备)连上该路由器热点,就能自动抓取设备发出的HTTP(S)流量并解析。
安装mitmproxy,以透明代理(Transparent Proxying)模式启动:
# 安装mitmproxy
sudo pip3 install mitmproxy
# 以Transparent模式启动mitmweb
mitmweb --mode transparent --showhost
到这步Kali系统可能会提示pip3命令不存在,安装:
sudo apt-get install python3-pip
如果还是提示不存在,则重新安装 pip 但不是通过 apt-get 而是通过 python -m继续:
sudo python3 -m pip install --upgrade --force-reinstall pip
到这里一般就可以运行pip命令了,这时再运行上面没成功的命令,注意这里就是用Python 中的pip来安装了:
# 安装mitmproxy
sudo pip install mitmproxy
# 以Transparent模式启动mitmweb
mitmweb --mode transparent --showhost
由于mitmweb提供的数据包查看接口(WEB版的)默认只监听127.0.0.1:8081,因此我们要想在远程主机上查看还得添加一条如下的DNAT规则,使得我们能够远程访问该接口。
sudo iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to 127.0.0.1:8081
# 默认系统不转发127.0.0.1,需要如下配置上述规则才能起作用
sysctl -w net.ipv4.conf.eth0.route_localnet=1
上述步骤完成之后,我们可以在远程主机比如192.168.200.60上访问一下http://192.168.200.21:8081(eth0上的IP) 试试,如下所示:
加入如下DNAT规则。将所有目标端口为80或者443的请求重定向到192.168.2.1:8080(mitmproxy监听的端口)。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.2.1:8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 192.168.2.1:8080
添加成功之后运行命令查看一下表,命令和结果如下:
sudo iptables -t nat -L
接下来手机端安装一下mitmproxy的证书便可以正常抓包了,证书安装就不细说了。
2.HTTP + HTTPS截流并转发给Burp Suite
同Mitmproxy操作是一样的,只是不要开启Mitmproxy,直接在8080端口上开始BurpSuite就可以了,Burp Suite 安装方法参考这里。说一下Burp Suite透明代理的开启:
在Request handling 中开启Support invisible proxying(enable only if needed)
接着安装一下Burp的证书:
这里保存一个der格式的证书传到手机端并安装,手机端比较认这个der格式的证书。
这里为了图省事,我是直接将burp安装在Kali Linux的虚拟机上了,如果需要安装在真机上,将转发的IP指向真机的同时,还需要考虑返回包的路由,先不折腾了。
参考资料:
http://www.52bug.cn/hkjs/3779.html
https://blog.csdn.net/weixin_33814685/article/details/90362461?utm_medium=distribute.pc_relevant_bbs_down.none-task–2~all~sobaiduend~default-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2~all~sobaiduend~default-2.nonecase
https://cloud.tencent.com/developer/article/1490033
http://www.fairysoftware.com/iptables_tou_ming.html
https://blog.hissummer.com/2018/03/%e9%80%8f%e6%98%8e%e4%bb%a3%e7%90%86-fiddler-https%e8%a7%a3%e6%9e%90/
https://www.jianshu.com/p/9b333c769e8a
http://www.51ste.com/share/det-891.html
https://blog.csdn.net/weixin_44575208
原文链接:http://www.itawp.com/185.html,转载请注明出处。
评论0