设置SQL注入蜜罐的建议

信息安全 sql注入 研究 蜜罐
2021-08-22 09:27:44

我刚刚偶然发现一个容易受到 SQL 注入攻击的网站(https://stackoverflow.com/questions/6181248/is-this-site-vulnerable-to-an-sql-injection-attack)。

这让我很好奇尝试了什么以及攻击尝试在某个网站上出现的频率。

所以我认为在我的服务器上设置一个蜜罐来查看“破解者”是否/多久/使用什么技术尝试访问我的 SQL 数据会很酷。

我能想到一些基本的东西来引诱他们,比如:

/login.php/asp 网址

/adminlogin.php/asp 网址

搜索表单

?id=111 网址

尝试注入一些 SQL 时出现一些虚假的 SQL 错误。

有人有更多/更好的建议/想法/什么来设置一个用于 SQL 注入的蜜罐吗?

3个回答

我可以建议一些专为与您描述的完全一样的事情设计的蜜罐:

解决 sql 注入问题的最好方法是使用参数化查询,这可以通过 PDO 或 MySQLi 之类的库来完成。必须实际修补 Web 应用程序中的漏洞。我建议使用像Sitewatch这样的免费服务或像wapiti这样的开源工具这些解决方案将检测到的不仅仅是应用程序中的 sql 注入。

如果您想锁定一个可能不安全的 Web 应用程序,那么您应该使用 Web 应用程序防火墙或 WAF。Mod_Security 是一个不错的选择,它免费且开源。但这不是已知漏洞的替代品,它只是另一层。

WAF 由数千个正则表达式组成,它们会寻找讨厌的输入。它们可以配置为在请求触及您的 Web 应用程序之前记录攻击或丢弃请求。这不仅仅是 SQL 注入和 XSS,还研究了许多不同类型的 Web 应用程序攻击,例如OWASP 前 10 名中涵盖的攻击。

我在这里找到了一个非常有趣的蜜罐示例。
http://www.sharjeel.2scomplement.com/sql-injection-honeypots

它根本不使用 SQL 或任何 SQL 服务器,而只是这个 php 代码:

// SQL Injection 'TEST'
if( strpos($username,"'") !== false || strpos($password,"'") !== false )
{
    $sqlInjectionError = "
            <p><font size=2>Microsoft ODBC MySQL Drivers Message:</font></p>
            <p><B>Error in the query:</B></p>
            <p>[Microsoft:ODBC 1045] SELECT UlluKaPatha FROM UlluKePathay WHERE
            GadhayKaRollNo = '".$_POST['username']."' 
            AND GadhayKaPassword = '".$_POST['password']."'
            ";
}
// End SQL Injection 'TEST'

例如,如果有人提供了用户名admin和密码x' OR '1'='1,他得到了回应:

Microsoft ODBC MySQL 驱动程序消息:

查询错误:[Microsoft:ODBC 1045] SELECT UlluKaPatha FROM UlluKePathay WHERE GadhayKaRollNo = 'admin' AND GadhayKaPassword = 'x' OR '1'='1'

如果您将输入(以安全方式)记录到数据库中,它可能会生成有趣的统计信息,说明在不安全的系统上使用了哪些攻击。