命令执行漏洞-rce

news2024/11/14 22:20:31

《网安面试指南》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

1.1 命令执行漏洞

1.1.1 反序列化漏洞

1.1.1.1 漏洞原理

反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来执行敏感操作,这就是反序列化漏洞。

1.1.1.2 漏洞危害

攻击者可伪造恶意的字节序列并提交到应用系统时,应用系统将对字节序列进行反序列处理时将执行攻击者所提交的恶意字节序列,从而导致任意代码或命令执行,最终可完成获得应用系统控制权限或操作系统权限。。

1.1.1.3 检测条件

网站正常运行;网址服务器环境中使用WebLogic、WebSphere、JBoss、Jenkins、OpenNMS、shiro 这些使用反序列化的中间件。

1.1.1.4 检测方法

1、 通过指纹识别工具(或者是已知的反序列化POC)检测目标网站是否存在这些WebLogic、WebSphere、JBoss、Jenkins、OpenNMS、shiro这些中间件的反序列化漏洞,若存在即可直接使用相对应的反序列化漏洞利用工具。

使用vulmap对目标进行指纹扫描和漏洞探测:

Vulmap下载地址:GitHub - zhzyker/vulmap: Vulmap 是一款 web 漏洞扫描和验证工具, 可对 webapps 进行漏洞扫描, 并且具备漏洞验证功能

探测到目标使用了weblogic中间件。

以下是常见的识别方法:

Shiro:

rememberMe

可以在 cookie 追加一个 rememberMe=xx 的字段,这个字段是rememberMeManager默认的,然后看响应头部可以看看是否有 Set-Cookie: rememberMe=deleteMe; 的字段则可判断使shiro框架。

Weblogic:

路径进行模糊检测:

/console/login/LoginForm.jsp

/wls-wsat/CoordinatorPortType

/_async/AsyncResponseService

/ws_utc/config.do

脚本工具:GitHub - rabbitmask/WhoIsWeblogic: 提供Weblogic批量模糊指纹识别

典型的404页面:

2、 以下以weblogic为例:weblogic默认端口为7001,这里靶场为docker端口映射,http://vulfocus.xxx.xx:49003/ (weblogic测试靶场)

通过404典型页面初步判定为weblogic,接下来使用weblogic漏洞利用工具进行检测,检测和利用工具下载链接:Release 1.9 · yhy0/ExpDemo-JavaFX · GitHub

通过检测存在目标存在Weblogic反序列化漏洞(CVE-2019-2725)

接下来进行漏洞验证即可,如下图执行ifconfig不影响系统正常运行的命令即可验证。

1.1.1.6 修复建议

l 黑名单校验修复

在反序列化时设置类的黑名单来防御反序列化漏洞利用及攻击,当工程中导入jar包提供反序列化操作的公共接口,就需要使用黑名单的方式来禁止一些已知危险的类被反序列化,部分的黑名单类如下:

org.apache.commons.collections.functors.InvokerTransformer

org.apache.commons.collections.functors.InstantiateTransformer

org.apache.commons.collections4.functors.InvokerTransformer

org.apache.commons.collections4.functors.InstantiateTransformer

org.codehaus.groovy.runtime.ConvertedClosure

org.codehaus.groovy.runtime.MethodClosure

org.springframework.beans.factory.ObjectFactory

com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl

org.apache.commons.fileupload

org.apache.commons.beanutils

l 安全编码

更新commons-collections、commons-io等第三方库版本;

业务需要使用反序列化时,尽量避免反序列化数据可被用户控制,如无法避免建议尽量使用白名单校验的修复方式;

l 过滤用户输入

接收用户传参时过滤不合理,不符合程序逻辑的输入。

1.1.2 代码注入漏洞

1.1.2.1 漏洞原理

当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞。 狭义的代码注入通常指将可执行代码注入到当前页面中,如php的eval函数,可以将字符串代表的代码作为php代码执行,当用户能够控制这段字符串时,将产生代码注入漏洞。

1.1.2.2 漏洞危害

通过可注入脚本语言的不同产生的危害也不同,例如如果一个php程序存在代码注入漏洞,可直接获得目标主机权限;如果javascript存在代码注入漏洞,则只能造成一些前端的漏洞,例如xss。

在常见的web应用中,大部分代码注入漏洞出现在php程序中,Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。

1.1.2.3 检测条件

网站正常运行,且使用后端编程语言,例如java/php/python等

1.1.2.4 检测方法

这里以php和java分别介绍检测方法

Php:

在没有目标代码的情况下,可以在可能使用了eval或其他造成代码执行的参数点输入phpinfo()来进行测试,例如某些cms后台有查看服务器环境信息的接口,新建或者编辑模板的功能,都可以进行测试:

www.xxx.com/test.php?searchtype=5&tid=&area=phpinfo()

代码执行成功后,页面返回phpinfo信息

如果发现目标为thinkphp框架或者开源cms,可以使用github已有脚本和poc进行快速扫描:

phpcms前台任意代码执行(有php版本限制)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-0104157.html

Thinkphp快速扫描

https://github.com/Lucifer1993/TPscan

Java:

可观察目标网站是否使用了struts2框架,一般struts2框架的接口通常以action和do结尾,例如:

www.xxx.com/index.action

发现目标使用了struts2框架后,可以使用struts2漏洞利用工具进行测试:

https://github.com/HatBoy/Struts2-Scan

如果目标网站使用了spring框架,则可以测试其是否存在spel表达式注入漏洞,参照如下poc:

https://github.com/wearearima/poc-cve-2018-1273

1.1.2.6 修复建议

总体修复方式:尽量不使用eval等危险函数。如果确定要使用,则参考如下做法 :

l 输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则,如果可以尽量使用白名单。

l 输入处理:使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。

l 在php中使用disable_functions禁用相关危险函数 。

1.1.3 命令注入漏洞

1.1.3.1 漏洞原理

在Web 程序中,因为业务功能需求要通过Web前端传递参数到后台服务器上执行。但由于开发人员没有对输入进行严格的过滤,导致攻击者可以构造一些额外的“带有非法目的”命令,去欺骗后台服务器执行这些非法命令。命令注入通常因为指Web应用在服务器上拼接系统命令而造成的漏洞。

1.1.3.2 漏洞危害

在存在命令执行漏洞的情况下,如果Web 应用使用的是root权限,则该漏洞可以导致攻击者在服务器上执行任意命令,攻击者可以继承Web服务器程序的权限,去执行系统命令或读写文件、反弹shell、控制整个网站,甚至控制整个服务器。

1.1.3.3 检测条件

1、web业务正常运行且系统调用了执行命令的函数,例如exec、eval等。

2、系统执行命令函数的参数可以通过外部输入或者可控。

3、可控参数可拼接注入参数,并未进行参数校验。

利用命令注入漏洞发起攻击行为示意图如下:

1.1.3.4 检测方法

1、 通过网站的功能:部分网站有特殊功能,比如ping、数据库备份等,黑盒测试时的要点在于找到可能调用第三方命令的业务场景,通常在图片处理、大文件压缩、文件格式转化、日志处理以及数据库导出等功能比较容易调用一些小脚本进行辅助处理。能够确定某个业务模块使用到了第三方工具,就可以进一步对命令注入语句进行分析,是否存在各种限制,最常见的用各种fuzz推测后端对输入进行了哪些限制,对其进行相应的绕过,构造出可以利用的payload。

2、 常见注入连接符:

● 分号分割

● || && & 分割

● | 管道符

● \r\n %d0%a0 换行

● 反引号解析

● $() 替换

示例:ping功能

输入IP后点击ping按钮可以看到系统执行ping命令的结果:

使用常用的管道符命令(&、&&、|、||)进行poc拼接输入如下参数:

127.0.0.1&whoami 可以看到whoami 的执行结果:

由于get参数未做过滤所以可以使用连接符号讲命令与参数进行拼接,然后将拼接好的poc传入后台进行执行,从而达到命令注入。

切记测试命令注入漏洞一定要是用对系统无害的命令进行测试,测试显示结果即可。

1.1.3.6 修复建议

● 不使用时禁用相应函数

找到php.ini,查找到disable_functions,添加禁用的函数名

● 尽量不要执行外部的应用程序或命令

● 做输入的格式检查

● 在使用动态函数之前,确保使用的函数是指定的函数之一

● 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符调用addslashes进行转义

● 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤

escapeshellarg函数:会将用户引起参数或命令结束的字符进行转义

单引号"'"会被转义为"\’"

双引号“””会被转义为"\""

分号";"会被转义为"\;"

这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的

● 转义命令中的所有shell元字符:shell元字符包括 #&;,|*?~<>^()[]{}$\

● 使用safe_mode_exec_dir指定可执行的文件路径

将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。

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

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

相关文章

47.x86游戏实战-VEHHOOK封包函数

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具

Aiseesoft Mac Video Converter Ultimate是一款视频转换与编辑软件&#xff0c;以其强大的功能和简单易用的操作界面赢得了广泛好评。该软件不仅支持多种视频格式的转换&#xff0c;还集成了丰富的视频编辑功能&#xff0c;满足了用户多样化的视频处理需求。 核心功能概述 视频…

mysqlcheck

mysql bin中的其他工具包 对于mysql的其他工具, 有很多选项是公共的, 例如你在对数据库进行检查的时候, 需要指定host和user以及其password来连接上mysqlserver来进行相关操作, 这个时候其实用到的host等东西跟我们之前的mysql-client其实是类似的 也就是说他们是作为mysql众…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

C++不同数据类型连接成一个字符串

在C中数据连接的方式使用号进行连接。 1.都是字符型时直接使用连接几个字符串&#xff1b; 2.不是字符类型时&#xff0c;要用to_string函数转换后再连接。

做空股指期货一手多少钱?

股指期货的保证金比例是12%-15%不等&#xff0c;所以做空一手股指期货的保证金最少是要十几万元&#xff0c;部分平台两万。关于做空一手股指期货的具体金额&#xff0c;这并非固定不变&#xff0c;而是会根据市场的实时价格、合约的乘数以及交易所的规定等因素而有所变动。 股…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题&#xff1a; module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初&#xff0c;我的代码有错误,代码如下…

快速判断一个项目是Spring MVC框架还是Spring Boot框架

1. 查看项目的启动类 Spring Boot: 通常有一个主类&#xff0c;包含 SpringBootApplication 注解&#xff0c;并且有一个 main 方法来启动应用程序。 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Appli…

探索数据结构:图(三)之最短路径算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 最短路径算法 最短路径问题可分为单源最短路径和多源最短路径。其指…

如何使用ssm实现珠宝首饰交易平台开发

TOC ssm101珠宝首饰交易平台开发jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于珠宝首饰交易平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商品信息管…

【Material-UI】Radio Group中的 Label Placement 属性详解

文章目录 一、Radio Group 组件概述1. 组件介绍2. Label Placement 属性的作用 二、Label Placement 属性的基本用法三、Label Placement 属性详解1. 标签位置的选择2. 如何在实际项目中选择标签位置 四、Label Placement 属性的实际应用场景1. 表单布局中的应用2. 符合用户习惯…

多进程多线程及之间通信机制

目录 前言 一、多进程与多线程 1. 多进程 多进程的特点 多进程的应用场景 2. 多线程 多线程的特点 多线程的应用场景 3. 多进程与多线程的对比 二、进程与线程之间的通信机制 1. 进程间通信&#xff08;IPC, Inter-Process Communication&#xff09; 2. 线程间通信…

Golang | Leetcode Golang题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; type pair struct {x, y int }func canMeasureWater(jug1Capacity int, jug2Capacity int, targetCapacity int) bool {//剪枝if jug1Capacityjug2Capacity < targetCapacity {return false}var (dfs func(x, y int) bool // jug1有x水…

NC包含min函数的栈

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 定义栈的数据…

基于STM32开发的智能水箱液位控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化液位监测与控制水泵控制与状态显示Wi-Fi通信与远程监控应用场景 家庭用水系统的液位控制工业水箱的液位管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能水箱液位控制系…

线程池详解(建议收藏)

概念 线程池&#xff08;Thread Pool&#xff09;是一种基于池化技术的多线程处理形式&#xff0c;用于管理线程的创建和生命周期&#xff0c;以及提供一个用于并行执行任务的线程队列。线程池的主要目的是减少在创建和销毁线程时所花费的开销和资源&#xff0c;提高程序性能&…

C# messagePack对类(class)序列化简单示例

c# messagepack对类&#xff08;class&#xff09;序列化的简单示例 0 引言1 示例2 纠错3 结语 0 引言 MessagePack是一种高效的二进制序列化格式&#xff0c;它可以在C#中用于序列化和反序列化对象。与其他序列化格式相比&#xff0c;如JSON和XML&#xff0c;MessagePack的编…

西安电子高速PCB学习(五)

感抗&#xff08;Inductive Reactance&#xff09;和容抗&#xff08;Capacitive Reactance&#xff09;是电感和电容在交流电路中对电流产生阻碍的特性。这两个概念源于交流电路中&#xff0c;电感和电容对交流电流的相应反应。 感抗&#xff08;Inductive Reactance&#xf…

如何使用ssm实现电脑配件销售系统的设计与实现

TOC ssm128电脑配件销售系统的设计与实现jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于电脑配件销售系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商…

PyTorch升级之旅——主要组成模块

本文仅作为个人学习记录使用 文章目录 前言 一、深度学习的简单流程 二、基本配置 三、数据读入 四、模型构建 五、模型初始化 六、损失函数 七、训练和评估 八、可视化 九、PyTorch优化器 总结 前言 学习链接&#xff1a;第三章&#xff1a;PyTorch的主要组成模块…