gpt4 book ai didi

php - 这个 Joomla 密码重置漏洞是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 01:08:41 25 4
gpt4 key购买 nike

我们的一个 Joomla 网站被黑了,攻击者用他丑陋的页面替换了我模板的 index.php - “被黑”标题和一些红色的阿拉伯文行。显然,攻击者知道如何重置用户表中第一个用户( super 用户)的密码(以及电子邮件地址),并获得对管理面板的访问权限。

快速恢复后,我搜索了网络以防止将来的黑客攻击,并找到了这篇文章:Security News-[20080801] - Core - Password Remind Functionality

我把那篇文章中的代码用来修补我的 reset.php

但是我还是有疑问。这篇文章没有说明漏洞利用的真正原理。但是我在互联网上的一些地方看到这是 reset.php 中的一个 SQL 注入(inject)漏洞

执行SQL检查token的行:

$db->setQuery('SELECT id FROM #__users
WHERE block = 0
AND activation = '.$db->Quote($token));

正在使用 JDatabase::Quote() 方法。那么一些SQL注入(inject)是如何成为可能的。 Quote 不是应该防止 SQLi 吗?被攻击站点的Joomla版本为1.5.18。

另一个疑点是补丁检查只验证字符串长度为32,如何防止漏洞利用。

我想知道如果 SQLi 真的可以通过 Quote 方法,那么长度为 32 的字符串是否足以绕过 WHERE 子句?

    if(strlen($token) != 32) {
$this->setError(JText::_('INVALID_TOKEN'));
return false;
}

最佳答案

问题是 token 值根本没有经过验证,只是从非字母数字字符中清除了。和 exploit只是输入一个被过滤掉的 ',这样有效的标记值就是一个空字符串,结果如下:

SELECT id FROM #__users WHERE block = 0 AND activation = ""

关于php - 这个 Joomla 密码重置漏洞是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089774/

25 4 0
文章推荐: swift - 货币格式的 NSNumberFormatter.number 在设备中不起作用但在模拟器中起作用
文章推荐: java - 为什么 List 不是 List 的子类型?
文章推荐: Swift:覆盖属性类