反制爬虫之Burp Suite RCE
一、前言
Headless Chrome是谷歌Chrome瀏覽器的無界面模式,通過命令行方式打開網(wǎng)頁并渲染,常用于自動(dòng)化測(cè)試、網(wǎng)站爬蟲、網(wǎng)站截圖、XSS檢測(cè)等場(chǎng)景。
近幾年許多桌面客戶端應(yīng)用中,基本都內(nèi)嵌了Chromium用于業(yè)務(wù)場(chǎng)景使用,但由于開發(fā)不當(dāng)、CEF版本不升級(jí)維護(hù)等諸多問題,攻擊者可以利用這些缺陷攻擊客戶端應(yīng)用以達(dá)到命令執(zhí)行效果。
本文以知名滲透軟件Burp Suite舉例,從軟件分析、漏洞挖掘、攻擊面擴(kuò)展等方面進(jìn)行深入探討。
二、軟件分析
以Burp Suite Pro v2.0beta版本為例,要做漏洞挖掘首先要了解軟件架構(gòu)及功能點(diǎn)。
將burpsuite_pro_v2.0.11beta.jar進(jìn)行解包,可以發(fā)現(xiàn)Burp Suite打包了Windows、Linux、Mac的Chromium,可以兼容在不同系統(tǒng)下運(yùn)行內(nèi)置Chromium瀏覽器。
在Windows系統(tǒng)中,Burp Suite v2.0運(yùn)行時(shí)會(huì)將chromium-win64.7z解壓至C:\Users\user\AppData\Local\JxBrowser\browsercore-64.0.3282.24.unknown\目錄
從目錄名及數(shù)字簽名得知Burp Suite v2.0是直接引用JxBrowser瀏覽器控件,其打包的Chromium版本為64.0.3282.24。
那如何在Burp Suite中使用內(nèi)置瀏覽器呢?在常見的使用場(chǎng)景中,Proxy -> HTTP history -> Response -> Render及Repeater -> Render都能夠調(diào)用內(nèi)置Chromium瀏覽器渲染網(wǎng)頁。
當(dāng)Burp Suite喚起內(nèi)置瀏覽器browsercore32.exe打開網(wǎng)頁時(shí),browsercore32.exe會(huì)創(chuàng)建Renderer進(jìn)程及GPU加速進(jìn)程。
browsercore32.exe進(jìn)程運(yùn)行參數(shù)如下:
// Chromium主進(jìn)程 C:\Users\user\AppData\Local\JxBrowser\browsercore-64.0.3282.24.unknown\browsercore32.exe --port=53070 --pid=13208 --dpi-awareness=system-aware --crash-dump-dir=C:\Users\user\AppData\Local\JxBrowser --lang=zh-CN --no-sandbox --disable-xss-auditor --headless --disable-gpu --log-level=2 --proxy-server="socks://127.0.0.1:0" --disable-bundled-ppapi-flash --disable-plugins-discovery --disable-default-apps --disable-extensions --disable-prerender-local-predictor --disable-save-password-bubble --disable-sync --disk-cache-size=0 --incognito --media-cache-size=0 --no-events --disable-settings-window// Renderer進(jìn)程 C:\Users\user\AppData\Local\JxBrowser\browsercore-64.0.3282.24.unknown\browsercore32.exe --type=renderer --log-level=2 --no-sandbox --disable-features=LoadingWithMojo,browser-side-navigation --disable-databases --disable-gpu-compositing --service-pipe-token=C06434E20AA8C9230D15FCDFE9C96993 --lang=zh-CN --crash-dump-dir="C:\Users\user\AppData\Local\JxBrowser" --enable-pinch --device-scale-factor=1 --num-raster-threads=1 --enable-gpu-async-worker-context --disable-accelerated-video-decode --service-request-channel-token=C06434E20AA8C9230D15FCDFE9C96993 --renderer-client-id=2 --mojo-platform-channel-handle=2564 /prefetch:1從進(jìn)程運(yùn)行參數(shù)分析得知,Chromium進(jìn)程以headless模式運(yùn)行、關(guān)閉了沙箱功能、隨機(jī)監(jiān)聽一個(gè)端口(用途未知)。
【學(xué)習(xí)資料】
三、漏洞利用
Chromium組件的歷史版本幾乎都存在著1Day漏洞風(fēng)險(xiǎn),特別是在客戶端軟件一般不會(huì)維護(hù)升級(jí)Chromium版本,且關(guān)閉沙箱功能,在沒有沙箱防護(hù)的情況下漏洞可以無限制利用。
Burp Suite v2.0內(nèi)置的Chromium版本為64.0.3282.24,該低版本Chromium受到多個(gè)歷史漏洞影響,可以通過v8引擎漏洞執(zhí)行shellcode從而獲得PC權(quán)限。
以Render功能演示,利用v8漏洞觸發(fā)shellcode打開計(jì)算器(此處感謝Sakura提供漏洞利用代碼)
這個(gè)漏洞沒有公開的CVE ID,但其詳情可以在這里找到。
該漏洞的Root Cause是在進(jìn)行Math.expm1的范圍分析時(shí),推斷出的類型是Union(PlainNumber, NaN),忽略了Math.expm1(-0)會(huì)返回-0的情況,從而導(dǎo)致范圍分析錯(cuò)誤,導(dǎo)致JIT優(yōu)化時(shí),錯(cuò)誤的將邊界檢查CheckBounds移除,造成了OOB漏洞。
用戶在通過Render功能渲染頁面時(shí)觸發(fā)v8漏洞成功執(zhí)行shellcode。
四、進(jìn)階攻擊
Render功能需要用戶交互才能觸發(fā)漏洞,相對(duì)來說比較雞肋,能不能0click觸發(fā)漏洞?答案是可以的。
Burp Suite v2.0的Live audit from Proxy被動(dòng)掃描功能在默認(rèn)情況下開啟JavaScript分析引擎(JavaScript analysis),用于掃描JavaScript漏洞。
其中JavaScript分析配置中,默認(rèn)開啟了動(dòng)態(tài)分析功能(dynamic analysis techniques)、額外請(qǐng)求功能(Make requests for missing Javascript dependencies)
JavaScript動(dòng)態(tài)分析功能會(huì)調(diào)用內(nèi)置chromium瀏覽器對(duì)頁面中的JavaScript進(jìn)行DOM XSS掃描,同樣會(huì)觸發(fā)頁面中的HTML渲染、JavaScript執(zhí)行,從而觸發(fā)v8漏洞執(zhí)行shellcode。
額外請(qǐng)求功能當(dāng)頁面存在script標(biāo)簽引用外部JS時(shí),除了頁面正常渲染時(shí)請(qǐng)求加載script標(biāo)簽,還會(huì)額外發(fā)起請(qǐng)求加載外部JS。即兩次請(qǐng)求加載外部JS文件,并且分別執(zhí)行兩次JavaScript動(dòng)態(tài)分析。
額外發(fā)起的HTTP請(qǐng)求會(huì)存在明文特征,后端可以根據(jù)該特征在正常加載時(shí)返回正常JavaScript代碼,額外加載時(shí)返回漏洞利用代碼,從而可以實(shí)現(xiàn)在Burp Suite HTTP history中隱藏攻擊行為。
GET /xxx.js HTTP/1.1 Host: www.xxx.com Connection: close Cookie: JSESSIONID=3B6FD6BC99B03A63966FC9CF4E8483FFJavaScript動(dòng)態(tài)分析 + 額外請(qǐng)求 + chromium漏洞組合利用效果:
五、流量特征檢測(cè)
默認(rèn)情況下Java發(fā)起HTTPS請(qǐng)求時(shí)協(xié)商的算法會(huì)受到JDK及操作系統(tǒng)版本影響,而Burp Suite自己實(shí)現(xiàn)了HTTPS請(qǐng)求庫(kù),其TLS握手協(xié)商的算法是固定的,結(jié)合JA3算法形成了TLS流量指紋特征可被檢測(cè),有關(guān)于JA3檢測(cè)的知識(shí)點(diǎn)可學(xué)習(xí)《TLS Fingerprinting with JA3 and JA3S》。
Cloudflare開源并在CDN產(chǎn)品上應(yīng)用了MITMEngine組件,通過TLS指紋識(shí)別可檢測(cè)出惡意請(qǐng)求并攔截,其覆蓋了大多數(shù)Burp Suite版本的JA3指紋從而實(shí)現(xiàn)檢測(cè)攔截。這也可以解釋為什么在滲透測(cè)試時(shí)使用Burp Suite請(qǐng)求無法獲取到響應(yīng)包。
以Burp Suite v2.0舉例,實(shí)際測(cè)試在各個(gè)操作系統(tǒng)下,同樣的jar包發(fā)起的JA3指紋是一樣的。
不同版本Burp Suite支持的TLS算法不一樣會(huì)導(dǎo)致JA3指紋不同,但同樣的Burp Suite版本JA3指紋肯定是一樣的。如果需要覆蓋Burp Suite流量檢測(cè)只需要將每個(gè)版本的JA3指紋識(shí)別覆蓋即可檢測(cè)Burp Suite攻擊從而實(shí)現(xiàn)攔截。
本文章涉及內(nèi)容僅限防御對(duì)抗、安全研究交流,請(qǐng)勿用于非法途徑。
學(xué)習(xí)安全,就來找我
【學(xué)習(xí)資料】
總結(jié)
以上是生活随笔為你收集整理的反制爬虫之Burp Suite RCE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVE-2021-35211: Sola
- 下一篇: 学了网络安全以后能做哪些岗位呢?来来来,