SSI
SSI
SSI(Server Side Includes,服務器端包含)
SSI是嵌入HTML頁面中的指令,在頁面被提供時由服務器進行運算,以對現有HTML頁面增加動態生成的內容,而無須通過CGI程序提供其整個頁面,或者使用其他動態技術。
從技術角度上來說,SSI就是在HTML文件中,可以通過注釋行調用的命令或指針,即允許通過在HTML頁面注入腳本或遠程執行任意代碼。
1.1 啟用SSI
示例:Nginx 配置SSI功能
在http段中加入下面幾句即可:
ssi on; ssi_silent_errors off; ssi_types text/shtml;默認Apache不開啟SSI,SSI這種技術已經比較少用了。如果應用沒有使用到SSI,關閉服務器對SSI的支持即可。
IIS和Apache都可以開啟SSI功能,具體可參考:Apache、Nginx 服務配置服務器端包含(SSI)
SSI語法
首先,介紹下SHTML,在SHTML文件中使用SSI指令引用其他的html文件(#include),此時服務器會將SHTML中包含的SSI指令解釋,再傳送給客戶端,此時的HTML中就不再有SSI指令了。比如說框架是固定的,但是里面的文章,其他菜單等即可以用#include引用進來。
①顯示服務器端環境變量<#echo>
本文檔名稱:
<!–#echo var="DOCUMENT_NAME"–>
現在時間:
<!–#echo var="DATE_LOCAL"–>
顯示IP地址:
<! #echo var="REMOTE_ADDR"–>
②將文本內容直接插入到文檔中<#include>
<! #include file="文件名稱"–><!--#include virtual="index.html" --><! #include virtual="文件名稱"–><!--#include virtual="/www/footer.html" -->注:file包含文件可以在同一級目錄或其子目錄中,但不能在上一級目錄中,virtual包含文件可以是Web站點上的虛擬目錄的完整路徑
③顯示WEB文檔相關信息<#flastmod><#fsize>(如文件制作日期/大小等)
文件最近更新日期:
<! #flastmod file="文件名稱"–>
文件的長度:
<!–#fsize file="文件名稱"–>
④直接執行服務器上的各種程序<#exec>(如CGI或其他可執行程序)
<!–#exec cmd="文件名稱"–><!--#exec cmd="cat /etc/passwd"--><!–#exec cgi="文件名稱"–><!--#exec cgi="/cgi-bin/access_log.cgi"–>將某一外部程序的輸出插入到頁面中。可插入CGI程序或者是常規應用程序的輸入,這取決于使用的參數是cmd還是cgi。
⑤設置SSI信息顯示格式<#config>(如文件制作日期/大小顯示方式)
⑥高級SSI可設置變量使用if條件語句。
漏洞場景
在很多業務中,用戶輸入的內容會顯示在頁面中。比如,一個存在反射型XSS漏洞的頁面,如果輸入的payload不是XSS代碼而是SSI的標簽,同時服務器又開啟了對SSI的支持的話就會存在SSI漏洞。
從定義中看出,頁面中有一小部分是動態輸出的時候使用SSI,比如:
- 文件相關的屬性字段
- 當前時間
- 訪客IP
- 調用CGI程序
SSI注入的條件
當符合下列條件時,攻擊者可以在 Web 服務器上運行任意命令:
- Web 服務器已支持SSI(服務器端包含)
- Web 應用程序未對對相關SSI關鍵字做過濾
- Web 應用程序在返回響應的HTML頁面時,嵌入用戶輸入
SSI注入常用命令:[Server-Side Includes (SSI) Injection]
SSI挖掘思路
兩個思路:
- 從業務場景來Fuzz,比如獲取IP、定位、時間等
- 識別頁面是否包含.stm,.shtm和.shtml后綴
google dork:‘inurl:bin/cklb’
總結
- 上一篇: SSI通信C语言编程,SSI协议应用和编
- 下一篇: STM32软硬件SPI读取MAX3186