攻防世界——warmup

进入页面发现一个大的滑稽脸,查看源代码,发现提示source.php
在这里插入图片描述
进入该页面,进行代码审计,又发现一个hint.php页面,进入发现提示
在这里插入图片描述
表明 flag 在这个文件中,且这个文件名暗示要使用四层目录

继续审计代码
在这里插入图片描述
发现满足三个条件,会包含并运行指定文件file,此处的file可以由我们构造,为切入点:

  1. 检查file变量是否为空
  2. 检查file变量是否为字符串
  3. 通过自定义的checkFile函数来检查

由于我们要构造payload,前两点直接满足,直接查看checkFile函数代码:
在这里插入图片描述
发现包含四个if语句:

  1. 第一个 if 语句对变量进行检验,要求$page为字符串,否则返回 false
  2. 第二个 if 语句判断$page是否存在于$whitelist数组中,存在则返回 true
  3. 第三个 if 语句,截取传进参数中首次出现?之前的部分,判断该部分是否存在于$whitelist数组中,,存在则返回 true
  4. 第四个 if 语句,先对构造的 payload 进行 url 解码,再截取传进参数中首次出现?之前的部分,并判断该部分是否存在于$whitelist中,存在则返回 true

以上四个满足一个即可返回 true,若均未满足,则返回 false

我们利用第三个 if 语句构造参数:
?file=source.php?/../../../../ffffllllaaaagggg
第一个?表示传参,第二个?用来满足截取

  1. 为什么include source.php(或hint.php)?/../../../../ffffllllaaaagggg能执行成功
    在这里插入图片描述
    因为我们的参数是有/../../../../这样的路径,所以符合最后一段话如果定义了路径,就会忽略/前的字符串而去找/../../../../ffffllllaaaagggg这个文件
  2. 网上大多数 writeup 用到的 url 编码绕过发现并没有用到,这一方法的思路是将?进行两次 url 编码,变为%253f在服务器端提取参数时自动解码一次checkFile函数中解码一次,仍会解码为?,可以绕过第四个 if ,但是实测只编码一次也可以得到 flag
  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值