实验吧--忘记密码了

实验吧–忘记密码了

知识点:vim编辑器会产生备份文件.swp

解题流程:

  • 打开链接发现就是一个页面,什么提示也没有,源代码也好像没什么

  • 接下来,我们就随便写一个email上去,他显示

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

  • 然后我我们访问这个step2.php地址,发现他会马上跳转到step1.php,那这里面的关键信息肯定再这个step2.php中。

  • 通过Burp抓包http://ctf5.shiyanbar.com/10/upload/./step2.php ,再repeater里面go,发现返回的会被跳转的页面信息,整理一下得。

  > <meta name=”admin” content=[email protected] /> 
  >
  > <meta name=”editor” content=”Vim” /> 
  >
  > <form action=”submit.php” method=”GET”> 
  >
  > <h1>找回密码step2</h1> 
  >
  > email:<input name=”emailAddress” type=”text” value=[email protected]  disable=”true”/></br>
  >
  >  token:<input name=”token” type=”text” /></br> 
  >
  > <input type=”submit” value=”提交”> 
  >
  > </form> 
  • 分析上面的代码可知,这个页面会有两个输入框,输入的email和token会以GET方式提交到submit.php文件中去。

  • 于是乎,我们就直接访问这个submit.php文件–http://ctf5.shiyanbar.com/10/upload/submit.php ,但是显示 you are not an admin。

  • 猜测,这个文件可能会判断你传入的email和token是否是某个值,可能就是类似于下面的代码模式。

    if(isset($_GET["emailAddress"])&&$_GET["emailAddress"]=="???"){
    这里再进行满足条件后的操作。。。。。。
    }
    else{
    echo "you are not an admin"
    }
  • 于是,觉得应该要传入某个值,此时想到初始step1页面,header标签里的

    <meta name="admin" content="[email protected]" />

    会不会是这个(感觉怪怪的全都要留个心眼),于是就把这个email传过去,输入

    http://ctf5.shiyanbar.com/10/upload/[email protected]&token=

    因为要传入两个值,而另一个token的值目前还没有头绪,就传个空值进去

  • 这时候,没有出现 you are not an admin ,说明我们的猜测还是对的,但是token的值我们还不知道,也许知道了token的值再传到submit.php里面,结果就出来了。但是要知道token该怎么输入,需要符合怎样的格式,肯定要知道submit.php这个文件是怎么处理的,该怎么办呢。

  • 这时候,就要用到vim这个条件了,vim这个编辑器,会产生一些BUG。

    一、vim备份文件

    ​ 默认情况下使用Vim编程,在修改文件后系统会自动生成一个带~的备份文件,某些情况下可以对其下载进行查看;

    ​ eg:index.php普遍意义上的首页,输入域名不一定会显示。 它的备份文件则为index.php~

    二、vim临时文件

    ​ vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是submit,则它的临时文件

    submit.swp。如果文件正常退出,则此文件自动删除。

    形如:

    http://ctf5.shiyanbar.com/10/upload/.submit.php.swp

    三、这两个文件要正确处理,否则一些黑客会利用它。还有就是有时候ctf比赛的时候这俩小知识点也是考察的一个点

    ​ 那我们试试看,程序员有没有把submit.php的vim漏洞堵上。

  • 先输入http://ctf5.shiyanbar.com/10/upload/submit.php~,发现404 。备份文件没了。

    再输入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必须==”0”,且长度要为10,这就用到了php中==的模糊判断后门了,他不会管你的类型是不是匹配,只要换算成数字相等就是true,于是机智的想起填入十个”0”,也就是输入

    http://ctf5.shiyanbar.com/10/upload/[email protected]&token=0000000000 flag就出现了。完结撒花。

猜你喜欢

转载自blog.csdn.net/qq_41281571/article/details/81322475