利用Xray+BurpSuite自動挖掘帶sign簽名的漏洞
一、起因:
Xray是一個非常好的自動化漏洞挖掘工具。我們通常在進行漏洞挖掘的時候,都會通過BurpSuite+Xray進行自動化的漏洞挖掘,官方也給了配置和使用方法,鏈接放到參考文獻中,感興趣的朋友也可以自己搜索一下。
工具雖然好用,但這次遇到的是一個有簽名算法的目標,在這種情況下,上面的這套組合就顯得有氣無力了。
嘗試掃了一下,雖然發送了很多payload,但沒有發現任何漏洞。

由于從事于漏洞挖掘工作,總有一種感覺(感覺很重要,大家都懂得),這個東西有漏洞。
最后通過自己努力和改造,終于挖到了XSS漏洞。這篇文章主要給大家說說我是怎么挖到這個漏洞的。
XSS是web安全中最為常見的漏洞,XSS全稱是Cross Site Script。XSS攻擊通常指黑客通過“HTML注入”篡改了網頁,插入了惡意腳本,從而控制用戶瀏覽的一種攻擊。這里的跨站訪問,可以是從正常的網站跨到黑客的服務器,也可以是黑客的服務器跨到正常的網站。XSS漏洞經常出現在需要用戶輸入的地方,這些地方一旦對輸入不進行處理,黑客就可以進行HTML注入,進而篡改網頁。
先放一張成功后的圖片。

二、必備工具:
操作系統: WIN10_X64
1. BurpSuite(Community)
滲透神器,如果你還不知道這個,那么只能說明你不是圈內人,趕快去百度一下吧。(或者掃碼領取burp相關的教程)
https://portswigger.net/burp/communitydownload
2. xray(免費社區版):
是從長亭洞鑒核心引擎中提取出的社區版漏洞掃描神器,支持主動、被動多種掃描方式,自備盲打平臺、可以靈活定義 POC,功能豐富,調用簡單,支持 Windows / macOS / Linux 多種操作系統,可以滿足廣大安全從業者的自動化 Web 漏洞探測需求。
https://github.com/chaitin/xray/releases
3. jadx:
jadx是個人比較喜歡的一款反編譯利器,同時支持命令行和圖形界面,能以最簡便的方式完成apk的反編譯操作。
https://github.com/skylot/jadx
4. Jython:
Jython本質上是一個Java應用程序,它允許編碼人員使用Java編碼調用Python庫反之,也可以使用Python調用Java的庫。
https://www.jython.org
5. Python:
我使用的是Python3.7
三、原理:
1、首先看看我們常用的工具組合:

分析一下原因,通過服務器端都是url的請求,應該是這樣的處理方法(python偽代碼):
#接收到客戶端請求 def Get_Request(param): if param.sign != get_sign(param.url): return 0 #開始對參數進行邏輯操作
通過上面的圖我們可以看出瀏覽器發出的鏈接都是直接發送到xray的,所以如果加入了簽名算法,那么就直接返回了,根本到不了核心的邏輯。
2、改造現有的工具組合:

從上面的圖可以看到,先把url發到xray,由xray轉發到BurpSuite,在Burp中加入了ptyhon插件對url計算sign,替換了原有的url,這樣就可以跳過簽名的檢測了。
知道了原理。我們就可以行動了。
四、最佳實踐:
1. 找到需要測試的目標。
這里是的目標是apk文件,打開BurpSuite進行抓包,找到需要滲透測試的請求,發現請求中有sign的字段,應該是有簽名校驗的。形式如下:
https://www.xxxx.com/data?id=12346&imei=aabbcc&sign=88a5e407a1c85d2ef063b8e2007278e9
2. 找到sign簽名的算法。
關于怎么找算法,不是這篇文章的重點,這里簡單介紹一下,無論是apk還是web都是一樣的,apk的加密算法通常都放到so文件或者直接在java代碼中;web的簽名算法,通常都會寫到js腳本中,作為一名合格的滲透人員,相信這個應該都不是難事。
本文的目標算法比較簡單,作者把算法直接寫到了apk中,使用jadx,搜索sign的字段,很容易就找到了算法:

3. 既然找到算法,下一步,就是開始編寫BurpSuite的插件,插件的功能,就是根據url計算出sign的值,替換成新的url進行請求。
我們不造輪子,直接用官方的插件來修改。
從Github上下載官方python插件,地址:
https://github.com/portswigger/python-scripter
官方有詳細的API介紹文檔,大家可以參考:
https://portswigger.net/burp/extender/api/index.html
貼上我修改后的源碼的關鍵部分:
def gen_sign(_uri):
uri = _uri
secret_key = "AABBBCCDDEEFFGG"
parsed_tuple = urlparse.urlparse(uri)
_param_json = urlparse.parse_qs(parsed_tuple.query)
aList=[];
for _json_key,_json_vaule in _param_json.iteritems():
aList.append(_json_key)
aList.sort()
for _json_key1 in aList:
sign +=_json_key1
sign +=_param_json[_json_key1][0]
sign +=secret_key
m = hashlib.md5()
m.update(sign)
a_md5 = m.hexdigest()
return a_md5
4. 加載寫好的插件加入到BurpSuite中,并且開啟插件(Extender--
>Extensions--->Burp Extensions ---->add)。

5. 按照上面的原理進行修改后,開始運行,出去吃個飯,回來后,發現XSS漏洞一枚。
五、總結:
通過本文的介紹,相信大家以后遇到有sign校驗的目標時,又多了一種處理的方式。
當然也可以利用其他的組合,比如:xray+mitmproxy,burpsuite+scan等,總之方法有很多,適合自己就行,在這里只是拋磚引玉一下。只要是能達到目的就可以。
做為一個滲透測試人員,相信大家手上有很多優秀的滲透測試工具,這些工具的組合,就類似于我們手中的魔方,可以任意組合使用,使用的好,就可以事半功倍。
六、參考文獻:
[1]. Xray:https://docs.xray.cool/#/scenario/burp
[2]. burpSuite:https://portswigger.net/burp
[3]. jadx:https://github.com/skylot/jadx
[4]. jython: https://www.jython.org
