随笔 - 51  文章 - 0  评论 - 4  阅读 - 19287

CTFer成长记录——CTF之Web专题·bugku—备份是个好习惯

一、题目链接

https://ctf.bugku.com/challenges/detail/id/83.html?id=83

二、解法步骤

  打开网站,发现是一串字符串:

  

  解码:[空密码]/[Empty String],无结果。题目提示“备份是个好习惯”,那么尝试访问index.php.bak和index.php.swp,这两个文件,看看存不存在。

于是在index.php.bak中获取到了一段代码文件:

de_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";

  通过代码审计:

  1. $str = strstr($_SERVER['REQUEST_URI'], '?'); 获取当前页面 URL 中 ? 后面的部分。
  2. $str = substr($str,1); 去掉 $str 第一个字符(即去掉 ?)。
  3. $str = str_replace('key','',$str); 将字符串中的 key 替换为空字符串。
  4. if(md5($key1) == md5($key2) && $key1 !== $key2) 判断 $key1 的 MD5 哈希值是否等于 $key2 的 MD5 哈希值,并且 $key1 不等于 $key2
  5. 如果条件满足,则输出 $flag."取得flag"

  因此,这题是一个双写绕过和md5弱比较绕过,于是我们构造如下payload:

  ?kkeyey1=s878926199a&kekeyy2=s155964671a,这段payload利用了md5的值也是字符串,只要能确保他们都是0e开头,那么通过弱比较后的值就都为0;

  flag{30dc9a980306fc42b9603c068a709545}取得flag。

  当然,也能利用数组MD5返回为NULL的特性也能解决,构造payload:?kkeyey1[]='aaa'&kekeyy2[]='bbb'也可以获得flag

三、总结

  本题考察源码泄露中的备份文件泄露,如果不知道备份文件的格式,可以用kali自带的disearch扫下网站;接着是比较常见的双写绕过与MD5弱比较绕过,比较简单。主要是要看懂代码。

posted on   MiracleWolf  阅读(266)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示