BUUCTF web [MRCTF2020]套娃 1 wp

本文主要介绍了在MRCTF2020的套娃挑战中,如何通过理解$SERVER数组、利用%0a绕过preg_match、以及data://text/plain;base64的技巧来逐步解题。在过程中,通过分析PHP代码,发现flag位于secrettw.php,并尝试通过修改HTTP头字段获取。此外,还涉及JSFuck编码解码和PHP代码审计,最终成功获取flag。
摘要由CSDN通过智能技术生成

考点:
①$SERVER数组的各个元素的含义
②%0a绕过preg_match()
③data://text/plain;base64的利用

进去之后还是先看看有没有robots.txt文件(自己做题的习惯),发现页面并不跳转,猜测应该是index.php中有header在限制
于是查看源码,看到一段php代码


//1st
$query = $_SERVER['QUERY_STRING'];

 if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
   
    die('Y0u are So cutE!');
}
 if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
   
    echo "you are going to the next ~";
}
!

单看这段代码发现并没有什么有用的信息,但可能绕过之后会出来一些有用的信息
$query = $_SERVER['QUERY_STRING'],之后两个if语句,第一个禁止$query中出现下划线,第二个if要求变量b_u_p_t不能是23333但还有匹配到23333。
首先看$query = $_SERVER['QUERY_STRING']这个query是怎么得到了呢?这就要知道 $_SERVER['QUERY_STRING']存储了服务器的相关信息,其中有四个变量容易混淆:
$_SERVER["QUERY_STRING"] $_SERVER["REQUEST_URI"], $_SERVER["SCRIPT_NAME"] 和 $_SERVER["PHP_SELF"]
测试:
在这里插入图片描述

可以对这道题来说$query就是指b_u_p_t,这时就理解了为什么要求$query中不能出现下划线了,但要怎么绕过呢?可以用.代替_,绕过第一个判断,%0a绕过preg_match,那为什么可以用.代替_呢?
payload:?b.u.p.t=23333%0a这个地方也可以用空格代替下划线绕过
在这里插入图片描述
出现了一个有用的信息,flag在secrettw.php文件中,那就直接访问secrettw.php。
在这里插入图片描述看到Local access only 就尝试抓包修改xff或者client-ip字段为127.0.0.1(具体哪一个字段还要看get_ip函数中怎么实现的,都测试一下)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值