命令执行漏洞-rce

2024-08-25 18:44
文章标签 命令 漏洞 执行 rce

本文主要是介绍命令执行漏洞-rce,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《网安面试指南》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指定的目录中才会允许执行,否则执行将失败。

这篇关于命令执行漏洞-rce的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106358

相关文章

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(