任意命令執行漏洞


任意命令執行漏洞 *背景介紹*

當應用需要調用一些外部程序去處理內容的情況下,就會用到一些執行系統命令的函數。如php中的system、exec、shell_exec等,當用戶可以控制命令執行函數中的參數時,將可以注入惡意系統命令到正常的命令中,造成命令執行攻擊。

 

任意命令執行漏洞 *成因*

腳本語言有點事簡潔、方便,但也伴隨着一些問題,如速度慢、無法接觸系統底層,如果我們開發的應用(特別是企業級的一些應用)需要一些除去web的特殊功能時,就需要調用一些外部程序。應用在調用這些函數執行系統命令的時候,如果將用戶輸入的作為系統命令的參數拼接到命令行中,又沒有過濾用戶的輸入情況下,就會造成命令執行漏洞。

 

漏洞的分類

*代碼層過濾不嚴格*

一些商業應用需要執行命令,商業應用的一些核心代碼可能封裝在二進制文件中,在web應用中通過system函數來調用:

system(“/bin/program --arg $arg”);

*系統漏洞造成命令注入*

bash破殼漏洞

如果我們能夠控制執行的bash的環境變量,就可以通過破殼漏洞來執行任意代碼

*調用第三方組件存在代碼執行漏洞*

很典型的就是WordPress中,可以選擇使用ImageMagick這個常用的圖片處理組件,對用戶上傳的圖片進行處理,造成命令執行,另外JAVA中的命令執行漏洞(struts2/Elasticsearch等)很常見

典型的漏洞代碼

<?php
system($_GET['cmd']);
?>
http://127.0.0.1:8080/?cmd=id

修復方案

能使用腳本解決的工作,不要調用其他程序處理。盡量少用執行命令的函數,並在disable_functions中禁用

對於可控點是程序參數的情況下,使用escapeshellcmd函數進行過濾

對於可控點是程序參數值的情況下,使用escapeshellarg函數進行過濾

參數的值盡量使用引號包裹,並在拼接前調用addslashes進行轉義

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM