Go SSTI
前言
555学习。
环境搭建
直接用docker搭建环境,首先下载一个golang镜像:
1 |
|
开启镜像后,在/go/src目录下新建ssti模块,并初始化包管理工具,类似nodejs的npm:
1 |
|
直接使用参考文章的测试代码,然后编译:
1 |
|
在/go/bin目录下找到编译好的二进制程序并运行。
SSTI
成因简单来说就是text/template模板将外来输入作为了模板代码解析,类似SQL注入、表达式注入等漏洞,而根据文档,html/template模板则会过滤用户输入,但是似乎只做了XSS过滤,所以不会影响SSTI利用。
根据参考文章,主要利用方向有三个。
信息泄露
模板引擎允许用户将一个存储数据的对象绑定到模板中,并在渲染时读取其中的数据,因此SSTI可以读取该对象中的数据,如:
或者打印整个对象:
1 |
|
函数调用
可以调用环境中定义的函数,如:
XSS
可以通过调用输出函数打印JavaScript的方式进行XSS,如:
但是无法绕过模板过滤。
参考
Go SSTI
http://yoursite.com/2023/06/29/Go-SSTI/