前言
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}}
但是无法绕过模板过滤。
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!