实验吧-忘记密码了

忘记密码了

原题链接

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

分析

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




    
    
    
    
    

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

注册后得到提示

你邮箱收到的重置密码链接为 ./[email protected]&check=???????

容易得到我们的重置密码链接
http://ctf5.shiyanbar.com/10/upload/[email protected]&check=???????

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

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

实验吧-忘记密码了_第1张图片

那么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里有管理员邮箱[email protected]
那就简单了
token=0e12345678

这里用的是submit.php

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

email:
Notice:  Use of undefined constant email - assumed 'email' in C:\h43a1W3\phpstudy\WWW\10\upload\step2.php on line 49
value="[email protected]" disable="true"/>
token:

emailAddress&token

于是有了payload
http://ctf5.shiyanbar.com/10/upload/[email protected]&token=0e12345678

flag

SimCTF{huachuan_TdsWX}

知识点

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


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

你可能感兴趣的:(实验吧-忘记密码了)