微信公众号:白昼信安
弱小和无知不是生存的障碍,傲慢才是!
目录
1、r0capture+ frida直接抓全局,通杀安卓app
使用教程
2、 burp联动hook脚本绕过ssl pinning保护
3、利用 xp&frida&hook&绕过证书校验
方法:利用 xp 和 HOOk 机制使证书检测失效
插件一插件二
1、r0capture+ frida直接抓全局,通杀安卓app
第一步:本机安装frida
pip3 install frida
pip3 install frida-tools
第二步:虚拟机安装frida-server
使用adb pull xxx 具体在下面操作中
第三步:模拟器启动 frida-server
第四步:本地去连接 frida
# 使用教程:
这个 adb 程序如果是夜神的话默认在D:Program FilesNoxbin
建议将其加入到环境变量
adb.exe devices
adb.exe shell
进入到模拟器中,查看内核版本
x1q:/ # getprop ro.product.cpu.abi
然后下载对应版本的
frida
,使用push
发送到模拟器的目录下
adb.exe push frida-server-16.1.1-android-x86 /storage/emulated/0/data
然后继续进入模拟器,给frida-server-16.1.1-android-x86
赋777
权限,然后运行。这里/storage/emulated/0/data
是没有权限运行的,所以我们还是放到/data/local/tmp/
下。
然后执行
frida
然后在 cmd 中使用 frida 读取模拟器进程信息
frida-ps -U
然后继续使用
frida-ps -R
注:如果和下面一样,失败的话就要进行转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
然后再执行frida-ps -R
,如下说明成功
然后我们随便打开一个app
,在使用frida-ps -R
查看是否出现应用名,如下就说明成功
然后运行r0capture
脚本
cd D:渗透工具app小程序渗透安卓应用层抓包通杀脚本r0capture-2.1
然后利用apk
提取器或者其他工具获得到你要抓包的app
包名字 例如途牛APP
包名为:com.tuniu.app.ui
命令:
python3 r0capture.py -U -f com.tuniu.app.ui -p tuniu.pcap (这里尝试抓途牛的包)
然后需要哪的包点哪就可以。最后数据包保存为了
tuniu.pcap
格式,我们需要使用 wireshark
打开慢慢搞即可
2、 burp 联动 hook 脚本绕过 ssl pinning 保护
ssl pinning
这玩意儿采用的是客户端和服务器双向验证(伪双向,其实还是单向认证的范畴之内)技术来防止 市场上常见的抓包工具进行抓包。
比如抖音、小红书, FaceBook ,Twitter 等 app,都有这种验证和防护。SSL Pinning
一种用来防止中间人攻 击的技术,广泛应用于阻止 app 的抓包和嗅探。将下面代码保存为 js
文件。将第 30
行的证书地址改为你虚拟机中 burp
证书的地址即可。
/*
Android SSL Re-pinning frida script v0.2 030417-pier
$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt
$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause
https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypasswith-frida/
UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !
*/
setTimeout(function() {
Java.perform(function() {
console.log("");
console.log("[.] Cert Pinning Bypass/Re-Pinning");
var CertificateFactory = Java.use("java.security.cert.CertificateFactory");
var FileInputStream = Java.use("java.io.FileInputStream");
var BufferedInputStream = Java.use("java.io.BufferedInputStream");
var X509Certificate = Java.use("java.security.cert.X509Certificate");
var KeyStore = Java.use("java.security.KeyStore");
var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");
var SSLContext = Java.use("javax.net.ssl.SSLContext");
// Load CAs from an InputStream
console.log("[+] Loading our CA...")
var cf = CertificateFactory.getInstance("X.509");
try {
var fileInputStream = FileInputStream.$new("/data/local/tmp/cert_der.crt");
} catch (err) {
console.log("[o] " + err);
}
var bufferedInputStream = BufferedInputStream.$new(fileInputStream);
var ca = cf.generateCertificate(bufferedInputStream);
bufferedInputStream.close();
var certInfo = Java.cast(ca, X509Certificate);
console.log("[o] Our CA Info: " + certInfo.getSubjectDN());
// Create a KeyStore containing our trusted CAs
console.log("[+] Creating a KeyStore for our CA...");
var keyStoreType = KeyStore.getDefaultType();
var keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
console.log("[+] Creating a TrustManager that trusts the CA in our
KeyStore...");
var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
var tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); console.log("[+] Our TrustManager is ready..."); console.log("[+] Hijacking SSLContext methods now...") console.log("[-] Waiting for the app to invoke SSLContext.init()...") SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", " [Ljavax.net.ssl.TrustManager;
", "
java.security.SecureRandom ").implementation =
function(a, b, c) {
console.log("[o] App invoked javax.net.ssl.SSLContext.init...");
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", " [Ljavax.net.ssl.TrustManager;
", "
java.security.SecureRandom ").call(this, a,
tmf.getTrustManagers(), c); console.log("[+] SSLContext initialized with our custom TrustManager!");
}
});
}, 0);
我这里保存的名字是:hook2.js
,然后在虚拟机和burp
直接配上代理
切换到 hook2.js
所在的目录下,打开cmd
然后就执行以下命令
frida -U -f com.p1.mobile.putong -l D:渗透工具app小程序渗透安卓应用层抓包通杀脚本
fridahook2.js
这样就可以了。
2、利用 xp&frida&hook&绕过证书校验
常见证书校验三种情况:
情况 1,客户端不存在证书校验,服务器也不存在证书校验【随便搞】
情况 2,客户端存在校验服务端证书,服务器也不存在证书校验,单项校验【可简单绕过】
情况 3、 客户端存在证书校验,服务器也存在证书校验,双向校验【麻烦难度高】
双向校验绕过需要逆向 app,找到私钥,然后逆向出证书密码等操作,难搞!!!下面工具插件均为单向证书校验绕过
# 方法:利用 xp 和 HOOk 机制使证书检测失效
插件一
夜神直接安装 xp 框架,游戏中心搜索即可 ,然后安装这两个 xp 模块
然后选择你要 hook 的软件
这样即可绕过大部分的证书检测的 app(单项证书检测)。
插件二
此外我们还可以使用另一个插件来绕过单项证书检测,也是就是我们上面说的ssl pinnin
检测绕过技术。这里用到的插件叫SSLUnpinning
,下载安装后打开软件,选择你要hook
的软件,然后就可以去愉快的抓包了。
对大部分证书锁定的 APP 使用 xposed 框架+SSLUnpinning+justme 即可绕过(大多数 APP 只验证服务端证 书)。
注意:xp 插件可能会导致 frida 环境出问题,所以建议建立两个虚拟机,一个 xp 过单项,一个 frida 搞全局
原文始发于微信公众号(白昼信安):app渗透之抓包绕过&hook
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论