拿到题目后就一个空白页面,没啥特别的东西,传入参数也没啥变化
在查看源码无果后在响应头的找到了一份隐藏信息,应该就是页面对应的后端代码,我们提交的数据就是变量$pass的值
PHP中的MD5函数的意思是,将$pass变量的值转化16字符二进制格式的md5值
实在没有头绪,在查看wp后得知,可以使用ffifdyop绕过,绕过原理是:
ffifdyop 这个字符串被 md5 转换了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ' or '6
而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from 'admin' where password='' or '6xxxxx',等价于 or 一个万能密码,可以绕过md5()函数。
至于为啥不用其他的,我也不了解,毕竟要证实其他的还比较麻烦,就用这个吧
提交后来到了另外一个界面,依旧没啥提示
源码中有一串PHP代码
$a,$b是两个GET传入的参数
如果$a 不等于$b 并且MD5编码后的$a 等于MD5编码后的$b
数组法
因为md5在解析数组时会返回false,所以我们可以GET传参两个数组就可以绕过了
如果是强类型比较就不能使用科学计数法绕过
?a[]=1&b[]=2
科学计数法
还有一种方法是可以传入两个md5加密后是0e开头的字符串,需要注意的地方是,这个以0e开头的字符串只能是纯数字,这样php在进行科学计算法的时候才会将它转化为0;大致有以下几个
byGcY
0e591948146966052067035298880982
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s214587387a
0e848240448830537924465865611904
240610708
0e462097431906509019562988736854
903251147
0e174510503823932942361353209384
绕过成功后又是一个php代码
关闭错误提示
导入flag.php文件
如果POST传参的param1不等于POST传参的param2
且强类型比较对应的MD5值相等
打印flag
这个也很好绕过,就是利用POST传参数组进行绕过
抓包后几个更改请求方式再传值