天天看點

DVWA——指令執行漏洞學習

前言:指令執行和代碼執行也是web安全中常見的一種漏洞,這次就先來學習一下指令執行漏洞。

Command Execution

一、簡介

由于開發人員在編寫源代碼時,沒有對源代碼中可執行的特殊函數入口做過濾,導緻用戶端可以送出一些cmd指令,并交由伺服器程式執行。導緻攻擊者可以通過浏覽器或者其他用戶端軟體送出一些cmd指令(或者bash指令)至伺服器程式,伺服器程式通過system、eval、exec等函數直接或者間接地調用cmd.exe執行攻擊者送出的指令。

二、常用的連接配接符

A;B    先執行A,再執行B
A&B    簡單拼接,A B之間無制約關系
A|B    顯示B的執行結果
A&&B   A執行成功,然後才會執行B
A||B   A執行失敗,然後才會執行B
      

三、常用的函數

exec() — 執行一個外部程式
#exec 不會主動傳回執行結果,且隻是傳回結果的最後一行;
passthru() — 執行外部程式并且顯示原始輸出
#passthru()用來執行外部指令,但直接将結果輸出到浏覽器(未經任何處理的 原始輸出),沒有傳回值;
system() — 執行外部程式,并且顯示輸出
#system()成功則傳回指令輸出的最後一行,失敗則傳回 FALSE;
shell_exec() — 通過 shell 環境執行指令,并且将完整的輸出以字元串的方式傳回。
#當程序執行過程中發生錯誤,或者程序不産生輸出的情況下,都會傳回 NULL
eval():将輸入的字元串參數當做PHP程式代碼來執行
      

具體可以參考​​php中文網​​

四、windows net指令

Net ViewI
作用:顯示域清單、計算機清單或指定計算機的共享資源清單。
Net User
作用:添加或更改使用者帳号或顯示使用者帳号資訊。
Net Use
作用:連接配接計算機或斷開計算機與共享資源的連接配接,或顯示計算機的連接配接資訊。
Net Time
作用:使計算機的時鐘與另一台計算機或域的時間同步。
Net Config
作用:顯示目前運作的可配置服務,或顯示并更改某項服務的設定。
      

具體可以參考大師傅的部落格​​CMD-NET指令詳解​​這個漏洞是真的恐怖,可以任意修改你的計算機裡的内容。

在了解了基礎的知識後,下面就通過DVWA來練習一下Command Execution.

DVWA——Command Injection

在此之前先來解決亂碼的問題

在​

​DVWA\dvwa\includes​

​目錄下找到​

​dvwaPage.inc.php​

​檔案中所有的”​

​charset=utf-8​

​”,修改”​

​charset=gb2312​

​”,即可解決亂碼問題。

DVWA——指令執行漏洞學習
DVWA——指令執行漏洞學習

low

觀察源碼

DVWA——指令執行漏洞學習
stristr() 函數搜尋字元串在另一字元串中的第一次出現,不區分大小寫
php_uname() 傳回了運作 PHP 的作業系統的描述。
參數:
'a':此為預設。
's':作業系統名稱。
'n':主機名。
'r':版本名稱。
'v':版本資訊。
'm':機器類型。
      

通過源碼可以看出,源碼隻是針對不同的作業系統執行不同的​

​ping指令​

​而已,沒有對​

​ip參數​

​并未做任何的過濾,是以存在指令注入漏洞。

輸入

127.0.0.1&&echo "Hello"
      
DVWA——指令執行漏洞學習

回顯結果執行了我輸入的​

​echo "Hello"​

​指令

接下來輸入

127.0.0.1&&net user
      
DVWA——指令執行漏洞學習

指令執行成功,但這個漏洞是真的恐怖,如果攻擊者利用這個漏洞修改電腦使用者、更改系統配置。。。,可見危害之大。

medium

DVWA——指令執行漏洞學習

發現這段代碼

$target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 
#array_keys() 函數傳回包含數組中所有鍵名的一個新數組。
      

過濾了​

​&&​

​、​

​;​

​,但是沒有過濾掉​

​&​

​|​

​,是以依舊有漏洞存在

127.0.0.1 | net user
      
DVWA——指令執行漏洞學習

也可以輸入

127.0.0.1& net user
      

一樣會執行成功

除此之外,也可以采用拼接的方法進行繞過

127.0.0.1&;&net user
      
DVWA——指令執行漏洞學習

High

DVWA——指令執行漏洞學習

這次過濾的更狠,幾乎過濾了所有的常用連接配接符,拼接的方法也是不起作用的,但是觀察代碼發現

DVWA——指令執行漏洞學習

​|+空格​

​多出一個空格,是以不會過濾​

​|​

​那就利用這個漏洞進行指令執行

127.0.0.1 |net user
      
DVWA——指令執行漏洞學習

impossible

DVWA——指令執行漏洞學習
stripslashes(string)
#stripslashes函數會删除字元串string中的反斜杠,傳回已剝離反斜杠的字元串。
explode(separator,string,limit)
#explode()函數把字元串打散為數組,傳回字元串的數組。參數separator規定在哪裡分割字元串,參數string是要分割的字元串,可選參數limit規定所傳回的數組元素的數目
is_numeric(string)
#is_numeric()函數檢測string是否為數字或數字字元串,如果是傳回TRUE,否則傳回FALSE。
      

Impossible級别的代碼加入了​

​Anti-CSRF token​

​,同時對​

​參數ip​

​進行了嚴格的限制,隻有“​

​數字.數字.數字.數字​

​”的輸入才會被接收執行,是以不存在指令注入漏洞。

總結:通過這次學校了解了指令執行漏洞的一些知識,确實很有意思,接下來學習代碼執行漏洞。

參考部落格:

​​Command Injection ​​

​​Web安全 - 指令執行漏洞​​