Upload_labs by L0st

中間件漏洞

IIS

  1. IIS6.0文件解析 xx.asp;.jpg
  2. IIS6.0目錄解析 xx.asp/1.jpg
  3. IIS 7.0畸形解析 xxx.jpg/x.asp

Apache

  1. %0a(CVE-2017-15715)
  2. 未知后綴 test.php.xxx

Nginx

  1. 訪問連接加/xxx.php test.jpg/xxx.php
  2. 畸形解析漏洞 test.jpg%00xxx.php
  3. CVE-2013-4547 test.jpg(非編碼空格)\0x.php

Tomcat

  1. xxx.jsp/
  2. xxx.jsp%20
  3. xxx.jsp::$DATA

Upload-Labs練習(xí)

pass-01

傳一個php文件上去,點上傳,彈窗說該文件不允許上傳,根據(jù)處理的速度推斷應(yīng)該是前端判斷文件是否合法惕医,故查看源碼,果然有一段javascript:

<script type="text/javascript">
    function checkFile() {
        var file = document.getElementsByName('upload_file')[0].value;
        if (file == null || file == "") {
            alert("請選擇要上傳的文件!");
            return false;
        }
        //定義允許上傳的文件類型
        var allow_ext = ".jpg|.png|.gif";
        //提取上傳文件的類型
        var ext_name = file.substring(file.lastIndexOf("."));
        //判斷上傳文件類型是否允許上傳
        if (allow_ext.indexOf(ext_name) == -1) {
            var errMsg = "該文件不允許上傳绩郎,請上傳" + allow_ext + "類型的文件,當(dāng)前文件類型為:" + ext_name;
            alert(errMsg);
            return false;
        }
    }
</script>

我們直接在頁面元素中將onsubmit事件刪除榨呆,就可以上傳了情组。
也可以修改文件名稱為1.jpg沙峻,然后用burp suite抓包修改文件名為1.php暖夭,繞過前端檢查锹杈。

pass-02

上傳1.jpg然后burpsuite修改后綴即可撵孤。

    $is_upload = false;
    $msg = null;
    if (isset($_POST['submit'])) {
        if (file_exists($UPLOAD_ADDR)) {
            if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
                if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                    $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                    $is_upload = true;

                }
            } else {
                $msg = '文件類型不正確,請重新上傳竭望!';
            }
        } else {
            $msg = $UPLOAD_ADDR.'文件夾不存在,請手工創(chuàng)建邪码!';
        }
    }

可以看到,服務(wù)端通過檢查MIME來確定文件類型

pass-03

上傳一個.php文件咬清,提示不允許上傳asp,aspx,php,jsp后綴文件闭专,那么我們就從后綴下手

Apache服務(wù)器有一個特性,會從右往左開始解析文件后綴旧烧,如果最右邊的擴展名不可識別影钉,就繼續(xù)往左判斷,直到遇到可以識別的后綴為止掘剪,所以這里我們上傳 1.php.xxxxx 即可繞過

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//刪除文件名末尾的點
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //轉(zhuǎn)換為小寫
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR. '/' . $_FILES['upload_file']['name'])) {
                 $img_path = $UPLOAD_ADDR .'/'. $_FILES['upload_file']['name'];
                 $is_upload = true;
            }
        } else {
            $msg = '不允許上傳.asp,.aspx,.php,.jsp后綴文件平委!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夾不存在,請手工創(chuàng)建!';
    }
}

既然基于黑名單判斷夺谁,那么我們需要知道Apache可以解析php,phtml后綴的文件廉赔,故上傳 1.phtml直接繞過

pass-04

  1. 此處基于依舊可以通過上傳 1.php.xxxx 繞過檢查
  2. 上傳.htaccess進行覆蓋也可以:
    上傳一個.htaccess文件含有以下內(nèi)容:
SetHandler application/x-httpd-php 

或是

<FilesMatch ".jpg">
SetHandler application/x-httpd-php
</FilesMatch>

然后隨便上傳任意后綴的文件,apache均會當(dāng)作php解析.
源碼:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".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");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//刪除文件名末尾的點
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //轉(zhuǎn)換為小寫
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允許上傳!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夾不存在,請手工創(chuàng)建匾鸥!';
    }
}

pass-05

  1. 利用apache解析特性上傳1.php.xxxx繞過
  2. 查看源碼發(fā)現(xiàn)沒有對文件名進行大小寫統(tǒng)一蜡塌,故1.PHP既可繞過驗證

pass-06

  1. 利用apache解析特性上傳1.php.xxxx繞過
  2. 用Burpsuite抓包修改文件名,后綴末尾加空格即可繞過

pass-07

  1. 直接上傳1.php.xxxx
  2. 在文件后綴名加 . (Windows系統(tǒng)會自動去除文件名末尾的.和空格)

pass-08

看源碼發(fā)現(xiàn)這里沒有對文件名進行去 ::DATA 操作勿负,故直接后綴末尾加 ::DATA 即可繞過馏艾。

pass-09

查看源碼的過濾規(guī)則,將文件名設(shè)置為 '1.php. .' 即可繞過規(guī)則檢查

pass-10

程序使用str_ireplace函數(shù)替換掉了文件名中的敏感字笆环,但該函數(shù)只會匹配一次攒至,
故我們雙寫后綴名來繞過: 1.pphphp

pass-11

查看源碼發(fā)現(xiàn)使用白名單過濾厚者,但通過url中通過get方式提交了 save_path 參數(shù)躁劣,并將其拼接到文件名中,
故我們修改 /?sava_path=../upload/1.php%00 使用%00將 $_GET('save_path') 后面的文件名截斷库菲。
然后上傳1.jpg繞過

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){    
            $is_upload = true;
        }
        else{
            $msg = '上傳失斦送!';
        }
    }
    else{
        $msg = "只允許上傳.jpg|.png|.gif類型文件熙宇!";
    }
}

pass-12

與pass-11無異鳖擒,只是將提交save_path參數(shù)的方法改成了POST,用burpsuite抓包修改即可烫止。

pass-13

查看源碼發(fā)現(xiàn)通過讀取文件前兩個字節(jié)判斷文件類型蒋荚,所以需要我們制作圖片馬:
copy normal.jpg/b+shell.php/a webshell.jpg

參數(shù)/b指定以二進制格式復(fù)制、合并文件; 用于圖像類/聲音類文件
參數(shù)/a指定以ASCII格式復(fù)制馆蠕、合并文件期升。用于txt等文檔類文件

pass-14

程序通過使用 getimagesize() 函數(shù)獲取圖片信息惊奇,故仍制作圖片馬繞過檢查

pass-15

程序通過使用 exif_imagetype() 函數(shù)獲取文件類型,故仍制作圖片馬繞過檢查

pass-16

查看源碼看到后端程序?qū)D片進行了imagecreatefromgif()操作播赁,即判斷文件是否為合法gif文件颂郎,
這里我們上傳圖片馬,然后用burpsuite抓包容为,在 Content-Type 下兩行乓序,即文件內(nèi)容開頭處添加
GIF89a ,即可繞過驗證

繞過imagecreatefromgif()函數(shù)的方法
https://secgeek.net/bookfresh-vulnerability/

pass-17

競爭條件

pass-18

競爭條件

pass-19

在文件名處使用0x00截斷符繞過

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坎背,隨后出現(xiàn)的幾起案子替劈,更是在濱河造成了極大的恐慌,老刑警劉巖沼瘫,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抬纸,死亡現(xiàn)場離奇詭異,居然都是意外死亡耿戚,警方通過查閱死者的電腦和手機湿故,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膜蛔,“玉大人坛猪,你說我怎么就攤上這事≡砉桑” “怎么了墅茉?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呜呐。 經(jīng)常有香客問我就斤,道長,這世上最難降的妖魔是什么蘑辑? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任洋机,我火速辦了婚禮,結(jié)果婚禮上洋魂,老公的妹妹穿的比我還像新娘绷旗。我一直安慰自己,他們只是感情好副砍,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布衔肢。 她就那樣靜靜地躺著,像睡著了一般豁翎。 火紅的嫁衣襯著肌膚如雪角骤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天心剥,我揣著相機與錄音邦尊,去河邊找鬼硼控。 笑死,一個胖子當(dāng)著我的面吹牛胳赌,可吹牛的內(nèi)容都是我干的牢撼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼疑苫,長吁一口氣:“原來是場噩夢啊……” “哼熏版!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捍掺,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤撼短,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挺勿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曲横,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年不瓶,在試婚紗的時候發(fā)現(xiàn)自己被綠了禾嫉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚊丐,死狀恐怖熙参,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情麦备,我是刑警寧澤孽椰,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站凛篙,受9級特大地震影響黍匾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呛梆,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一锐涯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧削彬,春花似錦全庸、人聲如沸秀仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽神僵。三九已至雁刷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間保礼,已是汗流浹背沛励。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工责语, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人目派。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓坤候,卻偏偏與公主長得像,于是被迫代替她去往敵國和親企蹭。 傳聞我的和親對象是個殘疾皇子白筹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 最近剛出的一個用來練習(xí)文件上傳漏洞的一個教程--------upload-labs;它的任務(wù)是上傳一個webshe...
    不吃魚的貓_de06閱讀 3,105評論 0 0
  • 在upload-labs第四題中,我們查看源碼會發(fā)現(xiàn) 它是一個黑名單谅摄,禁止了所有的黑名單后綴的繞過方式徒河,這時你就可...
    不吃魚的貓_de06閱讀 3,077評論 0 0
  • (源自摘抄整理)https://www.91ri.org/11494.html Webshell實現(xiàn)與隱藏探究 一...
    JackyTsuuuy閱讀 20,704評論 2 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 莫不是梨花帶淚 便不會悉數(shù)珍藏 任它鏤空,襟滿風(fēng)霜 是隆冬拿起麥克清唱 是一番番夢魘腿著遠游 關(guān)內(nèi)燈火通明的城不知...
    封城雪閱讀 334評論 5 8