当出现以下漏洞时,我正在扫描一个站点: CGI通用SQL注入
nessus may表示,攻击者可能利用此漏洞绕过身份验证、读取机密数据、修改远程数据库,甚至控制远程操作系统。
因此,我继续阅读,发现这个漏洞位于这段代码中:
使用POST HTTP方法,Nessus发现:
-输出
Exception Details: System.Data.SqlClient.SqlException: String or
binary data would be truncated.
The statement has been terminated.
但是我想知道攻击者如何利用这个漏洞,因为当我粘贴这段代码时,它只会给出错误。
因此,我的问题是,攻击如何才能真正侵入网站,绕过登录等等(当然,只是为了教育目的)
发布于 2013-09-09 16:18:41
错误System.Data.SqlClient.SqlException
表示SQL语句中的错误。这意味着在放入查询之前,存储在_codeTextBox
参数中的值不是经验证或其他经过消毒的值。
这将根据其返回值的查询和逻辑而产生不同的含义。如果不彻底了解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建议采取以下防御措施。你的情况将决定什么是合适的:
一级防御
附加防御
发布于 2013-08-27 11:32:35
它看起来像是Nessus请求导致的假阳性,导致您的页面在字段中插入了过长的字符串。Nessus检测到该错误是SQL服务器错误,并表示它可能是SQL注入漏洞。
要测试自己,请尝试将_codeTextBox=
设置为单引号的请求,以查看是否仍然得到SqlException
。如果是这样,请将其修改为两个单引号,如果错误消失,您可能会受到攻击。
https://stackoverflow.com/questions/18412362
复制相似问题