任意代码执行漏洞

漏洞原理
当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能够控制这个字符串,将造成代码注入漏洞
在php中:
eval,assert,将字符串当成代码执行
preg_replace("/wslp/e","$xr",“wslp”);用第二个参数的执行结果替换第三个参数里的第一个参数指定的值
漏洞形成
如果被执行的字符串是通过前端参数传过来的攻击代码,或者数据库里被植入攻击代码数据,就会形成漏洞
漏洞勘测
由于thinkphp存在代码执行漏洞,我们可以使用谷歌语法来搜索这类网站(inurl:think.php)
学习代码审计,自己找一些代码执行漏洞
漏洞复现
前端传值:
http://localhost/dmzx/loudong.php?data=phpinfo()
后台接收:

<?php
$data = $_GET['data'];
eval("\$xr=$data;");
echo $xr;

前端显示:
在这里插入图片描述
漏洞防御
1、使用json保存数组,当读取时就不需要使用eval了
2、对于必须使用eval的地方,一定严格处理用户数据(白名单、黑名单)
3、字符串使用单引号包括可控代码,插入前使用addslashes转义(addslashes、魔数引号、 htmlspecialchars、 htmlentities、mysql_real_escape_string)
4、放弃使用preg_replace的e修饰符,使用preg_replace_callback()替换
5、若必须使用preg_replace的e修饰符,则必用单引号包裹正则匹配出的对象(第二个参数用单引号包裹)

发布了47 篇原创文章 · 获赞 36 · 访问量 4090

猜你喜欢

转载自blog.csdn.net/wsnbbz/article/details/104652896