web安全學習筆記(六) 命令執行漏洞&&文件上傳漏洞

0.前言

上文講到了如何對OWASPBWA靶機的低、中安全級別下的文件上傳漏洞的利用。本文講講述如何繞過高安全級別下的文件上傳限制,以及如何利用命令執行漏洞。

1. 命令執行漏洞

部分web應用程序會調用底層的操作系統命令,例如,一些網站網站會提供一些ping命令的接口,用來測試網站在各地的ping的響應速度:
在這裏插入圖片描述
在我們搭建的靶機中,也存在類似的功能:
在這裏插入圖片描述
點擊查看源碼可以得知,當用戶在命令框中輸入了某個地址的IP的時候,會調用系統的ping命令來測試相應速度:

<?php

if( isset( $_POST[ 'submit' ] ) ) {

    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) { 
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';     
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    }
}
?>

當輸入baidu.com的時候,那麼baidu.com的參數會傳給$target, 此時,判斷操作系統,執行“ping -c 3 baidu.com”。這裏就非常像SQL注入了,在SQL注入中,雖然我們不能修改已經寫死的SELECT XXX FROM XXX, 但是可以通過修改後面的參數,實現一些其他目的。
在命令執行漏洞中,也是同樣的。操作系統的指令,往往可以用&& 連結兩條指令。若我們在命令框裏輸入,baidu.com && ls:
在這裏插入圖片描述
那麼操作系統中執行的就爲:

ping -c 3 baidu.com && ls

這樣的漏洞是十分危險的,比如我們還可以查看/etc/passwd下的文件:
在這裏插入圖片描述
當然,除了&&可以連接兩條命令之外,&, |, || 符號都是可以連接兩條命令的,不同的是,符號不同,被連接的命令執行過程不同:

command A && command B #先執行A命令再執行B命令
command A & command B  #先執行B命令再執行A命令
command A || command B #若A命令執行失敗,執行B命令
command A | command B  #只執行B命令

2.圖片木馬

在靶機高安全級別下,查看文件上傳頁面的源代碼:

File Upload Source
<?php
if (isset($_POST['Upload'])) {

            $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
            $target_path = $target_path . basename($_FILES['uploaded']['name']);
            $uploaded_name = $_FILES['uploaded']['name'];
            $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
            $uploaded_size = $_FILES['uploaded']['size'];

            if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){


                if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
                    
                    echo '<pre>';
                    echo 'Your image was not uploaded.';
                    echo '</pre>';
                
                  } else {
                
                    echo '<pre>';
                    echo $target_path . ' succesfully uploaded!';
                    echo '</pre>';
                    
                    }
            }
            
            else{
                echo '<pre>';
                echo 'Your image was not uploaded.';
                echo '</pre>';
            }
        }
?>

可以發現,在高安全級別下,代碼不僅僅對文件名做了限制(最後一個.的後面應該爲jpg或jpeg), 並且用函數move_uploaded_file()對上傳文件的合法性做了判斷。
因此,爲了繞過這一設定,我們可以構建一個圖片木馬。
首先,講文件的命名改爲shell.jpg,再使用二進制編輯文件進行編輯,插入jpg文件頭特徵碼:ff d8 ff
在這裏插入圖片描述
此時上傳文件,發現文件上傳成功。
在這裏插入圖片描述
雖然成功將惡意代碼上傳,但是是否可以達到目的,還需要從以下的角度考慮:

3.web容器解析漏洞

3.1 IIS解析漏洞

在IIS 6.0版本中,存在兩種解析漏洞
1.當建立*.asa或 .asp 文件夾下,目錄下的任意文件文件都會被當作asp文件進行解析。也就是說,如果我們可以講shell.jpg上傳到asp文件夾下,就可以被解析執行,那麼我們也就可以通過蟻劍進行連接了。
2.當文件名爲*.asp;xxx.jpg時,IIS6.0 同樣會以asp腳本來執行,也就是說,如果我們發現服務器的web容器爲IIS6.0時,重命名腳本爲xxx.asp;xxx.jpg時,上傳成功後,惡意腳本就會被解析,拿到控制權了。

3.2 Apache解析漏洞

在Apache 1.X 何 Apache 2.x 中同樣存在解析漏洞。但是與IIS 6.0的解析漏洞不同,Apache在解析文件時,會按照從後往前進行識別。比如我們在windows環境下,看到一個文件的後綴爲xxx.txt,那麼就認爲他是一個文本文件,但是在Apache中,Apache如果發現最後的後綴不認識,那麼就會從後往前解析。例如文件shell.php.xxx Apache不認識後綴xxx,那麼就會當作php文件進行解析。具體的Apache認識哪些後綴,linux環境下可以在/etc/mime.types查看
在這裏插入圖片描述

4.文件上傳漏洞的其他思路

我們前面提到,部分服務器存在命令執行漏洞。如果我們可以通過文件上傳漏洞,對文件進行上傳,又存在命令執行漏洞,那麼只要我們知道了文件上傳的路徑,就可以先繞過判斷進行上傳,並且利用命令執行漏洞,修改文件後綴爲.php,那麼就可以解析並且連接了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章