Bugku web——web8

本文分析了一段PHP代码,展示了如何通过构造特定的GET参数来触发代码中的逻辑,实现对预设flag的获取。详细解释了extract()和file_get_contents()函数的使用,并提供了两种payload构建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开连接,获得代码:

<?php
extract($_GET);
if (!empty($ac))
{
	$f = trim(file_get_contents($fn));
	if ($ac === $f)
	{
		echo "<p>This is flag:" ." $flag</p>";
	}
	else
	{
		echo "<p>sorry!</p>";
	}
}
?>

分析代码:

  • extract($_GET):函数extract()有通过数组进行赋值的功能:
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
  • file_get_contents($fn):file_get_contents功能是从文件名为“$fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值

根据提示txt,猜测存在flag.txt
在这里插入图片描述
其内容为flags,因此可以使$ac值为flags,$fn值为flag.txt,使$ac和$f相等

还有一种解法,利用file_get_contents在$fn的值为“php://input”时会返回post值 的特点,使$ac值为123,$fn值为“php://input”,并post值123,同样可使$ac和$f相等

payload构建完毕,下一步是通过函数extract进行赋值,但是其参数为数组,而且$_GET后并没有参数,因此怎么通过get传值是个问题

extract($_GET)       一般不是这样吗?? $_GET[id]

查看writeup,发现直接通过get传值即可

http://123.206.87.240:8002/web8/index.php?ac=flags&fn=flag.txt

为什么可以这么用?我并没有查到资料,那只能猜测如果$_GET后不加具体参数名的情况下,其返回值为一个数组,其中包含参数名和值的对应关系

第二种解法如下,

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值