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

    【CTF捷径】【个人经验】CTF中的非预期小惊喜

    [复制链接]

    15

    主题

    0

    精华

    13 小时

    在线时间

    密圈

    积分
    13
    发表于 2019-6-3 17:32:47 | 显示全部楼层 |阅读模式
    浅谈CTF中的非预期
    个人对非预期的理解
    个人拙见是CTF中或多或少存在的非预期是完全可以接受的。




    最开始的 CTF 比赛(1996 年 - 2001年),没有明确的比赛规则,没有专业搭建的比赛平台与环境。

    由参数队伍各自准备比赛目标(自己准备的比赛目标自己防守并要尝试攻破对方提供的比赛目标)








    所谓条条大路通罗马

    打CTF的目的就是拿到flag。
    那么无论是按着常规思路来,或是大佬们各种各样的奇淫技巧。
    我认为都是靠的自己的本事。
    如果代码都可以完美,那么就不再需要安全这种东西了...



    就像可能平常你 *站 时一样,习惯性的看看robots.txt,然后开始各种疯狂扫扫扫... 有的时候打CTF也是一样,进去本能的查看 flag.txt,没有思路时开着大字典的御剑碰碰运气(线上CTF几乎不会让你直接扫出来,但是或许结合CTF举办方名字+flag关键字可能出现想不到的收获...)





    Bugku-web8
    [PHP] 纯文本查看 复制代码
    <?php
    extract($_GET);
    if (!empty($ac))
    {
    $f = trim(file_get_contents($fn));
    if ($ac === $f)
    {
    echo "<p>This is flag:" ." $flag</p>";
    }
    else
    {
    echo "<p>sorry!</p>";
    }
    }
    ?>

    一道变量覆盖的题,但是有的wp是直接猜 $flag为flag.txt,
    然后访问flag.txt得到内容 flags

    于是一道本来是考察变量覆盖题的payload被构造成了 http://123.206.87.240:8002/web8/?ac=flags&fn=flag.txt



    Bugku-sql注入2

    一道练习sql注入的好题,几乎全都过滤了。完完整整的做一遍对于提高自己sql注入很有帮助。

    但是网上的姿势却是直接访问: http://123.206.87.240:8007/web2/flag 即可获取到flag

    正确姿势请移步叶师傅的文章 orz: https://xz.aliyun.com/t/2583



    伪协议"巧取"flag
    HDCTF
    题目来源:HDCTF-简单的代码审计 题目本身是道入门题,但是可以直接“取巧”得到flag
    进入页面空无一物,F12查看源码发现提示 <!--hint:file=once.php-->
    You password must be alphanumeric ; 第一反应应该不像是一道sql注入题,再次F12查看源码发现没有什么值得利用的东西
    经过base64解码后得到
    [PHP] 纯文本查看 复制代码
    <?php
    error_reporting(0); 
    include_once('./flag/flag0.php');
    if (isset ($_GET['password'])) {
        if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
        {
           echo '<p>You password must be alphanumeric</p>';
        }
        else if (strlen($_GET['password']) < 8 && $_GET['password'] > 999999999)
        {
           if (strpos ($_GET['password'], '*-*') !== FALSE)
           {
             die('Flag: ' . $flag);
           }
           else
           {
             echo('<p>*-* have not been found</p>');
           }
        }
        else
        {
           echo '<p>Invalid password</p>';
        }
    }
    ?>
    一道考察 ereg函数%00截断的题,但是从第一行开始读,到第三行我就停住了 include_once('./flag/flag0.php');,这里包含了flag文件
    然后本身源码就是伪协议读取来的,尝试着直接伪协议读取flag http://149.28.22.177:10003/?file=php://filter/read=convert.base64-encode/resource=./flag/flag0.php
    GET flag...

    Jarvis OJ
    题目来源:Jarvis OJ http://web.jarvisoj.com:32782/
    一道SSRF题,由于预期解法配置出了问题,file协议再次打开非预期世界的大门
    直接访问 http://web.jarvisoj.com:32782/proxy.php?url=file:///etc/passwd ,发现页面进行了回显
    之后利用报错拿到了源码最终得到flag...
    详细wp再次移步叶师傅文章 orz: https://www.anquanke.com/post/id/154144
    各种大佬的奇淫技巧



    条件竞争
    题目来源:LCTF-萌萌哒报名系统
    [PHP] 纯文本查看 复制代码
    <?php
        $admin = "xdsec"."###".str_shuffle('you_are_the_member_of_xdsec_here_is_your_flag');
        ...
        preg_match('/^(xdsec)((?:###|\w)+)$/i', $code, $matches);
        if (count($matches) === 3 && $admin === $matches[0]) {
            echo "Success";
        } else {
            echo "False";
        }
    预期解法:pre_match在匹配的时候会消耗较大的资源,并且默认存在贪婪匹配,通过超长的字符可以导致php超时而后面的php语句就不会执行 非预期解法:条件竞争,这个利用的应该是属于逻辑漏洞,再验证Guest身份的时候是通过if ($sth->fetch()[0] === ‘GUEST’) 如果用户的身份不存在则取出来的值为NULL,即在执行插入身份之前登录,也可以绕过



    /tmp临时文件竞争
    题目来源:N1CTF easy_harder_php
    要使用临时文件竞争,phpinfo的环境要有配置
    它大概的原理就是趁系统还没把临时文件删除之前将这个文件包含起来,从而getshell,通常系统的守护进行删除时隔很小,大概在2~3s,所以,我们要使用多线程上传,然后不断刷新包含文件。


    小结
    大佬们的奇淫技巧真的总结不完,像缓存投毒,参数污染之类的在很多地方还有奇效...以后再慢慢总结吧。
    最后附上P师傅两页PPT: PPT来源于: Phithon——CTF比赛总是输?你还差点Tricks!









    上一篇:对违规成员 elephant 的处理公示
    下一篇:【XCTF攻防世界】misc - embarrass
    回复

    使用道具 举报

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

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