[NSSCTF 2022 Spring Recruit]babyphp
[NSSCTF 2022 Spring Recruit]babyphp
先上源代码
<?php highlight_file(__FILE__); include_once('flag.php'); if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])){ if(isset($_POST['b1'])&&$_POST['b2']){ if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])){ if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){ echo $flag; }else{ echo "yee"; } }else{ echo "nop"; } }else{ echo "go on"; } }else{ echo "let's get some php"; } ?>
题目分析
首先分析第一次判断的三个函数
isset()、preg_match(),intval()
isset() 是来判断参数是否存在,那么就只需要传入a
!preg_match=true
这个涉及到这个函数下面的的第一个特性
- 只能判断字符串,传入数组返回0
.
不匹配换行符- PRCE回溯
intval 特性
intval()函数用来获取变量的整数值, 使用的时候常见的有两种情况
转换整数时,返回整数本身
转换字符串时, 会从字符串的开始进行转换,直到遇到一个非数字的字符,如果字符串的第一个字符不是整数,则返回0
这里上个截图,具体原理也不是很清楚,之前在网上也没有找到资料也是测试代码测出来的
第二、三层就涉及到md5漏洞
哈希碰撞
当无限的数据集映射到有限的数据集必然存在重复
$b2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2 $b1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
数组绕过
当MD5()中的参数传入为数组时,返回NULL
b1[]=1&b2[]=2
最后一层,MD5弱类型比较
MD5弱类型比较漏洞(0e绕过)
网上找一些
0e215962017 0e291242476940776845150308577824 0e1284838308 0e708279691820928818722257405159 0e1137126905 0e291659922323405260514745084877 0e807097110 0e318093639164485566453180786895 0e730083352 0e870635875304277170259950255928
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具