• 代码执行漏洞


    代码执行漏洞原理

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

    简述代码执行漏洞:

    PHP代码执行漏洞可以将代码注入到应用中,最终到webserver去执行。该漏洞主要存在于eval()、assert()、preg_replace()、call_user_func()、array_map()以及动态函数中。

     

    常见的代码执行漏洞危险函数:

    在php中:eval,assert,preg_replace('/*/e',$ret="\1";',$data);(PHP版本<5.5.0)

    在asp中:eval,exevute.executeglobal

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

    漏洞分类:

    1.代码层过滤不严:
    商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函来调用:
    system("/bin/program --arg$arg");
    2.系统的漏洞造成命令注入:
    bash破壳漏洞(CVE-2014-6271)
    3.调用的第三方组件存在代码执行漏洞:
    如WordPress中用来处理图片的ImageMagick组件
    JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
    ThinkPHP命令执行

     

    代码执行漏洞危害

    • 执行任意代码
    • 向网站写WebShell
    • 控制整个网站甚至服务器

    简单的代码执行实例:

    简单的代码执行

    image

    代码如下:

      1 <?php
      2    $data=$_GET['data'];
      3    eval("$ret=strtolower("$data");");
      4    echo $ret;
      5 ?>

    image

    构造利用

    image

     

    其他可利用方式

    {${@eval($_POST[1])}} 一句话

    {${exit(print(getcwd()))}} 获取当前工作路径

    {${exit(var_dump(file_get_contents($_POST[f])))}}

    读文件 f=/etc/passwd

    {${exit(var_dump(file_put_contents($_POST[f], $_POST[d])))}}

    写webshell f=1.php&d=1111111

    代码执行漏洞防御:

    1. 尽量少用执行命令的函数或者直接禁用
    2. 参数值尽量使用引号包括
    3. 在使用动态函数之前,确保使用的函数是指定的函数之一
    4. 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义
    5. 能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用
    6. 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤
    7. 参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义
      而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置。
    8. 对于eval( )函数一定要保证用户不能轻易接触eval的参数或者用正则严格判断输入的数据格式。
    9. 对于preg_replace放弃使用e修饰符。如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹 。
    10. 相关阅读:
      nginx的location root 指令
      nginx系统真正有效的图片防盗链完整设置详解
      HttpURLConnection请求接口
      Tomcat:IOException while loading persisted sessions: java.io.EOFException解决手记
      jprofiler安装图解及破解码
      养成好的JAVA编码习惯
      JS函数(自调函数)与闭包【高级函数】
      Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)
      Intent显示启动与隐式启动
      JSP中四种传递参数的方法
    11. 原文地址:https://www.cnblogs.com/LeeeBoom/p/12439342.html
    Copyright © 2020-2023  润新知