您的位置:首页 > 编程语言

任意代码执行漏洞

2016-08-04 19:28 525 查看

--背景介绍--

当应用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞。

--相关函数--

PHP          eval()、assert()
python      exec()
Java         没有类似于前面两者的函数,但是有反射机制,并且有基于反射机制的表达式引擎,如:0GNL、SpEL、                        MVEL等

--PHP中能造成代码注入的主要函数--
①eval()
<span style="font-size:14px;"><?php
$data = $_GET['data'];
eval($ret = $data);
echo $ret
?></span>

使的$data=phpinfo(),则可以显示phpinfo.php文件的内容

②assert()
和前者一样,都是将字符串当成代码来执行。

③preg_replace()+/e模式
<?php
$data = $_GET['data'];
preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";',$data);
?>
echo $reat

使的?data=<data>${phpinfo()}</data>

实例:



④unserialize() (反序列化函数)

--修复方案--
对于eval()函数,一定要保证用户不能轻易接触eval的参数,如果接触一定要使用单引号包裹可控代码,并在插入前进行addslashes
<?php
$data = addslashes($data);
eval("$data = deal('$data')");
?>


对于preg_replace()函数,要放弃使用/e修饰符,也可以使用preg_replace_callback()函数代替。如果一定要使用该函数,请保证第二个参数中,对于正则匹配出的对象用单引号包裹。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  漏洞 函数 sql注入