CTFer成长记录——CTF之Web专题·bugku—备份是个好习惯
1.CTFer成长记录——web专题·本地访问网址2.CTFer成长记录——web专题·一句话木马3.CTFer成长记录——Web专题·从cookie中获取信息4.CTFer成长记录——Web专题·双写绕过5.CTFer成长记录——Web专题·robots协议6.CTFer成长记录——Web专题·Linux中的.swp文件7.CTFer成长记录——Web专题·修改页面元素8.CTFer成长记录——Web专题·判断绕过9.CTFer成长记录——CTF之Web专题·初识反序列化10.CTFer成长记录——CTF之Web专题·攻防世界-PHP211. CTFer成长记录——CTF之Web专题·bugku-Simple_SSTI_212.CTFer成长记录——CTF之Web专题·bugku-eval13.CTFer成长记录——CTF之Web专题·bugku-变量114.CTFer成长记录——CTF之Web专题·[ACTF2020 新生赛]Include
15. CTFer成长记录——CTF之Web专题·bugku—备份是个好习惯
16.CTFer成长记录——CTF之Web专题·攻防世界—easyupload17.CTFer成长记录——CTF之Web专题·攻防世界—fileinclude·好多文件呀18.CTFer成长记录——CTF之Web专题·攻防世界—easyphp19. CTFer成长记录——CTF之Web专题·buuctf—secretfile20.CTFer成长记录——CTF之Web专题·19强网杯—随便注21.CTFer成长记录——CTF之Web专题·攻防世界—file_include22.CTFer成长记录——CTF之Web专题·攻防世界—unseping23.CTFer成长记录——CTF之Web专题·攻防世界—NewsCenter24.CTFer成长记录——CTF之Web专题·极客大挑战 2019—http25.CTFer成长记录——CTF之Web专题·极客大挑战—Upload26.CTFer成长记录——CTF之Web专题·极客大挑战—BabySQL27.CTFer成长记录——CTF之Web专题·攻防世界-Web_python_template_injection28.CTFer成长记录——CTF之Web专题·攻防世界-Web_php_unserialize29.CTFer成长记录——CTF之Web专题·攻防世界-php_rce30.CTFer成长记录——CTF之Web专题·攻防世界-Web_php_include31. CTFer成长记录——CTF之Web专题·buuctf-easy_tornado32.CTFer成长记录——CTF之Web专题·攻防世界—lottery33. CTFer成长记录——CTF之Web专题·攻防世界—ics-0534.CTFer成长记录——CTF之Web专题·buuctf—admin35.CTFer成长记录——CTF之Web专题·buuctf—Cookies36. CTFer成长记录——CTF之Web专题·bugku—never_give_up37.CTFer成长记录——CTF之Web专题·[SWPUCTF 2021 新生赛]jicao一、题目链接
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";
通过代码审计:
$str = strstr($_SERVER['REQUEST_URI'], '?');
获取当前页面 URL 中?
后面的部分。$str = substr($str,1);
去掉$str
第一个字符(即去掉?
)。$str = str_replace('key','',$str);
将字符串中的key
替换为空字符串。if(md5($key1) == md5($key2) && $key1 !== $key2)
判断$key1
的 MD5 哈希值是否等于$key2
的 MD5 哈希值,并且$key1
不等于$key2
。- 如果条件满足,则输出
$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弱比较绕过,比较简单。主要是要看懂代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!