练[BSidesCF 2020]Had a bad day

[BSidesCF 2020]Had a bad day

文章目录

      • [BSidesCF 2020]Had a bad day
      • 掌握知识
      • 解题过程
      • 关键paylaod

练[BSidesCF 2020]Had a bad day_第1张图片

掌握知识

​ php伪协议进行文件包含,代码审计,strpos()函数会返回字符串在另一字符串中第一次出现的位置,如果没有找到则返回 FALSE,php伪协议可以再套一层协议绕过判断或者目录遍历的方式绕过判断

解题过程

  1. 访问网站,发现有两个按钮可以点击,查看源码没有什么hint,点击按钮后发现类似文件包含的url字段,而且点击按钮会相互切换界面,怀疑是文件包含的考点

练[BSidesCF 2020]Had a bad day_第2张图片

image-20230928122450028

  1. 尝试验证,读取/etc/passwdindex.php都没有反应,使用php伪协议再次尝试,发现页面返回了报错,发现index.php后面还有个php,猜测页面源码会将传入的参数在后面拼接一个php后缀名,再次使用php伪协议读取index,成功得到页面源码。当然flag文件没能包含成功。php://filter/convert.base64-encode/resource=index

image-20230928122619898

image-20230928122630495

image-20230928122828090

  1. 将base64解码后,得到了页面源码,发现是一个简单的代码审计,strpos()函数会返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。所以要想执行include函数,传入的参数必须要有woofers meowers index之一。
  <?php
	$file = $_GET['category'];

	if(isset($file))
	{
	if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
		include ($file . '.php');
    	}
	else{
		echo "Sorry, we currently only support woofers and meowers.";
		}
	}
	?>
  1. 我所知道的这里有两个方法可以成功访问到flag,第一种也是我用的,php://filter伪协议可以套一层index字符串,而且也能正常执行。paylaod?category=php://filter/convert.base64-encode/index/resource=flag

image-20230928124037450

练[BSidesCF 2020]Had a bad day_第3张图片

  1. 第二种方法可以选择目录遍历的方式,/是来到下一级目录,../是返回上一级目录,./是在这一级目录访问,所以只需要构建index/../flag,就可以访问flag.php

练[BSidesCF 2020]Had a bad day_第4张图片

关键paylaod

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

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

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

你可能感兴趣的:(buuctf刷题,web安全,网络安全,php,其他)