xctf攻防世界 Web高手进阶区 blgdel

1.进入环境,查看内容

在这里插入图片描述
乱点一通,注册个账号,没有什么发现,秒杀页面有些奇怪,但也没有重要的提示,使用dirsearch扫一扫,看看有啥,如图:在这里插入图片描述
我们发现有robots.txt,那就从这里入手吧!

2. 问题分析

  1. 查看robots.txt在这里插入图片描述
    打开后,提示config.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');
 
?>

看内容不过就是文件流操作函数,和一些文件上传的内容过滤函数

  1. 上传文件
    我们发现个人中心有可以上传文件的入口,我们尝试点击,如图:在这里插入图片描述
    等级不足,需要提升积分。看到注册页有个填写推广人的,尝试写入推荐人,发现有积分增长:
    在这里插入图片描述
    但是还是无法提交,说明积分不够,那么多注册几个(其实需要大于100积分),当积分大于100分的时候,发现可以上传头像了。
    我们尝试搞个一句话木马,然后通过上传到服务器试试在这里插入图片描述
    上传成功后,需要看到上传在哪里了,我们去dirsearch中看到,有一个/uploads/目录,尝试访问一下,如图:在这里插入图片描述
    一顿乱戳,找到了:
    在这里插入图片描述
    但是发现代码变化了,如图:在这里插入图片描述
  2. 代码审计
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;
    }

可以看到,上传的文件内容被str_replace()函数做了替换,那么如何上传后门,让代码执行应该是重点了。
接下来又涉及到知识盲区了,跟着wp走吧!
4. 上传.htaccess文件
上传一个.htaccess文件 ,内容为:

php_value auto_append_file master://search/path=%2fhome%2f&name=flag

使用bp上传,如图:在这里插入图片描述
再次访问上传的php文件,我们会发现flag文件,如图:在这里插入图片描述
那么继续构造能拿到flag的payload:

php_value auto_append_file /home/hiahiahia_flag

bp上传文件,如图:在这里插入图片描述
再次刷新php页面,拿到结果如图:在这里插入图片描述
最终的flag为:cyberpeace{3da8c27082ab20490ca3af4588350b42}

3. 总结

这个题操作不难,但是为什么要构造.htaccess文件?这个是什么东东?
.htaccess 详解
这波题是按照wp一步步操作并记录得到的,主要问题还是在于.htaccess是什么东东,为什么这么构造,打算再研究一下这玩意。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值