本文最后更新于60 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、查看网页
二、分析代码
<?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";
}
?> let's get some php
1.第一个条件
if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a']))
- POST传参a不为空
- 正则匹配,参数a中不能有数字,可以使用数组
- intval转换后必须是非零值
- 绕过方法:可以使用十六进制(如’0xf’)或科学计数法(如’1e3’)
2.第二个条件
if(isset($_POST['b1'])&&$_POST['b2'])
- b1和b2值存在
3.第三个条件
if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2']))
- 需要两个不相等的参数b1和b2
- 它们的MD5值必须完全相等(注意这里用的是
===
),可以数组绕过,0e绕过
4.第四个条件
if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2']))
- 需要两个不同的字符串参数c1和c2
- 必须是字符串类型
- MD5值必须相等(注意这里用的是
==
)
得出结果:
a[]=1&b1[]=1&b2[]=2&c1=QNKCDZO&c2=s878926199a
三、获取flag
四、总结
- 数组绕过