米斯特白帽培訓(xùn)講義(v2)漏洞篇 文件包含

米斯特白帽培訓(xùn)講義 漏洞篇 文件包含

講師:gh0stkey

整理:飛龍

協(xié)議:CC BY-NC-SA 4.0

原理

文件包含就是將一個(gè)文件包含到自己的文件中執(zhí)行泥从。它可分為本地包含和遠(yuǎn)程包含牍颈,本地包含即包含本地磁盤上的文件野舶,文件名稱是相對(duì)路徑或絕對(duì)路徑灶壶,遠(yuǎn)程包含即包含互聯(lián)網(wǎng)上的文件钓瞭,文件名稱是 URL姆蘸。

本地包含

比如我們有一個(gè)test.txt文件祝蝠,僅僅調(diào)用phpinfo來測(cè)試:

<?php phpinfo();?>

然后我們?cè)谙嗤夸浵路胖靡粋€(gè)fileinclude.php,如下:

<?php
$file=@$_GET['file'];
if($file){
    echo "<center>File:".$file."<br/>Result:</center>";
    include $file;
}

第一行代碼獲取 URL 參數(shù)file的內(nèi)容绣张。2 ~ 4 行首先判斷$file是否為空答渔,若不為空,輸出其內(nèi)容侥涵,并將其作為文件名稱包含沼撕。

我們將其部署在localhost下宋雏,之后訪問http://localhost/fileinclude.php?file=test.txt,會(huì)看到phpinfo的輸出务豺。

我這里之所以用txt文件磨总,就是想說明這個(gè)漏洞是無視擴(kuò)展名的。跟文件上傳漏洞不一樣笼沥,文件上傳漏洞中如果我們上傳的文件不是.php就執(zhí)行不了(當(dāng)然也有一些繞過手段)蚪燕,但是文件包含漏洞中的擴(kuò)展名是任意的,這里我們上傳了.txt奔浅,證實(shí)有效馆纳,那么這個(gè).jpg也是有效的。

要注意汹桦,如果被包含的文件里面沒有 PHP 標(biāo)簽鲁驶,那么就當(dāng)成 HTML 內(nèi)容如實(shí)顯示出來。就比如我們放入之前的top100.txt

遠(yuǎn)程包含

為了演示遠(yuǎn)程包含舞骆,我們需要將 PHP 配置文件中的allow_url_include設(shè)置為on钥弯,之后重啟 PHP。PHP 配置文件的位置可以在phpinfo的輸出中尋找葛作,我們搜索ini即可:

我這里是C:\php-5.5.10\php.ini寿羞,你那里可能有些差別。我們打開它赂蠢,搜索allow_url_include绪穆,會(huì)看到下面這些行,如果是Off把它改成On虱岂。

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-include
allow_url_include = On

我們需要將file參數(shù)改為http://localhost/text.txt玖院,可以看到相同結(jié)果。

技巧

00 截?cái)?/h3>

有些程序會(huì)給被包含內(nèi)容加一些后綴第岖,比如如果fileinclude.php是這樣难菌。

<?php
$file=@$_GET['file'];
if($file){
    $file .= '.php';
    echo "<center>File:".$file."<br/>Result:</center>";
    include $file;
}

它后面加了個(gè).php,也就是說蔑滓,如果我們傳入file=test則是正常的郊酒,傳入file=test.txt,或變成test.txt.php键袱,從而包含失敗燎窘。那么我們應(yīng)該怎么辦呢?

如果 PHP 版本小于 5.3蹄咖,并且magic_quotes_gpc已取消褐健,我們就可以使用%00來截?cái)唷N覀儌魅?code>file=test.txt%00澜汤,就可以實(shí)現(xiàn)包含蚜迅。

路徑遍歷

  • ./(或省略):當(dāng)前目錄
  • ../:上級(jí)目錄
  • /:根目錄(Windows 中為當(dāng)前盤內(nèi)的根目錄)
  • ~/:用戶的主目錄

例如舵匾,在 Linux 下,我們就可以使用file=/etc/passwd來讀取系統(tǒng)密碼谁不。

這里是一些常見的日志文件位置:

  • apache+Linux日志默認(rèn)路徑
    • /etc/httpd/logs/access.log
    • /var/log/httpd/access.log
  • apache+win2003日志默認(rèn)路徑
    • D:\xampp\apache\logs\access.log
    • D:\xampp\apache\logs\error.log
  • IIS6.0+win2003默認(rèn)日志文件
    • C:\WINDOWS\system32\Lognames
  • IIS7.0+win2003 默認(rèn)日志文件
    • %SystemDrive%\inetpub\logs\Lognames
  • nginx 日志文件
    • <安裝目錄>/logs
    • 如果安裝目錄為/usr/local/nginx坐梯,則為/usr/local/nginx/logs
  • apache+linux 默認(rèn)配置文件
    • /etc/httpd/conf/httpd.conf
    • /etc/init.d/httpd
  • IIS6.0+win2003 配置文件
    • C:/Windows/system32/inetsrv/metabase.xml
  • IIS7.0+WIN 配置文件
    • C:\Windows\System32\inetsrv\config\applicationHost.config

PHP 偽協(xié)議

允許遠(yuǎn)程包含的情況下,我們可以使用php://偽協(xié)議刹帕,比如php://filter/resource=test.txt可以讀取相同文件烛缔。

我們還可以加一個(gè)過濾器讓它顯示為 BASE64 編碼格式,php://filter/read=convert.base64-encode/resource=test.txt轩拨。如果我們要獲取的文件里面有不可打印的字符,或者我們想要獲取代碼的內(nèi)容院喜,可以用這種方式來獲取亡蓉,之后解碼即可。

php://input可以讀取原始的 HTTP 正文內(nèi)容喷舀。如果我們將file設(shè)置為php://input砍濒,并且在 HTTP 正文中傳入 PHP 代碼,例如<?php phpinfo();?>硫麻,即可執(zhí)行代碼爸邢。

Data URI

Data URI 的格式是data://text/plain;base64,<base64>,同樣需要遠(yuǎn)程包含拿愧。我們首先把一句話用 base64 編碼杠河,得到PD9waHAgcGhwaW5mbygpOz8+,然后將file設(shè)置為data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b(注意URL編碼)浇辜,即可執(zhí)行代碼券敌。

如何挖掘

首先對(duì) URL 進(jìn)行分析,看看是否和文件相關(guān)柳洋,比如www.test.com/xxx.php?file=yyy待诅。帶有文件相關(guān)的敏感名稱都可以進(jìn)行挖掘。

利用

當(dāng)我們發(fā)現(xiàn)了本地包含漏洞時(shí)熊镣,首先尋找上傳點(diǎn)卑雁,比如用戶頭像上傳功能。然后我們可以構(gòu)造一個(gè)純文本文件绪囱,內(nèi)容為<?php phpinfo();?>测蹲,并將其命名為xxx.jpg

之后我們就可以把xxx.jpg上傳上去毕箍,并通過應(yīng)用得到它的位置弛房,假設(shè)是/upload/xxx.jpg,然后我們就可以把file參數(shù)的值改為它而柑。以前面的代碼為例文捶,URL 是http://localhost/fileinclude.php?file=/upload/xxx.jpg荷逞。

如果我們把xxx.jpg的內(nèi)容改為菜刀的一句話,那就可以用菜刀連接粹排。

再說一下遠(yuǎn)程包含种远,遠(yuǎn)程包含的條件比較苛刻,目標(biāo)網(wǎng)站需要把allow_url_open給打開顽耳。所以有本地包含不一定有遠(yuǎn)程包含坠敷,有遠(yuǎn)程包含一定就有本地包含。但是射富,遠(yuǎn)程包含的利用相對(duì)簡單膝迎,只要將代碼上傳到自己博客,或者任何能通過 URL 訪問到的地方就可以了胰耗。后續(xù)步驟是一樣的限次。

附錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柴灯,隨后出現(xiàn)的幾起案子卖漫,更是在濱河造成了極大的恐慌,老刑警劉巖赠群,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羊始,死亡現(xiàn)場離奇詭異,居然都是意外死亡查描,警方通過查閱死者的電腦和手機(jī)突委,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叹誉,“玉大人鸯两,你說我怎么就攤上這事〕せ恚” “怎么了钧唐?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匠襟。 經(jīng)常有香客問我钝侠,道長,這世上最難降的妖魔是什么酸舍? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任帅韧,我火速辦了婚禮,結(jié)果婚禮上啃勉,老公的妹妹穿的比我還像新娘忽舟。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般傀蚌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挑随,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音勒叠,去河邊找鬼兜挨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛眯分,可吹牛的內(nèi)容都是我干的拌汇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼弊决,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼担猛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丢氢,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎先改,沒想到半個(gè)月后疚察,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仇奶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年貌嫡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该溯。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岛抄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狈茉,到底是詐尸還是另有隱情夫椭,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布氯庆,位于F島的核電站蹭秋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏堤撵。R本人自食惡果不足惜仁讨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望实昨。 院中可真熱鬧洞豁,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至礁哄,卻和暖如春长酗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桐绒。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工夺脾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茉继。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓咧叭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烁竭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菲茬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容