任意代碼執行漏洞


背景介紹

當應用在調用一些能將字符串轉化成代碼的函數(如php中的eval)時,沒有考慮到用戶是否能控制這個字符串,將造成代碼注入漏洞。狹義的代碼注入通常指將可執行代碼注入到當前頁面中,如php的eval函數,可以將字符串代表的代碼作為php代碼執行,當前用戶能夠控制這段字符串時,將產生代碼注入漏洞(也稱命令執行)。廣義上的代碼注入,可以覆蓋大半安全漏洞的分類

 

漏洞成因

幾種常用語言,都有將字符串轉化成代碼去執行的相關函數

php       :   eval,assert

python  :   exec

java      :   java中沒有類似php中的eval函數這種直接可以將字符串轉化為代碼執行的函數,但是有反射機制,並期望有各種基於反射機制的表達式引擎,如:OGNL、SpEL等

 

為什么使用執行代碼函數

應用有時候會考慮靈活性、簡潔性,在代碼中調用eval之類的函數去處理

 

phpcms中的string2array函數

這個函數可以將phpcms的數據庫settings的字符串形式的數組內容轉換為真實的數組

 

漏洞危害

執行代碼  ;  上網站寫shell   ;   甚至控制服務器

 

漏洞挖掘

 

 

具體操作

 

漏洞防御

使用json保存數組,當讀取時就不需要使用eval了

對於必須使用eval的地方,一定嚴格處理用戶數據

字符串使用單引號包括可控代碼,插入前使用addslashes轉義

放棄使用preg_replace的e修飾符,使用preg_replace_callback()替換

若必須使用preg_replace的e修飾符,則必用單引號包裹正則匹配出的對象

 


免責聲明!

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



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