IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(八) -> 正文阅读

[PHP知识库]山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(八)


前言:

自项目开始到现在,除了 docker 相关内容的学习与实践测试外,完成了 SQL 注入漏洞的数字型注入和字符型注入以及带有括号的字符型注入的漏洞环境的代码编写与环境搭建。接下来的任务是完成 RCE 漏洞环境的构思与代码编写、测试运行。

1、RCE 漏洞简介

1.1、简介

RCE (Remote Code/Command Execute) :远程代码/命令执行

漏洞产生原因:在 Web 应用中开发者为了灵活性,简洁性等会让应用调用代码或者系统命令执行函数去处理,同时没有考虑用户的输入是否可以被控制,造成代码/系统命令执行漏洞。

比如我们常见的路由器、防火墙入侵检测等设备的web管理界面上,一般会给用户提供一个 ping 操作的 web 界面,用户从 web 界面输入目标,提交后,后台会对该 iP 地址进行一次 ping 测试,并返回测试结果,而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交意想不到的命令,从而让后台进行执行,从而控制整个后台服务器。

其实这个漏洞也是像大多数漏洞一样,即没有检查或者没有严格的过滤用户所输入内容,而是直接带入执行,导致了远程代码执行漏洞的产生。

相较于使用 php 而言,使用 java 搭建的网站出现远程代码执行漏洞的几率较小些,因为 php 有很多内置的函数,可以执行相关命令,但是仍然会出现这种漏洞。

这个漏洞一经发现,几乎就是高危漏洞。


1.2、危害

高危:直接获取服务器权限,获取敏感数据,文件,写入恶意文件 getshell

继承Web服务器程序的权限,去执行系统命令

继承Web服务器程序的权限,读写文件

反弹shell

控制整个网站

甚至控制整个服务器

微信 PC 版曾经曝出过 RCE 漏洞,起源主要是因为 chrome 浏览器在无沙箱模式下,会触发 RCE 执行漏洞,但是 chrome 默认开启了沙箱模式。

微信 pc 版(3.2.1.141)之前的版本,在利用微信默认的内置浏览器打开链接时会调用 chrome 内核,默认使用 --no-sandbox 可导致命令执行。

影响版本:微信 Windows 版 < 3.1.2.141


1.3、利用

1.3.1、漏洞挖掘

黑盒测试:测试网站特殊功能点,比如ping等

(推荐)白盒测试:通过代码审计,审计应用中存在的危险函数是否进行了严格过滤

php 中命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()

php 中代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()

使用管道符对该漏洞进行利用,针对不同的服务器系统,有不同的管道符利用方法。


1.3.2、windows下管道符

“;”:执行完前面的语句再执行后面的语句。

“|”:显示后面语句的执行结果。

“||”:当前面的语句执行出错时,执行后面的语句。

“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。

“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。


1.3.3、linux下管道符

“;”:执行完前面的语句再执行后面的语句。

“|”:显示后面语句的执行结果。

“||”:当前面的语句执行出错时,执行后面的语句。

“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。

“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真


1.4、防范

  1. 防范这类漏洞,首先要从对用户输入,即前端传回的数据在进入危险函数前进行严格的检测和过滤。

  2. 尽量不要使用命令执行函数


2、相关配置

编写 application.properties

spring.thymeleaf.prefix = classpath:/templates/

pom.xml 导入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>sqli</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sqli</name>
    <description>sqli</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


3、编写“RCE 漏洞”后端代码

创建 springboot 框架的项目,相关设置与前面的 SQL 注入相同。

首先编写 controller 层,配置请求匹配跳转。

indexController.java

package com.example.sqli.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class indexController {
    @RequestMapping(value={"/","/index.html"})
    public String index(){
        return "index";
    }

    @RequestMapping(value={"RCE_ping"})
    public String RCE_ping_index(){
        return "RCE_ping";
    }
}

接下来编写 RCE 漏洞后端代码,构造 RCE 漏洞执行环境,我想到的是构造一个提供 ping 服务的环境场景,前端是一个输入框,用户可以输入 ip 地址,然后后端服务器将会调用函数执行 ping 命令,返回结果给前端。这样的一个服务场景,如果没有对用户输入的内容进行过滤检查的话,可以构成一个 RCE 漏洞。

根据以上思路,编写 RCE.java

package com.example.sqli.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;

@Controller
@RequestMapping("/RCE/")//接口注解
public class RCE {
    //RCE-ping漏洞(测试payload:127.0.0.1 | whoami 或者 127.0.0.1 && whoami)
    @RequestMapping("ping")
    public String RCE_ping(@RequestParam(value = "ip",required = false) String ip, Model model) throws SQLException, IOException {
//        Runtime rt = Runtime.getRuntime();
//        Process p = rt.exec("cmd.exe /c ping "+ip);
//        System.out.println(p.toString());
//        return "RCE_ping";
          Runtime runtime = Runtime.getRuntime();
          try {
                String cmd = "cmd /c ping "+ip;

                Process process = Runtime.getRuntime().exec(cmd);
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
                process.waitFor();
                process.exitValue() ;
                //BufferedReader br = new BufferedReader(new InputStreamReader(runtime.exec("ping "+ip).getInputStream(),"GBK"));
                String line=null;
                System.out.println(cmd);
                StringBuffer b=new StringBuffer();
                while ((line=br.readLine())!=null) {
                   b.append(line+"\n");
                }
                System.out.println("ping输出结果:"+b.toString());
          } catch (Exception e) {
                e.printStackTrace();
          }
          return "RCE_ping";
    }

}


4、编写“RCE 漏洞”前端代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SQL注入</title>
</head>
<body>


<input type="button" value="RCE-ping"
       onclick="javascrtpt:window.location.href='http://localhost:8080/RCE_ping'" />
</body>
</html>

RCE 漏洞,前端简易环境,ping 服务

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>RCE-ping</title>
</head>
<body>

<form action="http://localhost:8080/RCE/ping" method="get">
    请输入ip地址: <input type="text" name="ip" />
    <input type="submit" value="ping" />
</form>

</body>
</html>

5、运行测试

首先,我们靶场的服务器是 Linux 系统,应该使用 Linux 的管道符进行测试,这里我在编写完成后,是直接在 Windows 环境下进行测试的,如果部署到 Linux 服务器上,payload 可能会有变化。

启动项目

访问 RCE 漏洞模拟环境,ping 服务

测试输入 127.0.0.1

![]](https://img-blog.csdnimg.cn/33e5d898071a461db63f2f7773ab4ee9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ZmM5YWuXw==,size_20,color_FFFFFF,t_70,g_se,x_16)

payload:127.0.0.1 && whoami

回显:

![[]](https://img-blog.csdnimg.cn/9930b090b4284cdaae3aa6f89f39d68c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ZmM5YWuXw==,size_20,color_FFFFFF,t_70,g_se,x_16)

可以看到,执行了命令whoami

RCE 漏洞环境搭建完成



参考文章

https://www.cnblogs.com/mrob0t/p/14750795.html

https://www.icode9.com/content-4-812303.html

https://www.jianshu.com/p/1010fb8d9597

https://www.cnblogs.com/zzb228/articles/15440327.html

https://jingyan.baidu.com/article/c275f6ba6b7985e33d756789.html

https://blog.csdn.net/nigo134/article/details/118462599

https://www.zhihu.com/question/474360592/answer/2017267949


  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:02:46  更:2022-03-30 18:04:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 7:05:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码