Mysql蜜罐:攻擊者信息拿來(lái)吧你

本文僅作學(xué)習(xí)記錄,如有侵權(quán),請(qǐng)聯(lián)系刪除?。?!

前言:


遙想去年7月,一個(gè)意外的電話打過(guò)來(lái),對(duì)話內(nèi)容大致如下:

不愿意透露姓名的安全從業(yè)者:請(qǐng)問(wèn)你是這個(gè)手機(jī)號(hào)的機(jī)主xxx嗎?
機(jī)主xxx:大叔你誰(shuí)啊。你怎么知道我的手機(jī)號(hào)和姓名
不愿意透露姓名的安全從業(yè)者:你今年4月份某日下午是不是攻擊了某省政府機(jī)構(gòu)
機(jī)主xxx:我不是,我沒(méi)有,你胡說(shuō)
不愿意透露姓名的安全從業(yè)者:你再仔細(xì)想想,你踩蜜罐了,最好老實(shí)交代,后面可以爭(zhēng)取寬大處理
機(jī)主xxx:哦豁完蛋

當(dāng)然最后解釋清楚了,大家相安無(wú)事,人生第一次踩蜜罐真是恐怖如斯。假設(shè)你在內(nèi)網(wǎng)發(fā)現(xiàn)或掃到了一些MySQL的弱口令,你會(huì)去連嗎?

Mysql任意文件讀取:


mysql蜜罐通過(guò)搭建一個(gè)簡(jiǎn)單的mysql服務(wù),如果攻擊者對(duì)目標(biāo)客戶進(jìn)行3306端口爆破,并且用navicat等工具連接蜜罐服務(wù)器,就可能被防守方讀取本地文件,包括微信配置文件和谷歌歷史記錄等等,這樣很容易被防守方溯源。

mysql中有一個(gè)load data local infile函數(shù)能夠讀取本地文件到mysql數(shù)據(jù)庫(kù)中。

LOAD DATA INFILE語(yǔ)句用于高速地從一個(gè)文本文件中讀取行,并寫(xiě)入一個(gè)表中。文件名稱必須為一個(gè)文字字符串。LOAD DATA INFILESELECT ... INTO OUTFILE 的相對(duì)語(yǔ)句。把表的數(shù)據(jù)備份到文件使用SELECT ... INTO OUTFILE,從備份文件恢復(fù)表數(shù)據(jù),使用 LOAD DATA INFILE

這個(gè)功能默認(rèn)是關(guān)閉的,查看是否開(kāi)啟:

show global variables like 'local_infile';
set global local_infile=1;  # 開(kāi)啟

嘗試讀取本地的C盤(pán)目錄下的win.ini文件:

load data local infile 'c:/windows/win.ini' into table test1 fields terminated by '\n';

流量分析:


  1. 第一個(gè)Greeting包返回了服務(wù)端的版本等信息:
  1. 第二個(gè)包為客戶端發(fā)起登錄請(qǐng)求:
  1. 第三個(gè)包,客戶端發(fā)送了請(qǐng)求:SET NAMES utf8mb4

補(bǔ)充說(shuō)明:從MySQL 5.5開(kāi)始,可以支持4個(gè)字節(jié)UTF編碼(utf8mb4 ),一個(gè)字符能夠支持更多的字符集,也能夠支持更多表情符號(hào)。utf8mb4兼容utf8,且比utf8能表示更多的字符。

  1. 連接建立之后客戶端向服務(wù)端發(fā)起查詢請(qǐng)求:

接下來(lái)服務(wù)端回復(fù)一個(gè)Response TABULAR,指定要查詢的文件:

這里000001是指數(shù)據(jù)包的序號(hào),fb是指包的類(lèi)型,最后一個(gè)框是指要讀取的文件名,而最前面的13是指文件名的長(zhǎng)度(從fb開(kāi)始,16進(jìn)制),所以payload為:chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename

最后客戶端向服務(wù)器發(fā)送文件內(nèi)容:

從上面過(guò)程可以看出,在客戶端向服務(wù)端發(fā)起查詢后,服務(wù)端會(huì)返回一個(gè)Response TABULAR的響應(yīng)包。而如果在這個(gè)數(shù)據(jù)包中指定文件路徑,就可以讀取客戶端相應(yīng)的文件。而服務(wù)端可以在回復(fù)任何客戶端的請(qǐng)求時(shí)返回Response TABULAR響應(yīng)包,這樣就可以在客戶端登錄成功后,發(fā)送Response TABULAR響應(yīng)包,讀取客戶端的相關(guān)信息。

利用方法:


當(dāng)攻擊者用爆破mysql密碼的掃描器掃描到我們的mysql并連接上的時(shí)候,客戶端(攻擊者)會(huì)自動(dòng)發(fā)起一個(gè)查詢,我們(服務(wù)端)會(huì)給與一個(gè)回應(yīng),我們?cè)诨貞?yīng)的數(shù)據(jù)包中加入load data local infile讀取攻擊者的本地文件到我們數(shù)據(jù)庫(kù)中,達(dá)到反制的目的。

在能夠?qū)崿F(xiàn)任意文件讀取的情況下,我們的目的是盡可能獲取攻擊者的個(gè)人信息。在Windows中,Windows下,微信默認(rèn)的配置文件放在:C:\Users\username\Documents\WeChat Files\All Users\config\config.data 中含有微信ID及網(wǎng)絡(luò)名稱:

而獲取該文件還需要知道電腦用戶名,一般用過(guò)一段時(shí)間的電腦在 C:\Windows\PFRO.log 中較大幾率能找到用戶名。

獲取了微信ID可以添加好友,參考代碼:

import qrcode
from PIL import Image
import os

# 生成二維碼圖片
# 參數(shù)為wxid和二維碼要保存的文件名
def make_qr(str,save):
    qr=qrcode.QRCode(
        version=4,  #生成二維碼尺寸的大小 1-40  1:21*21(21+(n-1)*4)
        error_correction=qrcode.constants.ERROR_CORRECT_M, #L:7% M:15% Q:25% H:30%
        box_size=10, #每個(gè)格子的像素大小
        border=2, #邊框的格子寬度大小
    )
    qr.add_data(str)
    qr.make(fit=True)

    img=qr.make_image()
    img.save(save)

# 讀取到的wxid
wxid = 'wxid_u3mntwd4glaq22'
qr_id = 'weixin://contacts/profile/' + wxid
make_qr(qr_id,'demo.jpg')

運(yùn)行代碼生成了對(duì)方二維碼,掃碼可以添加對(duì)方好友,由于最近wxid規(guī)則改版,所以掃碼添加會(huì)提示當(dāng)前頁(yè)面無(wú)法顯示。這時(shí)可以通過(guò)讀取.從C:/Users/用戶名/Documents/WeChat Files/wx_id/config/AccInfo.dat,獲取微信號(hào)、綁定的手機(jī)號(hào)、郵箱等信息。

Github上已經(jīng)有大佬寫(xiě)好了相關(guān)利用代碼,項(xiàng)目地址:https://github.com/qigpig/MysqlHoneypot

但由于只能獲取微信id以及生成的二維碼,將相關(guān)代碼進(jìn)行補(bǔ)充,實(shí)現(xiàn)效果如下:

除了通過(guò)讀取微信配置文件,還可以去讀取Chrome的賬號(hào)、歷史記錄等

C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/Login Data
C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/History

參考如下:


MYSQL蜜罐反制
Mysql溯源-任意文件讀取
MySQL蜜罐獲取攻擊者微信ID

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容