[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()函数用来获取变量的整数值, 使用的时候常见的有两种情况

  1. 转换整数时,返回整数本身

  2. 转换字符串时, 会从字符串的开始进行转换,直到遇到一个非数字的字符,如果字符串的第一个字符不是整数,则返回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
posted @   張冰冰  阅读(552)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示