美文网首页
Bugku 备份是个好习惯

Bugku 备份是个好习惯

作者: 失眠是真滴难受 | 来源:发表于2019-02-06 00:03 被阅读8次

    打开题目,就是一串字符串
    d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
    先拿去解密一下试试,结果得到了一个空密码。

    image.png
    这个时候就得考虑一下其它线索了,回看题目“备份是个好习惯”,和备份有关???那扫扫看 image.png
    扫出来了一个 bak 文件。 小知识:备份文件一般都是.bak或者.swp
    把备份文件下载下来,打开之后是网页的源码。
    <?php
    /**
     * Created by PhpStorm.
     * User: Norse
     * Date: 2017/8/6
     * Time: 20:22
    */
    
    include_once "flag.php";//包含 flag.php 文件
    ini_set("display_errors", 0);//设置不返回错误信息
    $str = strstr($_SERVER['REQUEST_URI'], '?');//判断URL里是否有问号,存在就返回给 $str
    $str = substr($str,1);//获取 ? 后面的值
    $str = str_replace('key','',$str);//将 $str 里面的 key 替换为空
    parse_str($str);//解析字符串
    echo md5($key1);//将 key1 进行 MD5 加密并输出
    
    echo md5($key2);//将 key2 进行 MD5 加密并输出
    if(md5($key1) == md5($key2) && $key1 !== $key2){
        echo $flag."取得flag";//如果 key1 和 key2 的值不相等,但是两个的 MD5 相等,就返回 flag
    }
    ?>
    

    阅读源码,在这里贴上函数的用法
    strstr()
    substr()
    str_replace()
    parse_str()

    到这里,就只剩下一个问题了,如果绕过两个不同的值有相同的 MD5?
    1.我们都知道,MD5 加密是对字符串进行加密,那么如果我们传入的不是字符串,而是一个数组呢??? 它没法进行加密,返回空,结果不就相等了吗。
    所以就可以构造这么一个 URL
    http://123.206.87.240:8002/web16/index.php?kkeyey1[]=wsafe&kkeyey2[]=sjkfsfd
    2.还有一个办法,众所周知,科学计数法是 *e***** ,那么要使两个数的值相等,就只能是 0e***** ,所以只要找到两个加密之后是 0e 开头的数字,就可以绕过限制了,在网上查了一下,找到了这么几个。

    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a
    

    前面之所以传入的是 kkeyey1 而不是 key1 ,是为了绕过 str_replace 这个函数的限制,这个函数将 key 替换为空,剩下的拼接在一起正好就成了 key1.

    相关文章

      网友评论

          本文标题:Bugku 备份是个好习惯

          本文链接:https://www.haomeiwen.com/subject/aokbsqtx.html