Hack the Box——Templated (ssti) wp

0x00前言

刚做完第一题的我,立马打开了第二题

提示:Can you exploit this simple mistake?(您可以利用这个简单的错误吗?)

0x01访问网站

http://178.128.40.217:31440/

从界面提示Proudly powered by Flask/Jinja2,首先盲猜是ssti漏洞

根据以往的经验首先找注入点

0x02 注入点

url尝试payload

?={
   
   {3*3}}

扫描二维码关注公众号,回复: 12226023 查看本文章

从这里明确是ssti漏洞,也找的注入点

0x03 漏洞利用

这里就可以通过python的魔术方法,首先通过__class__获取对象的类,然后__mro__获取对象继承的类,因为所有的对象都是继承自object,这样就可以拿到object类了,再通过__subclasses__获取到object的子类,子类中的<class 'warnings.catch_warnings'>的命名空间里有__builtins__,最后使用__import__方法导入os库就可以任意命令执行了。最后的payload如下。

{
   
   { "".__class__.__mro__[1].__subclasses__()[186].__init__.__globals__["__builtins__"]["__import__"]("os").popen("cat flag.txt").read() }}

flag:HTB{t3mpl4t3s_4r3_m0r3_p0w3rfu1_th4n_u_th1nk!}

0x04 总结

ssti产生原理

服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题;单纯的字符串拼接并不能带来注入问题,关键要看你拼接的是什么,如果是控制语句,就会造成数据域与代码域的混淆,这样就会出洞

ssti攻击思路

我们知道 SSTI 能够造成很多种危害,包括 敏感信息泄露、RCE、GetShell 等,关键就在于如何才能利用这个注入点执行我们想执行的代码,那么我们寻找利用点的范围实际上就是在我们上面的四个地方,一个是模板本身支持的语法、内置变量、属性、函数,还有就是纯粹框架的全局变量、属性、函数,然后我们考虑语言本身的特性,比如 面向对象的内省机制,最最最后我们无能为力的时候才考虑怎么寻找应用定义的一些东西,因为这个是几乎没有文档的,是开发者的自行设计,一般需要拿到应用的源码才能考虑

 

猜你喜欢

转载自blog.csdn.net/yutao598/article/details/112985466