【问题标题】:cgi generic sql injection problemscgi通用sql注入问题
【发布时间】:2013-08-23 21:46:07
【问题描述】:

我正在扫描一个站点时弹出以下漏洞:CGI Generic SQL Injection

nessus 表示,攻击者可能会利用此漏洞绕过身份验证、读取机密数据、修改远程数据库,甚至控制远程操作系统。

于是我继续阅读,发现漏洞就在这段代码中:

使用 POST HTTP 方法,Nessus 发现:

  • 以下资源可能易受 SQL 注入攻击:

  • /LoginTeacherForm.aspx CGI 的“_codeTextBox”参数:

    /LoginTeacherForm.aspx [loginButton=Login&_VIEWSTATE=dDwtMTU2NDIxMDkwN Ts7Pg%3d%3d&btnChangePassword=Wijzig%20Pincode&_pinCodeTextBox=&_codeTex tBox='+convert(int,convert(varchar,0x7b5d))+']

-------- 输出--------

 Exception Details: System.Data.SqlClient.SqlException: String or
binary data would be truncated.
The statement has been terminated. 

但我想知道攻击者如何利用此漏洞,因为当我粘贴那段代码时,它只会给我错误。

所以我的问题是,攻击如何能够真正侵入网站并绕过登录等。(当然仅用于教育目的)

【问题讨论】:

标签: sql security code-injection nessus


【解决方案1】:

看起来像是 Nessus 请求导致您的页面在字段中插入太长的字符串而导致的误报。 Nessus 检测到该错误是一个 SQL 服务器错误,并表示它可能是一个 SQL 注入漏洞。

要测试自己,请尝试将_codeTextBox= 设置为单引号的请求,看看您是否仍然收到SqlException。如果是这样,请将其修改为两个单引号,如果错误消失,您可能很容易受到攻击。

【讨论】:

    【解决方案2】:

    错误System.Data.SqlClient.SqlException 表示您的SQL 查询语句中存在错误。这意味着存储在_codeTextBox 参数中的值不是validated 或在被放入查询之前以其他方式进行清理。

    根据查询和围绕其返回值的逻辑,这会产生不同的影响。如果不彻底了解 Web 应用程序,就不可能确定最坏的情况。可以这么说,这个问题应该由开发人员解决。幸运的是,一旦识别出来,通常很容易修复。

    在这种情况下,看起来_codeTextBox 参数正在传递给convert 函数。我怀疑任何人都可以利用这一点。但是,这表明不安全的编码实践可能出现在 Nessus 不知道的其他领域。阅读下文了解更多信息。

    当程序员简单地将值与 SQL 查询字符串连接时,我经常看到这种情况:

    不安全示例 (java)(来源 OWASP

    String query = "SELECT account_balance FROM user_data WHERE user_name = "
      + request.getParameter("customerName");
    
    try {
        Statement statement = connection.createStatement( … );
        ResultSet results = statement.executeQuery( query );
    }
    

    由于该值只是简单地附加到查询的末尾,因此用户可以更改查询以执行恶意操作,例如以任何用户身份登录或查看所有交易。在上面的示例中,用户可以将customer name 参数更改为'' or 1=1 或更糟的值。

    预期查询:

     SELECT account_balance FROM user_data WHERE user_name = someuser
    

    错误查询:

     SELECT account_balance FROM user_data WHERE user_name = '' OR 1=1
    

    OWASP 推荐以下防御措施。您的情况将决定什么是合适的:

    主要防御

    1. 使用准备好的语句(参数化查询)
    2. 使用存储过程
    3. 转义所有用户提供的输入

    附加防御

    • 同时执行:最小权限
    • 同时执行:白名单输入验证

    您确实需要查看OWASP 的网站并阅读有关SQL injection 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2013-02-15
      相关资源
      最近更新 更多