
OpenSIS SQLi Injection
OpenSIS 认证 SQL 注入
Ajax.php、ForWindow.php、ForExport.php、Modules.php、functions/HackingLogFnc.php 中存在 SQL 注入漏洞。该漏洞影响 OpenSis Community Edition 9.1 至 8.0,以及可能更低的版本。
以 Ajax.php 为例,可以看到当检测到恶意活动时,IP 可以被记录并插入数据库。需要注意的一点是,如果发送了“X-Forwarded-For”头,应用程序将使用该值而不是 $_SERVER['REMOTE_ADDR'] 的值。由于 $ip 直接拼接到 SQL 语句中且未经任何形式的清理,因此可以执行 SQL 注入。

在下面的概念验证中,注入载荷 ' AND SLEEP(7) AND '1'='1 导致应用程序休眠 7 秒,表明 SQL 注入成功。

检查数据库日志进一步证明了这一漏洞。

最后,使用自动化 SQL 注入工具 SQLMap 确认了该漏洞。

受影响的代码行被发现直接将 $_SERVER['HTTP_X_FORWARDED_FOR'] 的值附加到 SQL 语句中。
• Ajax.php(第 260 至 275 行)
• Modules.php(第 1005 至 1023 行)
• ForExport.php(第 135 至 147 行)
• ForWindow.php(第 124 至 136 行)
• functions/HackingLogFnc.php(第 47 至 68 行)
• 不要通过将用户输入直接拼接到 SQL 语句中来动态构造 SQL 查询,而应使用参数化查询(也称为预编译语句)。参数化查询将 SQL 代码与用户输入分离,显著降低 SQL 注入攻击的风险。
• 实施健壮的输入验证和清理技术,确保用户提供的数据符合预期格式且不包含恶意 SQL 代码。验证输入数据类型、长度和格式,并通过转义特殊字符或使用白名单仅允许特定字符或模式来清理输入。
• 不要使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 来记录 IP。