從bwapp學服務端包含注入(SSI injection)


0x00 背景

SSI是英文"Server Side Includes"的縮寫,翻譯成中文就是服務器端包含的意思。SSI是用於向HTML頁面提供動態內容的Web應用程序上的指令。 它們與CGI類似,不同之處在於SSI用於在加載當前頁面之前或在頁面可視化時執行某些操作。 為此,Web服務器在將頁面提供給用戶之前分析SSI。

可在SHTML文件中使用SSI指令引用其他的html文件(#include),此時服務器會將SHTML中包含的SSI指令解釋,再傳送給客戶端,此時的HTML中就不再有SSI指令了。Server-Side Includes攻擊允許通過在HTML頁面中注入腳本或遠程執行任意代碼來利用Web應用程序。 一種對於這類漏洞的挖掘方式即是查看.stm,.shtm和.shtml的頁面是否存在,但是缺少這些類型的頁面並不意味着不存在SSI攻擊。

0x01 SSI語法

目前,SSI主要有以下幾種用用途:
  1、顯示服務器端環境變量<#echo>
  2、將文本內容直接插入到文檔中<#include>
  3、顯示WEB文檔相關信息<#flastmod #fsize> (如文件制作日期/大小等)
  4、直接執行服務器上的各種程序<#exec>(如CGI或其他可執行程序)
  5、設置SSI信息顯示格式<#config>(如文件制作日期/大小顯示方式)
  高級SSI<XSSI>可設置變量使用if條件語句。

SSI指令基本格式:<!-– 指令名稱="指令參數">

如程序代碼:

<!--#exec cmd="cat /etc/passwd"-->

說明:
1.<!-- -->是HTML語法中表示注釋,當WEB服務器不支持SSI時,會忽略這些信息。
2.#exec 為SSI指令之一。
3.cmd 為exec的參數, cat /etc/passwd為參數值,在本指令中指將要執行的命令。

注意:

1.<!--與#號間無空格,只有SSI指令與參數間存在空格。
2.上面的標點="",一個也不能少。
3.SSI指令是大小寫敏感的,因此參數必須是小寫才會起作用。

因此,如果網站存在SSI漏洞的時候就會能夠執行該命令來查看系統口令。

0x02 bwapp實例

這里輸入<!--#exec cmd="cat /etc/passwd"-->提交后台會提示運行出錯,但是這也表示確實是解析執行了,嘗試更換為另一個語句來試試:<!--#echo var="DATE_LOCAL"-->這個語句會在頁面加上一個本地時間,示例如圖:

可以看到成功的解析執行了。medium難度下"被轉義加上反斜杠,但是在這里可以使用`來代替'執行,一樣能夠觸發。但是在high難度就無法繞過了,可能因為我太菜(:

給出high難度的防御代碼,也可以作為實際環境中的防御措施:

function check($data, $encoding = "UTF-8")
{

    // htmlspecialchars - converts special characters to HTML entities    
    // '&' (ampersand) becomes '&amp;' 
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;'  
    
    return htmlspecialchars($data, ENT_QUOTES, $encoding);
       
}

0x03 總結

在實際的很多業務中,用戶輸入的內容會顯示在頁面中。比如,一個存在反射型XSS漏洞的頁面,如果輸入的payload不是XSS代碼而是SSI的標簽,同時服務器又開啟了對SSI的支持的話就會存在SSI漏洞。因此,對於SSI注入的挖掘大概思路也同XSS的挖掘類似。

從定義中看出,頁面中有一小部分是動態輸出的時候使用SSI,比如:

  • 文件相關的屬性字段

  • 當前時間

  • 訪客IP

  • 調用CGI程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM