web滲透——命令行注入
今天小編給大家演示一下DVWA——Command Injection(命令行注入)。
首先,我們聽說最多的肯定是SQL注入,其實注入的方法還有很多,比如說:xml、soap、郵件頭、crlf、代碼執行。
為什麼會出現這種漏洞了?
因為這些系統並沒有設計很好的過濾過程,所以產生漏洞,導致數據洩露。
接下來是實驗教程:
首先我們這裡是LOW級別,我們查看頁面的源代碼:
<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exec( 'ping ' . $target ); } else { // *nix $cmd = shell_exec( 'ping -c 4 ' . $target ); } // Feedback for the end user echo "<pre>{$cmd}</pre>"; } ?>
這段代碼主要功能是通過PING命令,PING用戶輸入的IP地址。
我給大家解釋一段這個代碼:
第一行:通過isset函數判斷是否為POST提供的值
第二行:通過POST提供的值發送給target變量(但是這裡沒有任何過濾)
接下來是if語句
If判斷系統是否為Windows,如果是CMD賦值為ping target,如果不是CMD賦值為ping -c 4 target
最後使用shell_exec執行cmd。
我們用&&執行
192.168.220.133&&net user(先執行ping 192.168.220.133 後執行net user)
Net user:賬戶名 查看賬戶屬性
我們可以看到賬戶名為administrator,說明用&&可以執行命令
接下來我們把DVWA級別設為high(高)
在查看一下源代碼:
這時我們可以看到第三行已經進行了過濾
$substitutions = array( '&' => '', ';' => '', '| ' => '', '-' => '', '$' => '', '(' => '', ')' => '', '`' => '', '||' => '',
但是還是有方法繞過,他源碼裡面是'| ';後面多了一個空格,我們可以利用'|'繞過(這裡是沒空格的)
192.168.220.133|net user
有人會問為什麼只執行了net user命令沒有執行ping 192.168.220.133
下面說一下命令連接符:
command1 && command2 先執行command1後執行command2
command1 | command2 只執行command2
command1 & command2 先執行command2後執行command1
那麼這個漏洞有什麼危害了?
我做個演示:
在LOW模式下,我們執行192.168.220.133&&netstat -a(查看開啟了哪些端口)
可以看到,如果被一些不法的人知道一些重要的端口開啟會怎樣了,結果可想而知,還可以刪除你的文件,可謂是毀滅性的。
總結:
1.如何防止這種漏洞產生,方法很多,我這裡就說DVWA中的方法,他對IP地址進行了限制,必須是8位 數組.數組.數組.數組才會被接收。
2. 為什麼會想到用命令連接符,而不是用XSS,sql注入一個一個試了?
我們首先思考一下這一個網站實現了什麼功能,能給我們帶來什麼?這裡是一個ping地址的網站,那麼ping在哪裡執行了?DOS窗口裡面吧,DOS窗口能幹什麼,訪問、讀取、刪除等等功能都可以實現,所以我們要有這種舉一反三發現問題的意識。
點個贊,關注一下謝謝!