攻防世界web进阶区blgdel详解

攻防世界web进阶区blgdel详解

题目

在这里插入图片描述

详解

我们发现他有个robots.txt文件
在这里插入图片描述
我注册了好几次,也没登录成功,挺离谱
在这里插入图片描述
直接访问,发现是源码

<?php

class master
{
	private $path;
	private $name;
	
	function __construct()
	{
		
	}
	
	function stream_open($path)
	{
		if(!preg_match('/(.*)\/(.*)$/s',$path,$array,0,9))
			return 1;
		$a=$array[1];
		parse_str($array[2],$array);
		
		if(isset($array['path']))
		{
			$this->path=$array['path'];
		}
		else
			return 1;
		if(isset($array['name']))
		{
			$this->name=$array['name'];
		}
		else
			return 1;
		
		if($a==='upload')
		{
			return $this->upload($this->path,$this->name);
		}
		elseif($a==='search')
		{
			return $this->search($this->path,$this->name);
		}
		else 
			return 1;
	}
	function upload($path,$name)
	{
		if(!preg_match('/^uploads\/[a-z]{10}\/$/is',$path)||empty($_FILES[$name]['tmp_name']))
			return 1;
		
		$filename=$_FILES[$name]['name'];
		echo $filename;
		
		$file=file_get_contents($_FILES[$name]['tmp_name']);
		
		$file=str_replace('<','!',$file);
		$file=str_replace(urldecode('%03'),'!',$file);
		$file=str_replace('"','!',$file);
		$file=str_replace("'",'!',$file);
		$file=str_replace('.','!',$file);
		if(preg_match('/file:|http|pre|etc/is',$file))
		{
			echo 'illegalbbbbbb!';
			return 1;
		}
		
		file_put_contents($path.$filename,$file);
		file_put_contents($path.'user.jpg',$file);
		
		
		echo 'upload success!';
		return 1;
	}
	function search($path,$name)
	{
		if(!is_dir($path))
		{
			echo 'illegal!';
			return 1;
		}
		$files=scandir($path);
		echo '</br>';
		foreach($files as $k=>$v)
		{
			if(str_ireplace($name,'',$v)!==$v)
			{
				echo $v.'</br>';
			}
		}
		
		return 1;
	}
	
	function stream_eof()
	{
		return true;
	}
	function stream_read()
	{
		return '';
	}
	function stream_stat()
	{
		return '';
	}
	
}

stream_wrapper_unregister('php');
stream_wrapper_unregister('phar');
stream_wrapper_unregister('zip');
stream_wrapper_register('master','master');

?>

xctf环境无法登录,此题先更到这里
我们可以先代码审计,环境好了再写
在结合我们刚开始找的源代码,就是上传文件的操作。

parse_str() 函数把查询字符串解析到变量中。
代码审计,

定义了一个类master,其中有几个方法,我们逐个分析。

stream_open()
对path的传参和name的传参从字符串到变量,做了一个方法对应。

upload()
过滤了文件内容。

发现< " ’ . 文件内容都被替换成了!.

/file:|http|pre|etc/is也被过滤了。

search()
判断了是否存在path路径,对当前目录进行遍历,存在和path路径,对当前目录进行遍历,存在和name相同的文件或者目录替换为空 并列出当前目录。

但是我们可以上传.htaccess文件,但是平常遇到的文件内容都会触发过滤,所以得想想绕过文件内容检测。

在这里插入图片描述
御剑有了消息
在这里插入图片描述
有一个sql.txt
在这里插入图片描述
第二天我们的环境终于正常了,我们先注册账号
在这里插入图片描述

在这里插入图片描述
我们登录之后,发现,我们的等级,并不能够让我们上传,
我们当推荐人,多注册几个
在这里插入图片描述
我们有了积分以后,可以上传了
在这里插入图片描述
在这里插入图片描述
我们将图片上传并修改后缀,发现不行
在这里插入图片描述
在这里插入图片描述
正常一句话是随便上传的!
大马不行= =

在这里插入图片描述
在这里插入图片描述
我们根据这个网页,虽然打不开,但是它可以进行目录遍历!
在这里插入图片描述
在这里插入图片描述
发现了我们的马
在这里插入图片描述
尖括号,单引号都被过滤了,
测了好久不能绕过了,
那么我们上我们的user.ini或者.htaccess

php_value auto_append_file master://search/path=%2fhome%2f&name=flag
我们可以使用这个方法,
%2f 是 / 因为他里面有一次匹配规则,所以需要使用%2f绕过

这里的master search path name 都是在代码中他自己写的
这里只是调用它的功能
在这里插入图片描述
可以的,没有问题
在这里插入图片描述
因为刚刚 505.pHp 影响了htaccess,我们这里重新上传一个 .php的正常结尾
发现文件,hiahiahia_flag
然后访问映射的文件发现存在再上传一个.htaccess,内容为

php_value auto_append_file /home/hiahiahia_flag
在这里插入图片描述

正则

在这里插入图片描述

\s是指空白,包括空格、换行、tab缩进等所有的空白
$是从后匹配字符串
/是为了匹配 /
() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
. 表示 匹配除换行符 \n 之外的任何单字符,*表示零次或多次

所以.*在一起就表示任意字符出现零次或多次。没有?表示贪婪
模式。比如a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

php_value

见这里
https://www.dazhuanlan.com/2019/10/19/5daaf6b58f83b/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值