忘记密码了
原题链接
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抓包看看过程。