练[BSidesCF 2020]Had a bad day

[BSidesCF 2020]Had a bad day


在这里插入图片描述

掌握知识

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

解题过程

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

image-20230928122319632

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

image-20230928124101243

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

image-20230928124659708

关键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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值