首页
社区
课程
招聘
[原创](萌新总结)Android渗透测试指引(一):总述
发表于: 2023-6-15 17:23 27974

[原创](萌新总结)Android渗透测试指引(一):总述

2023-6-15 17:23
27974

萌新自己写的笔记,单纯作为记录,也希望能够帮到他人,如有错误请轻喷^ ^

一般模拟器(非真机模拟器)的安装目录下会有一个adb.exe。如果安装了Android Studio的话也会附带一个adb。如果两种情况都没有则需要去自己下载一个。调试远端的设备(本机上的模拟器一般不用,如雷电模拟器)需要先使用adb connect进行连接再shell。

·         adb shell 进入shell,也就是获取一个手机命令行

·         adb push 电脑地址 手机地址 将电脑文件导入到手机指定位置

·         adb install 电脑地址 安装电脑地址上的apk

·         adb connect ip port 链接指定位置的手机(适用于远程调试)

·         adb devices 查看当前设备列表

·         adb forward agree:port agree:port 转发端口

·         adb shell pm uninstall -k --user 0 包名 卸载apk

(这个方法真机模拟器无法使用,真机挂代理方式请看下文第二节)

使用burpsuite、mitmproxy、lamda。

lamda github页面:https://github.com/rev1si0n/lamda/

首先需要准备一个root权限的手机。下载lamda的安装脚本adb中使用sh运行安装(详细步骤请自行查看lamda的ReadMe)。主机中使用pip安装lamda的客户端。

手机如果是模拟器,配置到与主机同一个网段则需要使用桥接模式。使用桥接模式后互相能ping通就可以了。

启动lamda的命令:

sh /data/local/tmp/x86/bin/launch.sh

先启动手机上的lamda。使用lamda是为了挂代理+安装证书。

mitmproxy使用pip命令即可安装(它是一个python module):

pip install mitmproxy

安装mitmproxy的证书(运行mitmdump挂起服务器,浏览器走mitm的代理访问mitm.it即可安装证书)并挂上mitmproxy的代理如下:

#启动代理
# sh /data/local/tmp/x86/bin/launch.sh


from lamda.client import *


d=Device("192.168.3.31")


profile = GproxyProfile()
profile.type = GproxyType.HTTP_CONNECT


# 此选项请根据实际情况选择你是否需要
profile.drop_udp = True
profile.host = "192.168.3.82"
profile.port = 8899
#d.install_ca_certificate("mitmproxy-ca-cert.cer")
d.start_gproxy(profile)
#d.stop_gproxy()
#d.uninstall_ca_certificate("cacert.der")


d.beep()

这个脚本在手机端lamda启动后运行一次,听到beep声表示运行成功。

install_ca_certificate就是安装证书的命令,只需要运行一次。

手机端的配置结束,接下来pip安装mitmproxy,使用upstram模式转发流量到上流代理服务器(即BP)即可。

命令为:

mitmdump --mode upstream:127.0.0.1:8080 --listen-port 8899 --ssl-insecure

上面的mitmweb也可以改成mitmproxy 或mitmdump 主要是中间流量的表现形式不同。

有时候直接使用系统的代理会被APK检测到。有些APK的包使用了参数NO_PROXY,会绕过系统代理发送,有些则会在检测到代理的时候停止发包。

目前知道的能够绕过代理的工具有两个,HTTPDroid和lamda。lamda挂代理参考上面的脚本,这个我测试过是可以绕过代理检测的。HTTPDroid及其他基于iptables的工具据称在原理上是可以绕过的。

但是HTTPDroid不能在夜神模拟器上安装。我的建议是普通模拟器上使用lamda,真机模拟器上使用HTTPDroid(因为lamda不能在真机模拟器上使用)或者真机宿主机安装小黄鸟(HTTPCanary)。

有时候APK会校验用户所处的环境是否是真机,这个时候建议直接使用真机或在真机上安装虚拟机。这个原理跟反反爬虫是一样的:再多的掩饰都是虚的,程序员总能从你想不到的角度进行检测,所以最好直接在真机里做操作。比如安装真机虚拟机如VMOS。

但是真机虚拟机是无法使用lamda的(实际的真机可以),用VMOS抓包的一个方式是代理到宿主机的小黄鸟(HTTPCanary),导出.0证书,小黄鸟设置目标应用,虚拟机安装证书。

也可以通过转换过的.0证书+模拟器挂代理代理到mitmproxy然后中转到burpsuite。一样的。

由于虚拟机可能不能直接装证书,即使有ROOT(具体为什么我不知道),只能将证书导出为.0格式然后复制到/system/etc/security/cacerts/下。

cer、pem等格式的证书可以通过openssl转换为.0格式之后手动安装。

命令为(pem与cer都是这个):

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -out out.0

有时候,APK会这样:

校验通信中证书的签发HOST。这种情况需要用户反编译找到hostname然后自行制作一个此hostname的证书。证书可以通过openssl生成。

双向认证,指的是APK与服务器各自有一个私钥,每次通信时,通信包会经过两次加密。或者换句话说,就是APK发送到服务器的包要被客户端证书签名,服务器发送到APK的包要被服务器证书签名(如果APK本身还设置了)。这就导致BP等使用的自签名证书不会被服务器端接受。

SSL双向认证体系中,客户端与服务端各拥有一对证书和密钥,在通信过程中:

(1)客户端建立通信,发送SSL版本等信息给服务端

(2)服务端发送服务端证书给客户端,客户端会校验服务端的证书是否在许可范围内


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-2-20 13:47 被kanxue编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 887
活跃值: (2126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
太好了,我也是萌新,顶顶
2023-6-15 22:25
0
雪    币: 391
活跃值: (661)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大佬,请问bks转成p12文件是可以直接转么,还是说要先转成pxf再转p12文件呢
2023-10-4 18:59
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2023-10-4 23:05
1
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2023-11-27 17:50
0
游客
登录 | 注册 方可回帖
返回
//