前言

555学习。


环境搭建

直接用docker搭建环境,首先下载一个golang镜像:

docker pull golang

开启镜像后,在/go/src目录下新建ssti模块,并初始化包管理工具,类似nodejs的npm:

go mod init

直接使用参考文章的测试代码,然后编译:

go install ssti

在/go/bin目录下找到编译好的二进制程序并运行。

SSTI

成因简单来说就是text/template模板将外来输入作为了模板代码解析,类似SQL注入、表达式注入等漏洞,而根据文档,html/template模板则会过滤用户输入,但是似乎只做了XSS过滤,所以不会影响SSTI利用。

根据参考文章,主要利用方向有三个。

信息泄露

模板引擎允许用户将一个存储数据的对象绑定到模板中,并在渲染时读取其中的数据,因此SSTI可以读取该对象中的数据,如:

{{.Passwd}}

或者打印整个对象:

{{.}}

函数调用

可以调用环境中定义的函数,如:

{{.Secret "pwd"}}

XSS

可以通过调用输出函数打印JavaScript的方式进行XSS,如:

{{with $x := ""}}{{print $x}}{{end}}

但是无法绕过模板过滤。


参考

Go语言下的模板注入


Web Go

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

原型链污染注入HTML模板
Apache Flink RCE via GET jar/plan API Endpoint