BUUCTF日记--[HCTF 2018]WarmUp

f12看页面元素,发现提示,访问
在这里插入图片描述
函数从这里开始运行,接收一个变量file,传递到checkFile这个函数里面
在这里插入图片描述
主要审计的代码就是这一块,全部返回true之后就可以执行上面的include语句,访问文件,我们看看每个if条件句
在这里插入图片描述
在class里面有4个if条件语句
第一个if语句判断变量$page是不是字符串,不是则返回false
第二个if语句判断变量$page是否是白名单数组中的字符串,是则返回true
然后将$page过滤,substr函数是将字符串分割,mb_strpos($page.’?’, ‘?’)先将page加上一个问号,然后计算问号前的字符串的数量,并返回这个数量的值
假设我们的page=‘flag?id=123456?pwd=123456’
strop返回的值则是4,substr分割出来的字符串就是flag
第三个if语句和第二个一样,对过滤后的page进行白名单检测
然后用urldecode()函数编码,“?”的编码是%253f
再进行一次过滤
第4个if语句,$page变量过滤后还有白名单中的字符串则返回true

我们还看到白名单中还有“hint.php”,访问可以得到提示,flag再ffffllllaaaagggg文件中
在这里插入图片描述
所以构造出来的语句肯定要有白名单中的字符串
还要用file作为变量传递
file变量的值要满足刚刚checkFile中的所有条件

source.php?file=source.php?../../../../../ffffllllaaaagggg

解释一下
因为checkFile函数是对file传进去的值进行过滤,所以进入checkFile代码中作为$page变量保存的字符串是这一段

source.php?../../../../../ffffllllaaaagggg   
#我把整句当成传进去的值了。。。怎么分析都不对

第一次过滤的时候整个字符串就只剩下了source.php
第二次过滤的时候字符串还是source.php

mb_strpos($_page . '?', '?')
#因为PHP中的“.”表示连接符,相当于在source.php后面加了个问号,
#所以mb_strops返回的值还是这个字符串的长度,
#mb_substr函数自然还是返回这个字符串

所以这个构造可以通过函数的验证,执行最终的include语句


如果还有不懂的地方可以关注我的公众号“沉淀Hack”,发消息向我留言,每天会更新大量干货教程,快扫下面的二维码吧
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值