美文网首页
BUUOJ刷题

BUUOJ刷题

作者: 蓝小俊 | 来源:发表于2019-08-15 09:23 被阅读0次

0x01 WarmUp

出处:HCTF2018

 <?php
highlight_file(__FILE__);
class emmm {
    public static function checkFile(&$page) {
        $whitelist = ["source" => "source.php", "hint" => "hint.php"];
        if (!isset($page) || !is_string($page)) {
            echo "you can't see it"; //传入的参数必须是字符串
            return false;
        }

        if (in_array($page, $whitelist)) {
            return true; //$page的内容不能在whiteList里
        }

        $_page = mb_substr(
            $page,
            0,
            mb_strpos($page . '?', '?')
        ); //因为返回的是末尾的位置数,所以$_page就是原来的字符串。
        if (in_array($_page, $whitelist)) {
            return true;
        } //$_page的内容不能在whiteList里

        $_page = urldecode($page); //url解码一次
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . '?', '?')
        ); //url解码后截取问好前面的字符串
        if (in_array($_page, $whitelist)) {
            return true;
        }
        echo "you can't see it";
        return false;
    }
}

if (!empty($_REQUEST['file'])
    && is_string($_REQUEST['file'])
    && emmm::checkFile($_REQUEST['file'])
) {
    include $_REQUEST['file'];
    exit;
} else {
    echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

要使emmm::checkFile($_REQUEST['file'])返回true,利用?截取hint.php,利用/使hint.php?成为一个不存在的目录,最后include利用../../跳转目录读取flag。
payload: hint.php?/../../../../../../../../../../../ffffllllaaaagggg
payload还可以:index.php?file=source.php?/../../../../../../../../../../../ffffllllaaaagggg

参考资料:
https://www.jianshu.com/p/0d75017c154f
https://xz.aliyun.com/t/3255

0x02 随便注

出处:强网杯2019

  • 知识点补充

堆叠注入原理:在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

首先进行模糊测试,发现一共有两个字段:


接着测试联合注入,可以看到几乎所有常用的字段都被过滤了

这时候想到堆叠注入,试一下

可以看到成功了,存在堆叠注入,我们再直接show tables来查询下,试下能不能查询出表


可以看到有两张表1919810931114514words,下面分别来看下两张表有什么字段
payload:0'; show columns from words;#

payload:222';show columns from1919810931114514;#


因为这里有两张表,内容是从word这张表中回显的,那我们怎么才能让它回显flag所在的表呢
内部查询语句类似 : select * from works where id = '{$_GET["inject"]}'
(这里从上面的对word列的查询可以看到它是有两列,id和data)
然后1919810931114514只有一个flag字段
这时候虽然有强大的正则过滤,但没有过滤alert和rename关键字
这时候我们就可以已下面的骚姿势进行注入:
1.将words表改名为words1或其它任意名字
2.1919810931114514改名为words
3.将flag列改名为id
1';RENAME TABLE `words` TO `words1`;
# 把 words 改名为 words1
RENAME TABLE `1919810931114514` TO `words`;
# 数字表改名为 words
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;  //character set 即字符集  COLLATE utf8_general_ci:数据库校对规则
新的 words 里的 flag 列改为 id (避免一开始无法查询)
show columns from words;#

用 1′ or ‘1’=’1#访问一下

相关文章

  • BUUOJ刷题

    0x01 WarmUp 出处:HCTF2018 要使emmm::checkFile($_REQUEST['fil...

  • 从一道CTF的非预期解看PHP反斜杠匹配问题

    前言 刷buuoj的时候遇到这样一个题,做一半看到他这个正则写的有点问题,就去翻wp。 找到了官方的wp发现果然是...

  • buuctf-upload-labs

    刷了下buuctf搭建的upload-labs,记录一下。 地址:https://buuoj.cn/ Pass 0...

  • 刷题刷题

    时间紧迫,任务繁重,又有疫情影响,搞的人心惶惶,一时间复习得不安宁,又舍不得摆烂。 在焦灼、惶恐的情绪中,紧张急迫...

  • 【BUUCTF】MISC WP Ⅰ

    题目地址:https://buuoj.cn/challenges[https://buuoj.cn/challen...

  • 2022-09-16

    刷题,刷题还是刷题

  • 2018-07-16

    刷题,祸害的何止是教育? 报班,刷题;买练习册,刷题;家教,刷题;跟不上,刷题;学得好,刷题;为了抢跑,刷题;为了...

  • 刷题啊刷题

    因为月底又要考试,所以最近几天一直在刷题。按说是看了书再看视频再刷题效果比较好才是。可是来不及了啊。 上次考试,就...

  • 刷题啊刷题

    刷题啊刷题 因为11月中旬要举行期中考试,所以最近几天,学校精心组织,一直在刷题。按说是看了书再看PPT课件或教师...

  • 2020-02-01关于刷题的几个建议

    算法刷题 针对性刷题,刻意练习。刻意刷题!不是麻木刷题!刷题前一定要先看书,清楚明白为什么要刷这些题,这些题刷完能...

网友评论

      本文标题:BUUOJ刷题

      本文链接:https://www.haomeiwen.com/subject/sheojctx.html