命令執行漏洞原理及在windows和linux中的利用方法還有自動化漏洞工具的簡單使用

前言:此次學習命令執行漏洞,記錄一下。
命令執行漏洞原理
定義:Web應用程序接收用戶輸入,拼接到要執行的系統命令中執行
產生原因:
1.用戶輸入未過濾或淨化
過濾:用戶輸入某個關鍵字時,命令不能執行,則是被過濾掉了。
淨化:用戶輸入一些敏感內容時,這些內容會被消除掉,但是命令會繼續執行。
2.拼接到系統命令中執行。
和SQL注入漏洞原理類似(差別還是挺大的,只是這一點比較相似)。
PHP下命令執行函數
在PHP中具有執行系統命令功能的函數如下(部分):
1.system

2.exec

3.shell_exec

4.passthru

5.popen

6.proc_popen

某些情況下,要注意存在以上函數的php文件,有可能是webshell
漏洞演示:
栗子:

<?php
        echo "please input get args cmd!";
        echo "<pre>";   //格式化頁面
        if(isset($_GET["cmd"])){
                system($_GET["cmd"]);
        }
        echo "</pre>";  //是頁面更加直觀,起換行作用。去掉的話,顯示信息不會換行。下面做對比。
?>

windows使用phpstudy集成環境,在網站根目錄下建立一個cmd1.php(自定義)。複製上面的代碼,保存。訪問cmd1.php,可以看到下面的頁面。
j4y
輸入命令:?cmd=ipconfig
j4y
可以執行。
現在修改一下代碼,看看<pre>的作用是什麼
j4y
刷新查看。
j4y
可以看到比較亂。
查看源碼:
j4y
所以可以看出來<pre>的作用了。
在URL前面加個view-source:也可以的。
windows系統命令執行漏洞
命令執行示例代碼分析
使用以下PHP代碼,對指定目標執行ping命令

<?php
        echo "<pre>";   //格式化輸出
        $arg = $_GET['cmd'];    //GET方式執行命令
        if($arg){
            system("ping $arg");
        }
        echo "</pre>";
?>

命令執行漏洞利用思路
代碼中拼接用戶的輸入並代碼system函數執行,但是無法直接執行用戶的自定義命令。
思路:截斷輸入,重新拼接。兩條命令都輸入並執行。

windows系統下命令執行漏洞拼接符介紹
在windows系統下的cmd命令中,有以下一些截斷拼接符。

&             前面的語句爲假則直接執行後面的
&&            前面的語句爲假則直接出錯,後面的也不執行
|             直接執行後面的語句
||            前面執行出錯執行後面的語句

栗子:
打開cmd

ping www.baidu.com
ping 111 & ipconfig
ping 127.0.0.1 && ipconfig
ping 127.0.0.1 | ipconfig
ping 111 || ipconfig

j4y
還有幾個命令就不放圖了,可以嘗試一下。
Linux系統命令執行漏洞

<?php
        echo "<pre>";
        $arg = $_GET['cmd'];
        if($arg){
                system("ping -c 4 $arg");   //ping 4次
        }
        echo "</pre>";
?>

-c 4 就是ping4次,windows默認執行4次,而linux默認執行無數次。

kali linux
測試環境搭建
1.啓動apache服務,service apache2 start
j4y
2.拷貝代碼到 /var/www/html/目錄下的一個文件中。
j4y
使用vim命令進行編輯。
j4y
編輯完成輸入:wq!保存並退出。
輸入ifconfig查看IP地址。
linux系統命令執行漏洞拼接符介紹
在linux系統下的shell命令下,有以下一些截斷拼接符

;      (英文輸入)前面的執行完,執行後面的。
|                      是管道符,顯示後面的執行結果。
||                     當前面的執行出錯時執行後面的。 
&                    無論前面語句真假都會執行。
&&                 只有前面的語句爲真,纔會執行後邊的語句。

在kali中實驗,與windows系統中步驟無太大差別。
j4y
仍然可以。
自動化工具介紹
commix
Commix是一個使用python開發的漏洞測試工具,這個工具是爲了方便的檢測一個請求是否存在命令注入漏洞,並對其進行測試,在其作者發佈的最新版本中支持直接導入burp的歷史記錄進行檢測,大大提高了易用性。
項目地址: github項目傳送門
安裝不介紹。kali自帶有。也可以使用git命令克隆到windows系統,需要python環境。
j4y
中途出了點毛病,kali裏的好久沒更新了,回頭更新一下再用。windows系統上的commix使用方法與linux系統有點不同,可網上找博客進行學習。

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