《Android渗透测试学习手册》写的学习笔记
attify/lot exploitation/penetration testing Drozer Exploit-Me漏洞
删除锁屏密码 然后重启
adb shell
su
cd /data/system
ls |grep key
rm gatekeeper.password.key
rm gatekeeper.pattern.key
reboot -r #重启$ adb devices //连接设备
$ adb shell //与设备shell交互
ps //正在运行的进程
system 系统拥有
root 根进程
radio 电话和无线电相关的进程
app_ 用户已下载的所有应用程序 正在运行
$ adb kill-server //杀死服务器
$ adb start-server //启动服务器
$ adb shell pm list packages //pm包管理器 工具获取所有已安装的软件包列表
$ adb shell dumpsys meminfo //获取所有应用程序及其当前内存列表
$ adb logcat -d -f /data/local/logcats.log
$ adb logcat -d -f /sdcard/xx.log // 保存logcat日志
-d标志指定转储完整日志文件并退出
-f标志指定写入文件而不是在终端打印二进制文件
/system/bin
/system/xbin
应用数据
/data/data
应用程序 文件 数据库 缓存
/data/data/xx.xx.xx # ls
cache
databases
files
lib
安装文件
/data/apk
Play商店应用
/data/app-private
密码锁定路径
password.key gesture.key
/data/system
cd /data/system
rm gesture.key
组和权限
platform.xml
/system/etc/permissions/
cat platform.xml
sd卡
/mnt/sdcard/
version
cat /proc/versionandroid虚拟设备的列表
android list avdadb shell
# monkey 10 //10个自动化触摸,敲击和事件来测试应用程序download
java -jar burp-suite.jar
启动模拟器与bp代理
emulator -avd [name of the avd] -http-proxy 127.0.0.1:8080
emulator.exe -avd AttifyAVD -http-proxy 127.0.0.1:8080apktool安装在/usr/bin中
.dex文件转换为smali文件
反编译
apktool d [app-name].apk // d 标示反编译
构建
apktool b [decompiled folder name] [target-app-name].apkdownload
与Apktool类似功能,VTS提供一个漂亮的图形界面
dex2jar
win:
d2j-dex2jar.bat "xx.apk" dex2jar xx.apk -> xx.jarmac:
sh d2j-dex2jar.sh打开jar文件 download
检查应用程序签名
$ jarsigner -verify -certs -verbose testing.apk
解压缩.apk文件 解析META-INF文件夹中出现的CERT.RSA文件的ASCII内容 以获取签名
$unzip testing.apk
$cd META-INF
$openssl pkcs7 -in CERT.RSA -print_certs -inform DER -out out.cer
$cat out.cer解锁引导加载程序
Nexus 7
$fastboot oem unlock在引导加载程序启动内核并启动init之后,它挂载Android系统运行的一些重要目录
/dev /sys /proc
init从配置文件init.rc和init.[device-name].rc中获取自己的配置,在某些情况下从位于相同位置的.sh文件获取自己的配置
$ls -l | grep 'init'
# cat init.rc
加载时使用的属性
location/system/build.prop
system/build.prop
一但所有东西被加载,init最后会加载一个称为Zygote的进程,负责以最小空间加载Dalvik虚拟机和共享库,来加快整个进程的加载速度。
一旦完成整个引导过程,系统发送BOOT_COMPLETED的广播,许多应用程序可能使用称为广播接收器的Android应用程序中的组件来监听。unzip -l simple_game.apk // -l 展示压缩包内容
file simple_game.apk //查看是否是一个有效的压缩包ContentProvider(内容提供器)泄露
所有ContentProvider具有唯一的统一资源标识符(URI)以便被识别和查询。 命名标准惯例以content://开始 AndroidAPI版本低于17 ContentProvider默认属性时始终导出。 需要在AndroidManifest.xml文件检查ContentProvider
<provider
android:name="com.test.example.DataProvider"
android:authorities="com.test.example.DataProvider">
</provider>example:
grep -R 'content://' adb install vulnerable-app.apk adb shell content query --uri [URI of the content provider]
adb shell content query --uri content://com.xx.xx.provider.NotePad/notes
或者使用Drozer在app中找到泄漏的ContentProvider adb install agent.apk
adb forward tcp:31415 tcp:31415 drozer console connect app.provider.finduri模块来查找ContentProvider
run app.provider.finduri com.threebanana.notes app.provider.query 模块指定ContentProviderURI
run app.provider.query conntent://com.threebanana.notes.provider.NotePad/notes --vertical
如果Drozer能查询和显示来自ContentProvider的数据,意味着ContentProvider泄漏数据并存在漏洞 android:exported=false,或者创建一些新的权限,另一个应用程序在访问供应器之前必须请求它。目录遍历或本地文件包含漏洞:读取系统文件
客户端注入攻击:sqlite注入
链接: 提取码: ddka