src-渗透中应该如何寻找参数的蛛丝马迹
文章来源于:https://mp.weixin.qq.com/s/pgJbSV0lJ7umdYomNV1xbQ
以下文章来源于HW专项行动小组 ,作者L@2uR1te
0x01 前言平常在做测试的时候,拿到站点前期最终的一个事情,就是找一下前端JS中是不是有一些敏感的接口,看看是不是有未授权和敏感信息泄露的问题。但是,只是找到接口,将对应接口和域名拼接大多数情况下都是返回405或者报错的。这是因为,需要接口的调用是需要参数的。但在很多情况下,JS中是不会将参数和接口一一对应写好的。所以,我们对接口的测试一个绕不开的问题就是——我们应该如何寻找参数的蛛丝马迹?
0x02 找不到参数~痛苦面具开始之前还是先来看看找不到参数是怎样的情况。我们来模拟一下平时测试的流程。
我们找到了一个接口,先以GET去访问。
一般会提示405,或者回显GET not supported,就是请求方式不对。那我们改成POST或者其它请求方式试试。
此时,如果出现415错误,或者回显application/x-www-form-urlencoded Not supported,那就需要换一下Conte ...
问题解决-kali linux出现下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
1、使用kali安装软件的时候报错,且安装失败,找不到安装包
2、起初以为是安装源的问题,更改安装源后,apt-install update更新源,报错如下:
3、解决办法如下:
wget archive.kali.org/archive-key.asc //下载签名apt-key add archive-key.asc //安装签名
重新更新安装源,没有再报错了
4、尝试安装软件,也不再有报错:
frida-labs(3)
challenge 0x0A
activityMainBinding.sampleText.setText(stringFromJNI());
get_flagJava_com_ad2001_frida0xa_MainActivity_stringFromJNI
在Java层中引用了 stringFromJNI函数,可以看到该函数作用就是设置了文本“Hello Hackers”
继续再看get_flag函数,这个函数没有在JAVA层中声明,也没有在库中引用。
接下来,看他的反编译:
该函数接受两个整数值,将它们相加,然后检查结果是否等于 3。如果等于 3,则存在循环。它对硬编码字符串 FPE>9q8A>BK-)20A-#Y 进行解码并记录解码后的flag。因此,要获取flag,我们需要调用此方法。
所以,这块使用frida直接调用get_flag函数
1、下面是一个参考模板
var native_adr = new NativePointer(<address_of_the_native_function>);const ...
frida-labs(2)
challenge 0x08
button.setOnClickListener(new View.OnClickListener() { // from class: com.ad2001.frida0x8.MainActivity.1 @Override // android.view.View.OnClickListener public void onClick(View v) { String ip = MainActivity.this.edt.getText().toString(); int res = MainActivity.this.cmpstr(ip); if (res == 1) { Toast.makeText(MainActivity.this, "YEY YOU GOT THE FLAG " + ip, 1).show(); } else { Toast.makeT ...
frida-labs(1)
介绍下载地址:DERE-ad2001/Frida-Labs:该仓库包含一系列学习 Frida for Android Exploitation 的挑战。 — DERE-ad2001/Frida-Labs: The repo contains a series of challenges for learning Frida for Android Exploitation. (github.com)
介绍项目中包含了11个不同的实战案例,分别从java层到Native层,介绍了常见的Frida API使用场景:
challenge 0x01:hook普通方法
challenge 0x02:调用静态方法
challenge 0x03:更改变量的值
challenge 0x04:创建实例对象
challenge 0x05:在现有实例上调用方法
challenge 0x06:调用带有对象参数的方法
challenge 0x07:hook构造函数
challenge 0x08:hook so层函数
challenge 0x09:更改so层函数返回值
challen ...
fridaNative层hook
0x00 测试用例本次的hook代码都用 frida-tools方式 书写。首先写一个简单的程序用来测试。后续的测试就在这个程序上小修小改,不做赘述。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layout_main" android:layout_width="match_parent" android:layout_height="match_parent" to ...
frida Java层hook
0x00 测试用例本次的hook代码都用 python接口方式 书写。首先写一个简单的程序用来测试。后续的测试就在这个程序上小修小改,不做赘述。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layout_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".MainA ...
objection工具使用
0x01 安装下载地址:
https://github.com/sensepost/objection/releases
现在最新版的objection为1.11.0
objection是通过Frida来提供服务的,所以安装objection之前要先安装frida。
按照推荐版本来做:(这块Python版本使用3.7的,不然后面肯会报错)
frida 12.8.0frida-tools 5.3.0objection 1.8.4jnitrace 3.0.8
想要使用基于frida版本的objection,只需要安装好特定版本的frida和frida-tools,再去objection的releases里面找那个日期之前一点点的版本即可,比如以frida 12.8.0 版本为例:
1、首先安装特定版本的 frida
pip install frida==12.8.0pip install frida-tools==5.3.0
2、然后,安装objection
pip install objection==1.8.4
3、frida配置到手机
查看Andro ...
初始Frida
0x01 Frida安装&环境Frida安装可以参考objection使用那节,里面有提到Frida的安装。
Frida代码编写环境在系统里装上这个npm包,可以在任意工程中获得frida的代码提示、补全和API查看
npm i -g @type/frida-gum
新建一个文件测试,发现就可以成功查看提示、补全等操作了:
Frida常用命令
1、查看版本
frida --version
2、查看安卓进程pid
frida-ps -U
3、端口转发
1) 第一个tcp:电脑端口
2)第二个tcp:手机端口
将PC端的27042端口收到的数据,转发给到手机中27042端口
adb forward tcp:27042 tcp:27042
4、注入JS脚本
1) -U 后(包名|进程pid| -F 注入最前端的APP)
2) -l 后(文件路径)
frida -U com.android.xxx -l D:\NodeProjects\Demo\Hook.js
5、hook启动前app
1) -U -f 后(包名)
2)-l 后(文件路径)
frida -U -f ...
抓包之双向证书校验
0x01 双向证书校验双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。而常规的https只是客户端校验服务端的证书验证服务器的身份。因此双向证书认证在一定程度上能增大中间人攻击的难度和我们抓包分析的难度。
下图为双向认证的流程图,如下所示:
0x02客户端校验 VS 服务端校验客户端校验适用场景:如果服务器数量非常多、app版本众多,app在实现Https的策略上通常会采取客户端校验服务器证书的策略。
常见的校验方式:
X509TrustManager校验
certificatePinner证书绑定
HostnameVerifier验证
服务端校验适用场景:比如银行、公共交通、游戏等行业,这种服务器高度集中、数量比较少,全国就那么几台、且ap ...