http://ctf5.shiyanbar.com/10/upload/step1.php
查看源码以后发现有个管理员地址
<meta name="admin" content="admin@simplexue.com" />
邮箱填写该地址,弹出邮件发到管理员邮箱了,你看不到的
随便更换一个邮箱地址,弹出 ./step2.php?email=youmail@mail.com&check=???????
说明存在一个step2.php的文件
查看源码,发现提交的数据提交到了submit.php页面,说明存在一个submit.php页面。
<form action="submit.php" method="GET">
<h1>找回密码step2</h1>
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="test@test.com" disable="true"/></br>
token:<input name="token" type="text" /></br>
<input type="submit" value="提交">
</form>
http://ctf5.shiyanbar.com/10/upload/submit.php访问该页面,返回you are not an admin。
因为这是表格提交,所以尝试加入emailAddress值和token值。
http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0,空网页
http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=1,返回fail
这里的关键点是首页中的头部信息
<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 />
编辑器editor是vim,当非正常关闭vim时候,会生成一个swp文件,即.submit.php.swp,通过访问确定是否存在这个文件。
http://ctf5.shiyanbar.com/10/upload/.submit.php.swp
可以查看到源码
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 "失败了呀";
}
}
要求token值长度是10,email要存在数据库。已知管理员邮箱存在数据库,剩下的就是token值。
据说这里有关于php的弱等于,需要再了解下。
总结这个实验,一是编辑器保存了备份文件,二是弱等于