实验吧-忘记密码了

忘记密码了

原题链接

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抓包看看过程。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目地址:http://ctf5.shiyanbar.com/10/upload/step1.php 进入题目可以...
    Aluvion阅读 2,870评论 0 0
  • 基础篇 alert(HackingLab) 这样也可以 这题也差不多 http://lab1.xseclab.co...
    查无此人asdasd阅读 983评论 0 1
  • 我们学校的CTF平台终于搭起来了,膜一波包子大佬~~ 目前题目还不是很多,大部分是web,写个write up,希...
    Ro0t阅读 546评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • Yan卿爱的_阅读 181评论 0 0