美文网首页
实验吧-忘记密码了

实验吧-忘记密码了

作者: V0W | 来源:发表于2018-08-07 21:50 被阅读0次

    忘记密码了

    原题链接

    http://ctf5.shiyanbar.com/10/upload/step1.php

    分析

    注册,发现有content,直接填
    查看了一下源码,发现好像还有东西:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="renderer" content="webkit" />
        <meta name="admin" content="admin@simplexue.com" />
        <meta name="editor" content="Vim" />
    <br />
    

    注意有个Vim。难道是提示说有vim的源码泄露?试了一下step1.php.swp也不对啊。。。

    注册后得到提示

    你邮箱收到的重置密码链接为 ./step2.php?email=youmail@mail.com&check=???????
    

    容易得到我们的重置密码链接
    http://ctf5.shiyanbar.com/10/upload/step2.php?email=admin@nuptzj.cn&check=???????

    问题是check是什么呢?先不管,访问看看,然后一闪而过,回到了原来的注册页面。应该是由于check的问题,但是一闪而过的页面是什么样的呢?

    于是抓包看了一下,发现重要信息,有一个新页面submit.php,step2.php,实际上是把数据传给了submit.php

    那么Vim的源码泄露,找到罪恶之源了。
    http://ctf5.shiyanbar.com/10/upload/.submit.php.swp

    
    ........这一行是省略的代码........
    
    /*
    如果登录邮箱地址不是管理员则 die()
    数据库结构
    
    --
    -- 表的结构 `user`
    --
    
    CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(255) NOT NULL,
      `email` varchar(255) NOT NULL,
      `token` int(255) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
    
    --
    -- 转存表中的数据 `user`
    --
    
    INSERT INTO `user` (`id`, `username`, `email`, `token`) VALUES
    (1, '****不可见***', '***不可见***', 0);
    */
    
    
    ........这一行是省略的代码........
    
    if(!empty($token)&&!empty($emailAddress)){
        if(strlen($token)!=10) die('fail');
        if($token!='0') die('fail');
        $sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
        $r = mysql_query($sql) or die('db error');
        $r = mysql_fetch_assoc($r);
        $r = $r['num'];
        if($r>0){
            echo $flag;
        }else{
            echo "失败了呀";
        }
    }
    

    注意到这一句

    if(strlen($token)!=10) die('fail');
        if($token!='0') die('fail');
    

    token 为10位,且为0,邮箱必须是管理员邮箱,在step1.php里有管理员邮箱admin@simplexue.com
    那就简单了
    token=0e12345678

    这里用的是submit.php

    如果还是用step2.php 还是会闪回step1.php,这里有点坑。
    还有一个坑点就是,submit.php和step2.php的提交参数不一样,
    这一点在抓包的源码中可以看出来。

    email:<input name="emailAddress" type="text" <br />
    <b>Notice</b>:  Use of undefined constant email - assumed 'email' in <b>C:\h43a1W3\phpstudy\WWW\10\upload\step2.php</b> on line <b>49</b><br />
    value="admin@simplexue.com"  disable="true"/></br>
            token:<input name="token" type="text" /></br>
            <input type="submit" value="提交">
        </form>
    </body>
    

    emailAddress&token

    于是有了payload
    http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0e12345678

    flag

    SimCTF{huachuan_TdsWX}

    知识点

    vim写文件造成swp源码泄露
    简单审计
    查看html源码隐藏信息


    一点吐槽,其实题目不难,但是硬是卡了很久,原因就在于,用它填充的密码或者随便注册个密码,它会闪回到step1.php
    让我不知所措,还好后来想起来,用Burp抓包看看过程。

    相关文章

      网友评论

          本文标题:实验吧-忘记密码了

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