前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >攻防世界web进阶区blgdel详解

攻防世界web进阶区blgdel详解

作者头像
wuming
发布2021-01-21 16:02:34
7160
发布2021-01-21 16:02:34
举报
文章被收录于专栏:wuming_CTFwuming_CTF
  1. 1. 题目
    1. 1.1. 详解
      1. 1.1.1. 正则
      2. 1.1.2. php_value

题目

在这里插入图片描述
在这里插入图片描述

详解

我们发现他有个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

正则

在这里插入图片描述
在这里插入图片描述

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

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

php_value

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
    • 详解
      • 正则
      • php_value
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档