上篇文章介紹了GraphQL靶場的一些基本漏洞:https://mp.weixin.qq.com/s/WoHEC50u7KACLLafZL5tww
本篇繼續(xù)介紹該靶場的一些漏洞。
3. 代碼執(zhí)行
3.1 importPaste
在上面介紹SSRF的導入paste功能處溃蔫,通過分析源碼稠腊,發(fā)現(xiàn)此處還存在代碼注入漏洞纵势,接收輸入请垛,拼接到curl --insecure
命令后面并執(zhí)行系統(tǒng)命令:
core/views.py ImportPaste類中
def mutate(self, info, host='pastebin.com', port=443, path='/', scheme="http"):
url = security.strip_dangerous_characters(f"{scheme}://{host}:{port}{path}")
cmd = helpers.run_cmd(f'curl --insecure {url}')
可以通過
``
||
;;
&&
等方式拼接執(zhí)行命令:
3.2 systemDiagnostics
本篇文章補充一個命令執(zhí)行的功能點遏暴,可以算是后臺命令執(zhí)行班挖。
通過分析源碼文件,在core/views.py
文件中垫释,Query類 - resolve_system_diagnostics
方法丝格,對應 query 接口 systemDiagnostics
,cmd接收參數(shù)進行命令執(zhí)行棵譬。
在執(zhí)行命令前,會進行鑒權(quán)校驗预伺,只有提供正確的登錄憑證订咸,我們才能執(zhí)行命令。
可以使用burp的intruder
模塊進行爆破酬诀,得到正確的密碼:
該靶場存在兩個挑戰(zhàn)難度脏嚷,Beginner
和 Expert
,通過X-DVGA-MODE
請求頭進行控制瞒御。當難度為Expert
時父叙,就會受到源碼文件中security.allowed_cmds(cmd)
,而無法執(zhí)行命令:
4. 注入
4.1 存儲型XSS
GraphQL 的 createPaste 和 importPaste 允許創(chuàng)建和導入新的paste肴裙。paste可以包括任何字符而沒有任何限制趾唱。這些內(nèi)容會在公共和私有粘貼頁面中呈現(xiàn),這將導致存儲型XSS漏洞蜻懦。
對應的請求包為:
訪問時甜癞,執(zhí)行而已JS代碼:
5. 鑒權(quán)繞過
5.1 /graphiql
接口繞過鑒權(quán)
該靶場存在/graphiql
并且可以執(zhí)行相關查詢操作,但較危險的操作被禁止了宛乃,比如下方的命令執(zhí)行操作就被禁止了:
通過觀察請求白中的cookie悠咱,我們發(fā)現(xiàn)env
cookie是經(jīng)過base64編碼的:
Z3JhcGhpcWw6ZGlzYWJsZQ==
對應的明文字符為:
graphiql:disable
。
嘗試將 graphiql:enable
base64 編碼:Z3JhcGhpcWw6ZW5hYmxl
征炼,替換cookie析既,借此可以繞過限制,執(zhí)行危險操作谆奥。
6. 任意文件寫入 / 目錄遍歷
uploadPaste
這個 mutation 允許我們上傳本地文件作為paste的內(nèi)容眼坏。
該上傳過程的請求包:
filename
參數(shù)未經(jīng)過任何過濾,我們可以使用../
將文件內(nèi)容寫到服務器上的任何位置雄右。
成功寫入文件到目標服務器/tmp
目錄下:
由此空骚,我們可以寫入計劃任務文件
纺讲、.ssh公鑰文件
等內(nèi)容控制服務器。
7. 利用工具 - inql
項目地址:https://github.com/doyensec/inql
inql 是一種用于促進 GraphQL 技術(shù)安全審計工作的安全測試工具囤屹。
它可以作為工具單獨運行熬甚,也可以作為burp插件輔助使用,我更偏向于作為burp插件使用肋坚。
安裝好該burp插件后乡括,burp狀態(tài)欄會多出InQL Scanner
和 InQL Timer
兩欄。
7.1 基本使用
這個工具對于非80端口的url不支持智厌。 挖個坑诲泌,有時間學習下這個插件的源碼,將這個不足之處修正铣鹏。
http://dvga:5000/graphql
就不能load敷扫。
該工具只能使用80端口。
在頂部輸入字段中加載 GraphQL 端點或 JSON 架構(gòu)文件位置诚卸,點擊load按鈕:
選擇任何 query/mutation/subscription 將在主文本區(qū)域加載相應的模板:
7.2 發(fā)送到burp repeater模塊
就可以直接在repeater模塊中操作數(shù)據(jù)包了:
7.3 發(fā)送到 GraphiQL
前面我們介紹了graphiql是一個UI良好的工具葵第,該插件也提供了這個功能,我們可以將相關請求包發(fā)送到該插件提供的graphiql接口處:
其會在瀏覽器打開一個graphiql界面合溺,查詢請求:
參考鏈接
https://mp.weixin.qq.com/s/gp2jGrLPllsh5xn7vn9BwQ