首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cgi通用sql注入问题

cgi通用sql注入问题
EN

Stack Overflow用户
提问于 2013-08-23 21:46:07
回答 2查看 4.5K关注 0票数 1

当出现以下漏洞时,我正在扫描一个站点: CGI通用SQL注入

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

因此,我继续阅读,发现这个漏洞位于这段代码中:

使用POST HTTP方法,Nessus发现:

  • 以下资源可能容易受到SQL注入的影响:
  • _codeTextBox CGI的“/LoginTeacherForm.aspx”参数: loginButton=Login&_VIEWSTATE=dDwtMTU2NDIxMDkwN Ts7Pg%3d%3d&btnChangePassword=Wijzig%20Pincode&_pinCodeTextBox=&_codeTex tBox=‘+ /LoginTeacherForm.aspx (int,/LoginTeacherForm.aspx(varchar,0x7b5d))

-输出

代码语言:javascript
运行
复制
 Exception Details: System.Data.SqlClient.SqlException: String or
binary data would be truncated.
The statement has been terminated. 

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

因此,我的问题是,攻击如何才能真正侵入网站,绕过登录等等(当然,只是为了教育目的)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-09 16:18:41

错误System.Data.SqlClient.SqlException表示SQL语句中的错误。这意味着在放入查询之前,存储在_codeTextBox参数中的值不是经验证或其他经过消毒的值。

这将根据其返回值的查询和逻辑而产生不同的含义。如果不彻底了解web应用程序,就不可能确定最坏的情况。我只想说,这个问题应该由发展商来解决。幸运的是,它通常很容易修复一旦确定。

在本例中,_codeTextBox参数似乎被传递给convert函数。我怀疑有人能利用这个。但是,这表明不安全的编码实践可能出现在Nessus不知道的其他领域。阅读下面的更多信息。

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

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

代码语言:javascript
运行
复制
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或更糟的内容。

预期查询:

代码语言:javascript
运行
复制
 SELECT account_balance FROM user_data WHERE user_name = someuser

坏查询:

代码语言:javascript
运行
复制
 SELECT account_balance FROM user_data WHERE user_name = '' OR 1=1

OWASP建议采取以下防御措施。你的情况将决定什么是合适的:

一级防御

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

附加防御

  • 还强制执行:最少特权
  • 还执行:白名单输入验证

您确实需要查看OWASP的站点,并阅读更多关于SQL注入的信息。

票数 0
EN

Stack Overflow用户

发布于 2013-08-27 11:32:35

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18412362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档