文件上傳漏洞

文件上傳漏洞

文件上傳漏洞是開發(fā)者在開發(fā)功能時沒有做足夠充分的驗證(包括前端和后端)千元,導(dǎo)致用戶可以上傳惡意文件哈误,比如木馬暖眼、病毒惕耕、惡意腳本和webshell等。

利用條件:

  1. 能夠獲取文件上傳后的文件名及路徑诫肠;(有的服務(wù)器上傳成功后會修改文件名及或者隱藏路徑司澎,攻擊者首先必須知道文件上傳在哪個路徑下)
  2. 服務(wù)器能夠解析上傳的文件:
    比如如果上傳的文件名為test.php,服務(wù)器能解析php代碼并執(zhí)行栋豫,那么就能獲取webshell挤安,但是如果服務(wù)器無法解析php文件,那么該webshell就是無效的丧鸯。
    比如上傳的文件名為test.php55蛤铜,服務(wù)器無法解析php55后綴的文件,因此無法利用丛肢。
    各個webserver服務(wù)器能解析的文件格式在配置文件里配置围肥,比如apache2的配置文件是/etc/apache2路徑下的apache2.json文件,該文件里有如下配置蜂怎,即apache2會加載mods-enabled目錄下的文件穆刻,在mods-enabled文件夾里php.conf文件則定義了哪種文件后綴可以被php解析器解析
# apache2.json
# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# php.conf
# 正則表達式配置能解析的php文件后綴
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

繞過方法

思路:進行繞過嘗試時,需要判斷:

  1. 是否能控制上傳的文件路徑
  2. 是否能控制上傳的文件名

黑名單限制繞過

特殊后綴繞過

服務(wù)器設(shè)置黑名單派敷,比如限制aps蛹批、aspx、php等后綴的文件篮愉,可以根據(jù)服務(wù)器類型,判斷哪種文件類型后綴能繞過黑名單限制且能被服務(wù)器解析來進行后綴繞過差导。
比如黑名單設(shè)置為php asp aspx试躏,可以嘗試php3
特殊后綴:
".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf"

.htaccess繞過

.htaccess文件(分布式配置文件)提供了一種方式,使得配置文件可以隨文件夾不同而不同设褐,它配置了網(wǎng)站或文件夾的訪問規(guī)則颠蕴。
可以利用 .htaccess文件來繞過限制較為全面的黑名單過濾泣刹,白名單過濾無法進行這種方式的繞過。

利用方式:

  1. 上傳 .htaccess文件犀被,文件內(nèi)容設(shè)置為AddType application/x-httpd-php .test椅您,即將 .test 文件以php格式進行解析,
  2. 上傳一句話木馬文件寡键,文件名為shell.test掀泳,服務(wù)器即可以php格式解析shell.test

如果服務(wù)器修改上傳的文件名,該方法無用

大小寫繞過

主要針對黑名單限制西轩,可以把php改為pHp
原因:
windows平臺大小寫不敏感员舵,linux平臺大小寫敏感,但是很多web平臺開發(fā)人員會為了用戶方便將網(wǎng)頁配置修改為大小寫不敏感藕畔,可以以這種方式進行繞過马僻。

空格或點繞過

空格或點繞過,在文件后綴名后加空格或點注服,windows在存儲文件時會自動去掉后面的空格韭邓,linux則不行。
比如.php.php.

白名單限制繞過

%00截斷繞過

利用條件

  • 能夠控制文件路徑和文件名溶弟;
  • 服務(wù)器在解析文件結(jié)尾時以.進行判斷女淑;
  • 服務(wù)器能成功解析到%00

利用方法:盡量在上傳路徑中使用可很,在文件名處使用能繞過前端檢測诗力,如果后端繼續(xù)對文件后綴進行校驗,無法繞過我抠。
原理
在url中 %00代表的是ascii碼中的0苇本, 在ascii碼中0是特殊字符,會被解析為文件終止符菜拓,因此當讀到%00時程序會停止繼續(xù)往下解析瓣窄。
可以使用burp進行抓包,然后在需要使用%00截斷的地方打一個空格纳鼎,然后切換到hex16進制模式俺夕,找到20字符,修改為00贱鄙,這是回到正常編碼模式劝贸,空格就變?yōu)槲募K止符了。

一般的文件上傳代碼示例:

$uploaded_name = $_FILES[ 'file' ][ 'name' ];
$uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); // 獲取上傳文件后綴
$target_name = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext; // 對上傳文件進行重命名
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" )) 
{  
    move_uploaded_file($_FILES["file"]["tmp_name"], $dir . $target_name); // 將臨時文件移動到指定目錄
    $result = $dir . $target_name;
    echo "Stored in: $result"; 
}
else{
    echo "Invalid file";
}

結(jié)合上述代碼來詳解%00截斷在文件名中使用和在上傳路徑中使用的區(qū)別:
當在文件名中使用%00時
假設(shè)文件名為test.php逗宁,將文件名修改為test.php%00.jpg映九,前端檢測到文件名結(jié)尾為.jpg,這樣可以繞過前端檢測瞎颗,但是后端php substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); 這一行代碼對文件名后綴進行了提取件甥,此時%00截斷已經(jīng)發(fā)揮了作用捌议,即此時uploaded_ext.php。因此在下面的文件名后綴檢驗中引有,后綴名已經(jīng)是.php瓣颅,無法繞過。
即如果在上傳文件名中使用%00截斷的方法譬正,能否繞過需要看前后端的代碼宫补。
當在上傳路徑中使用%00時
假設(shè)上傳路徑為./upload,我們修改上傳路徑為./upload/test.php%00导帝,上傳的文件名為test.jpg守谓,這樣可以成功上傳文件。
代碼的前三行都正常運行您单,獲取的文件后綴為.jpg斋荞,服務(wù)器生成了隨機的文件名,假設(shè)為new.jpg虐秦,if語句成功執(zhí)行平酿。
在If語句里,php代碼將上傳路徑和新生成的文件名進行拼接生成新的文件名悦陋,即./upload/test.php%00new.jpg蜈彼。然后上傳成功。
在接下來訪問url時俺驶,訪問的路徑就是http://xxx.com//upload/test.php%00new.jpg幸逆,此時就會發(fā)生00截斷,瀏覽器會解析為http://xxx.com/upload/test.php
因此暮现,在實際測試中还绘,%00截斷要配合文件上傳路徑使用效果最好。

00截斷編碼問題
為什么網(wǎng)上有的%00不用改動栖袋,有的卻要進行urldecode呢拍顷?
因為在上傳表單中存在一個enctype的屬性,而且在enctype=”multipart/form-data”這里塘幅,是不會對表單中的數(shù)據(jù)進行解碼的昔案。
而path(路徑)又大多存放在表單中,所以需要對%00進行urldecode
簡單粗暴點說电媳,在碰到multipart/from-data的時候踏揣,就需要進行urldecode 了。
為什么有的%00不用改動呢匾乓?
因為path也有可能直接存在url呼伸、cookie里邊,在提交數(shù)據(jù)的時候钝尸,瀏覽器會對數(shù)據(jù)進行url編碼括享。到服務(wù)器,則會對數(shù)據(jù)進行一次解碼操作珍促。
簡單些說铃辖,path在url、cookie或者上傳方式不是multipart/from-data的時候猪叙,就不用進行url編碼

https://blog.csdn.net/weixin_44840696/article/details/90581104
00截斷與%00截斷 : 講了00截斷的應(yīng)用
關(guān)于上傳中00截斷的理解與分析 講的比較清楚明白

前端驗證繞過

有的服務(wù)器只在前端進行驗證娇斩,可以繞過前端的驗證

  1. 通過burp抓包,修改并重放網(wǎng)絡(luò)包穴翩,繞過前端驗證
  2. 刪除或禁用js代碼進行繞過

服務(wù)器解析漏洞繞過

IIS 5.x / 6.0解析漏洞

漏洞1: 當創(chuàng)建.asp的文件目錄時犬第,在此目錄下的任意文件,服務(wù)器都解析為asp文件芒帕。
比如 http://www.xxx.com/xx.asp/xx.jpg會被解析為asp文件
漏洞2: 服務(wù)器默認不解析“歉嗓;”以后的內(nèi)容
比如http://www.xxx.com/xx.asp;.jpg會被解析為asp文件

Nginx解析漏洞

低版本的nginx中,php配置文件php.ini中的cgi.fix_pathinfo選項默認為開啟狀態(tài)背蟆,當url中有不存在的文件時鉴分,php會默認向前解析,直到找到能解析的文件带膀。
比如http://www.xxx.com/phpinfo.jpg/1.php志珍,在服務(wù)器中1.php不存在,會向前解析垛叨,解析phpinfo.jpg文件伦糯,但是會以php的格式進行解析,即解析為phpinfo.php嗽元。

Apache 1.x / 2.x 解析漏洞

Apache從右向左判斷文件后綴敛纲,跳過非可識別的后綴,直到找到可識別的后綴然后按照可識別的后綴進行解析还棱。
比如http://www.xxx.com/test.php.abc载慈,apache無法識別abc后綴,向前識別到php后綴珍手,最后該文件以php文件格式進行解析

windows文件流特性繞過

windows文件流

文件內(nèi)容檢測繞過

有些系統(tǒng)會檢測文件內(nèi)容办铡,可以將php文件和圖片文件進行結(jié)合
比如圖片文件 test.png,php文件為test.php
執(zhí)行命令cat test.php >> test.png琳要,可以將test.php文件成功追加在test.png文件后面且可以執(zhí)行

有時網(wǎng)上找的圖片進行拼接時無法運行php寡具,是因為圖片里的有些字符無法被識別,可以刪除一些非關(guān)鍵內(nèi)容稚补,只保留圖片的文件頭童叠,這樣既保存了文件格式,也可以被php解析器解析進行代碼執(zhí)行。

防御方式

文件類型檢測

使用白名單厦坛、黑名單

安全的函數(shù)

使用安全啊的函數(shù)

webserver安全配置

熟悉webserver五垮,使用安全的webserver版本,進行安全的配置

漏洞鏈

有時單一的漏洞無法完成杜秸,可以利用多個漏洞結(jié)合的方式來完成繞過
比如 文件上傳漏洞 + 本地文件包含漏洞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末放仗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撬碟,更是在濱河造成了極大的恐慌诞挨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呢蛤,死亡現(xiàn)場離奇詭異惶傻,居然都是意外死亡,警方通過查閱死者的電腦和手機其障,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門银室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人静秆,你說我怎么就攤上這事粮揉。” “怎么了抚笔?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵扶认,是天一觀的道長。 經(jīng)常有香客問我殊橙,道長辐宾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任膨蛮,我火速辦了婚禮叠纹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敞葛。我一直安慰自己誉察,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布惹谐。 她就那樣靜靜地躺著持偏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氨肌。 梳的紋絲不亂的頭發(fā)上鸿秆,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音怎囚,去河邊找鬼卿叽。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的考婴。 我是一名探鬼主播贩虾,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蕉扮!你這毒婦竟也來了整胃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喳钟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后在岂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奔则,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年蔽午,在試婚紗的時候發(fā)現(xiàn)自己被綠了易茬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡及老,死狀恐怖抽莱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骄恶,我是刑警寧澤食铐,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站僧鲁,受9級特大地震影響虐呻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寞秃,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一斟叼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧春寿,春花似錦朗涩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绢淀,卻和暖如春萤悴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皆的。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工覆履, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓硝全,卻偏偏與公主長得像栖雾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伟众,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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

  • 0x01 文件上傳漏洞 文件上傳漏洞顧名思義就是用戶上傳一個可執(zhí)行的腳本文件析藕,獲得了執(zhí)行服務(wù)器端命令的能力。通常凳厢,...
    Pino_HD閱讀 1,911評論 0 0
  • 文件上傳漏洞 文件上傳漏洞就是用戶上傳一個可執(zhí)行的文件腳本账胧,并通過腳本獲得執(zhí)行服務(wù)器端命令的的能力。 上傳的文件可...
    L1E6N0A2閱讀 1,434評論 0 2
  • 文件上傳漏洞是指用戶上傳了一個可執(zhí)行的腳本文件先紫,并通過此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力治泥。這種攻擊方式是最為直...
    付出從未后悔閱讀 1,150評論 0 4
  • 前言: 實習(xí)工作以后,我才發(fā)現(xiàn)自己對于滲透測試還沒形成自己的測試體系遮精,對于一些常見的漏洞測試方法了解得不夠全居夹,更加...
    book4yi閱讀 1,990評論 0 3
  • 文件上傳漏洞可以說是日常滲透測試用得最多的一個漏洞,因為用它獲得服務(wù)器權(quán)限最快最直接本冲。但是想真正把這個漏洞利用好卻...
    Splunker閱讀 285評論 0 0