任意代码命令执行漏洞

                                               代码执行漏洞

什么是代码执行

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

 

      在php中:evalassert, preg_replace(‘/*/e', '$ret = "\\1";',$data);

      asp中:eval, exevute,executeglobal

      jsp中:jsp中没有php中的eval函数,但是可以使用反射机制,使用基于反射机制的表达式引擎,如0GNLSpELMVEL

 

为什么会存在代码执行漏洞:

        应用有时候会考虑代码的简洁性,灵活性,会在代码中调用eval之类的函数。

 

phpcms中使用string2array()

$data字符串数组

function string2array($data) {

  if($data == ‘’)

  return array();

  @eval("\$array = $data;");

  return $array;

为什么要这样用:

          应用的所有配置都在数据库中存储着,通过这个函数,直接读取配置,不需要使用正则之类的来一点一点读取配置。

 

发现代码执行

发现漏洞:

由于thinkphp存在代码执行漏洞,我们可以使用谷歌语法来搜索这类网站。

  inurl:think.php

  学习代码审计,自己找一些代码执行漏洞

 

 

利用代码执行

简单的代码执行:

<?php

  $data = $_GET[‘data’];

  eval("\$ret = strtolower(\"$data\");");

  echo $ret;

?>

代码执行的防御方法

1、使用json保存数组,当读取时就不需要使用eval了

2、对于必须使用eval的地方,一定严格处理用户数据(白名单、黑名单)

3、字符串使用单引号包括可控代码,插入前使用addslashes转义(addslashes、魔数引号、htmlspecialchars、 htmlentities、mysql_real_escape_string)

4、放弃使用preg_replace的e修饰符,使用preg_replace_callback()替换(preg_replace_callback())

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

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值