相关文章推荐
率性的黄瓜  ·  linux - Google Cloud ...·  1 年前    · 
魁梧的水龙头  ·  java.lang.NoClassDefFo ...·  1 年前    · 

ubuntu上mitmproxy通过透明代理方式抓Android包

一. 前言

linux系统现在越来越受程序开发者喜爱和青睐,本人就是其中之一,工作和日常开发学习中都喜欢用ubuntu系统。mitmproxy是一款功能非常强大的网络抓包工具,支持linux、windows、mac等各大系统。抓包对于大多网络分析和安全人员来说都是一个很常见的课题。常见的抓包方式有ip代理模式、透明代理模式以及客户端通过hook的方式获取网络包数据的方式。该篇文章主要记录一下最近ubuntu上mitmproxy透明代理抓包时的一些心得体会。

环境:

ubuntu22.04真机带ap功能网卡 Mitmproxy: 10.0.0 binary

注:经测试,vmware虚拟机中ubuntu不支持ap功能,桥接模式和nat模式都无法创建热点,所以不能按文章中说的方式抓包。如果有哪位大神有方法,欢迎告知!

二. mitmproxy 透明代理抓包

透明代理相对普通代理来说,不用在客户端配置ip代理,有些应用的包是可以强制不走普通ip代理的,但透明代理不受影响,所以透明代理抓包会相对全一些。但同样需要安装证书,高版本Android系统还需要将普通用户证书转成系统证书。要使用透明代理需要打通以下几个环节:1. 安装系统证书,有的手机可以直接安装,但有的需要借助magisk;2. 在pc(例如我这是ubuntu22.04)开启一个热点,让其它设备可以连接;3. 端口转发(ubuntu上用到iptables)。

1. 安装系统证书

直接安装的方式请参考官网: docs.mitmproxy.org/stab 。借助magisk安装系统证书需要做到两点:1. 安装magisk ;2. 安装一个让用户证书转成系统证书的模块。

1)安装magisk

前提:手机已经bootloader解锁,并且获取了手机的boot.img(如果没有就下载一个系统包刷机,就能使用其中的boot.img),本人使用的是google的pixel手机,非google手机厂商,如果可以解锁,并能官网下载系统包也可。

下载 magisk apk 并安装,打开magisk后,选择从一个文件安装,然后将boot.img导入手机sdcard,选择从这个文件安装,会生成一个修改过的boot.img,导出来,重新刷入该boot.img即可,例如:

adb reboot bootloader
fastboot flash boot magisk_patched-24300_D57a3.img
fastboot reboot
#打开手机后,magisk就安装完成,同时手机也root了。

2)安装 TrustUserCerts 模式

官网 上也有介绍怎么制作,往上也有大佬现成做好的 github.com/NVISOsecurit ,可以直接下载使用。导入手机sdcard后,然后magisk从本地安装这个模块即可。安装完成后,重启手机,用户证书就会变成系统证书。

2. ubuntu上安装开启热点

参考: ubuntu22.04 只使用无线网卡开启热点

3. ubuntu 端口转发

首先按照 官网 上的设置一遍,然后尝试抓包,但有的时候,并没有向我们想得那样就能抓包了。这是因为官网上提供的 iptables 转发命令是使用了 -A ,规则是附加到了最后,但系统运行时,网络包可能会被前面的规则匹配了,就会跳过后面的这些,此时可以可以将 -A 改成 -I,直接讲规则加到起始位置:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
# 以上命令不管用,可以尝试
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
ip6tables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
ip6tables -t nat -I PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080