BUUCTF【Web】WarmUp

进入靶场后发现只有一个滑稽表情,习惯性的右键查看源码,发现提示source.php

c43ad01875b54d5baac5f9f4703cd202.png

 直接访问source.php,接下来进行代码审计

c8ba28731ab446b7ab931ad96187dcf0.png

代码审计:

首先最外层if条件判断函数$_REQUEST['file']是否为空并且要满足is_string($_REQUEST['file']中file的值为字符串,之后传入过emmm::类中的checkFile方法,当返回为true时才运行指定文件“file”。183398a703844ea7859e2c87bb3b554d.png

接下来分析emmm类,创建一个类,类里面设置public static function访问权限为公有,重写checkFile方法,参数是&$page,在方法中又定义了一个$whitelist变量,变量里面定义了一个列表"source"=>"source.php","hint"=>"hint.php",前面的source.php我们已经查看了,接下来我们去访问“hint.php”得到“flag not here,and flag in ffffllllaaaagggg”内容。可以猜测ffffllllaaaagggg是文件名,我们需要的flag就可能在这里面。第一个if判断使用isset()变量是否是字符串,第二个if判断利用in_array()检测传进来的值是否有$whitelist里面的内容,若有则返回true。然后又设了一个$_page变量,使用mb_substr()来提取被mb_strpos()返回$page.?里面的?号出现的位置之前的字符串,直接把问号过滤掉了。第三个if判断和第二次if判断相似,然后使用urldecode()来吧$page进行url解码给$_page,之后又过滤掉问号。第四个if又判断传进来的值是否有$whitelist里面的内容

 b641e1bebe4d44efa41ca54b0bb121ba.png

一共经历三次检测,二次过滤,一次解码,参数在传入checkFile方法第一次白名单验证一次问号过滤后就是hint.php在进行一次白名单验证,若返回为真则得到flag。这样就可以构造url为index.php?file=hint.php?../../../../../ffffllllaaaagggg(尝试几次才找到flag)

1175a66ae23a4524b6e6e7f7a309dff9.png

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值