首页 > Web开发 > 详细

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

时间:2020-04-26 17:51:46      阅读:86      评论:0      收藏:0      [点我收藏+]

 

打开页面是一串字符,看起来是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值)

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

原文:https://www.cnblogs.com/ctf-love/p/12780807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!