极客大挑战 2019 Havefun 1(简单分析,HackBar)
题目

做法
启动靶机,点进去

常规F12看看源代码

发现这里有被注释了的代码
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
简要分析一波
前提小知识
$cat
$:表示一个自定义的普通变量
$ + 字符串:表示一个变量名/对象名
双 $ :表示一个可变变量,用于存储变量的值
$_GET
$_GET 是 PHP中预定义的 超全局变量(Superglobal Variable),用于获取通过 HTTP GET请求发送的参数。
数据类型:本质是一个 关联数组,键为参数名,值为参数对应的值
说人话:如题中的
$cat=$_GET['cat'];
就是定义一个叫cat的变量,然后通过 $_GET 从URL参数中获取cat变量的值
echo $cat:
echo
PHP中有两个基本的输出方式:echo和print
echo和print的区别:
1、echo - 可以输出一个或多个字符串
2、print - 只允许输出一个字符串,返回值总为 1
注:
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()
Syc{cat_cat_cat_cat},类似于我们要的flag格式flag{},猜想就是满足上面的条件即可得出我们要的flag
$cat = $_GET['cat']; // 从URL参数中获取cat变量的值
echo $cat; // 直接输出cat变量的值(存在XSS风险)
if($cat == 'dog'){ // 判断cat变量是否严格等于字符串'dog'
echo 'Syc{cat_cat_cat_cat}'; // 如果条件成立,输出flag
}
方法一
直接在URL上编写payload
根据上面的分析,我们直接在地址后面加上
/?cat=dog
然后回车,我们就可以得出flag

解释:
(1)
不带斜杠:服务器不知道你到底要访问首页,还是整个站点的根?
让其误解路径,导致参数传不到代码里
带斜杠:就是访问站点的根路径,然后还写入了cat=dog的参数
(2)
- 满足
$_GET接收逻辑:必须用?参数名=值的格式,代码才能通过$_GET['cat']拿到值。
get传参——参数和 URI 之间用问号?隔开, 参数键值用等号=连接,然后参数之间用连接符&拼接起来
方法二(思路大差不差,不过利用了一下HackBar)

F12后点击HackBar V2跳出此页面
然后点击左边的Load URL即可把当前的URL放进框中
然后就像上面的思路一般,直接在后面加入
/?cat=dog
点击Execute,即可得出flag

最后,回到题目提交flag即可

更新
于2025.06.07

浙公网安备 33010602011771号