最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

SUNSET: DAWN3 打靶過(guò)程

2023-08-11 21:39 作者:RuneSpace  | 我要投稿

這臺(tái)靶機(jī)的攻擊過(guò)程主要是經(jīng)典的緩沖區(qū)溢出利用,與 OSCP 2021?版教材中的 Windows 緩沖區(qū)溢出章節(jié)的利用部分相似。因此,值得親自動(dòng)手實(shí)踐。

鑒于我的個(gè)人水平有限,如果在閱讀過(guò)程中遇到任何難以理解的部分,可以觀看紅隊(duì)筆記團(tuán)隊(duì)的 Brainpan1 的那期視頻來(lái)幫助理解,本文就是對(duì)它的拙劣模仿:「紅隊(duì)筆記」靶機(jī)精講:Brainpan1 - 緩沖區(qū)溢出典型利用過(guò)程

靶機(jī)地址:https://www.vulnhub.com/entry/sunset-dawn3,436/

信息收集

主機(jī)發(fā)現(xiàn)

這里用 Nmap 來(lái)發(fā)現(xiàn)目標(biāo)主機(jī)

發(fā)現(xiàn)目標(biāo)主機(jī) IP:192.168.10.48


端口掃描

確認(rèn)目標(biāo)之后,掃描它的所有 TCP 端口,檢查端口開(kāi)放情況

可以發(fā)現(xiàn)它開(kāi)放了兩個(gè)不常見(jiàn)的 TCP 端口:2100 和 6812。

那么就繼續(xù)進(jìn)行詳細(xì)掃描來(lái)探測(cè)端口的信息。

詳細(xì)掃描

接下來(lái)對(duì)這兩個(gè)端口進(jìn)行詳細(xì)的 TCP 端口掃描,嘗試識(shí)別開(kāi)放的端口、對(duì)應(yīng)的服務(wù)和版本信息,以及主機(jī)的操作系統(tǒng)信息。

  • 2100 是 FTP 端口,服務(wù)軟件版本是?pyftpdlib 1.5.6,里面有一個(gè)叫 dawn3.exe 的程序,并且允許匿名登錄。

  • 6812 端口沒(méi)掃描出什么信息,應(yīng)該不是常見(jiàn)的應(yīng)用。

漏洞掃描

嘗試?Nmap?的漏洞腳本掃描,看看能否得到一些信息

沒(méi)有得到更多的信息,那么就先登錄?FTP 看看


FTP

連接 ftp 服務(wù)

使用 anonymous 作為用戶名,密碼留空直接按回車(chē)登錄即可。

進(jìn)來(lái)之后發(fā)現(xiàn)確實(shí)只有一個(gè) dawn3.exe 的文件,那么就先用 binary?命令,將傳輸模式設(shè)置為二進(jìn)制模式后再用 get?命令將文件下載到本地

因?yàn)檫@里要下載的文件 dawn3.exe 是一個(gè)可執(zhí)行文件,它包含了二進(jìn)制數(shù)據(jù)。FTP 服務(wù)器以 ASCII 模式進(jìn)行傳輸時(shí)可能會(huì)導(dǎo)致文件內(nèi)容損壞,進(jìn)而影響文件的可執(zhí)行性。因此,通過(guò) binary?命令切換到二進(jìn)制模式后可以確保文件正確地傳輸并保持其完整性。

但是從紅線的部分可以看出來(lái),當(dāng)前靶機(jī)上的 ftp 服務(wù)已經(jīng)是以 binary?模式進(jìn)行的文件傳輸,所以這里不輸入 binary?命令也是可以的??


文件分析

在下載了文件之后,為了安全性和方便我們后續(xù)的分析,可以用下面幾個(gè)命令來(lái)檢查文件。

用 file?命令查看當(dāng)前文件類(lèi)型

從輸出中可以看到一些信息:

  • PE32 是一種用于 32 位 Windows 操作系統(tǒng)的可執(zhí)行文件格式

  • "(console)"?表示這是一個(gè)控制臺(tái)應(yīng)用程序

  • "Intel 80386",表示它是?x86 架構(gòu)

總的來(lái)說(shuō)這就是一個(gè) 32 位的 windows 控制臺(tái)程序。

用 binwalk?命令檢查是否有捆綁

能看到有一個(gè) PE 程序和三段加密的數(shù)據(jù)塊,不好確認(rèn)這些加密數(shù)據(jù)里是否有捆綁的程序。但是考慮到這是一臺(tái)靶機(jī)的緣故,所以也不用太擔(dān)心會(huì)出現(xiàn)捆綁惡意軟件的情況出現(xiàn)。

使用 strings?命令輸出可打印的字符

輸出了很多內(nèi)容,全部看下來(lái)會(huì)很費(fèi)時(shí)間。先往下走,如果發(fā)現(xiàn)走不通了再回頭來(lái)慢慢檢查。

運(yùn)行程序

既然 dawn3.exe 是 Windows 下的應(yīng)用程序,那么就把它拿到 Windows 下運(yùn)行看看

這里用的是另外一臺(tái) Windows 7 的虛擬機(jī)來(lái)運(yùn)行它,IP 是:192.168.10.49

雙擊運(yùn)行程序之后會(huì)彈出一個(gè)控制臺(tái)窗口,顯示正在等待傳入的連接

雖然沒(méi)明說(shuō)說(shuō)是服務(wù)是哪個(gè)端口,但是可以從靶機(jī)開(kāi)放的端口來(lái)猜測(cè),有極大可能就是?6812

用 netstat 命令查看這臺(tái) Windows 7 開(kāi)放了哪些端口

從輸出結(jié)果來(lái)看,確實(shí)可以發(fā)現(xiàn)開(kāi)啟了 6812 這個(gè)端口,佐證了我們之前的猜測(cè)。

嘗試用 nc 去連接這臺(tái) Windows 7?的 6812 端口,并且發(fā)送 123 和 1234

終端輸出 New connection,說(shuō)明二者成功建立了連接

雖然輸出的信息有問(wèn)題,但是不影響我們后續(xù)的操作。


緩沖區(qū)溢出

既然程序支持輸入數(shù)據(jù),我們可以嘗試輸入大量數(shù)據(jù),觀察是否會(huì)導(dǎo)致崩潰。如果程序崩潰了,可能存在緩沖區(qū)溢出漏洞。

識(shí)別緩沖區(qū)溢出

有兩種方法可以發(fā)送數(shù)據(jù)進(jìn)行測(cè)試。一種方法是編寫(xiě)腳本來(lái)向目標(biāo)端口發(fā)送數(shù)據(jù)。另一種方法是直接使用 nc?命令來(lái)發(fā)送數(shù)據(jù)。

如果選擇使用 Python 腳本來(lái)發(fā)送數(shù)據(jù),建議使用 Python2 進(jìn)行編寫(xiě)。因?yàn)槭褂?Python3 發(fā)送的數(shù)據(jù)可能會(huì)出現(xiàn)編碼問(wèn)題,導(dǎo)致利用失敗。(但我并不清楚其中的具體原因,希望有經(jīng)驗(yàn)的師傅可以在評(píng)論區(qū)里解答這個(gè)問(wèn)題。)

接下來(lái),我們可以直接通過(guò)命令行來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。從 100 開(kāi)始,逐漸增加數(shù)據(jù)量,如 200、400、600...... 直到目標(biāo)程序崩潰。

在嘗試發(fā)送 600 個(gè)字符 'A' 到目標(biāo)端口時(shí),目標(biāo)程序發(fā)生了崩潰。

綜上所述,我們目前得到了以下信息:

  • 目標(biāo)系統(tǒng)只開(kāi)放了兩個(gè) TCP 端口,分別是 FTP 和 dawn3.exe 程序所使用的端口。

  • 我們獲得了一個(gè)名為 dawn3.exe 的程序,并成功運(yùn)行它。該程序會(huì)在主機(jī)上開(kāi)啟一個(gè) 6812 端口,允許遠(yuǎn)程輸入數(shù)據(jù)。

  • 在向目標(biāo)端口輸入 600 個(gè)字符時(shí),程序發(fā)生崩潰。

綜合上述三點(diǎn)信息,可以推測(cè)這臺(tái)靶機(jī)的設(shè)計(jì)初衷可能是讓我們分析 dawn3.exe 程序,并利用緩沖區(qū)溢出漏洞來(lái)攻擊該靶機(jī)。


動(dòng)態(tài)分析

Immunity Debugger

這里用到一個(gè)叫 Immunity Debugger?的工具,其主要用途涵蓋了動(dòng)態(tài)分析、逆向工程以及漏洞研究等領(lǐng)域。該工具支持利用 Python 腳本編寫(xiě)自定義腳本,以執(zhí)行從簡(jiǎn)單的信息收集到復(fù)雜的分析操作等各種自動(dòng)化任務(wù)。

官網(wǎng)地址:https://www.immunityinc.com/products/debugger/

這個(gè)工具實(shí)質(zhì)上充當(dāng)了 CPU 和程序之間的一個(gè)中繼站,通過(guò)這個(gè)中繼站,我們能夠觀察、攔截和處理程序的行為。這讓我們有機(jī)會(huì)深入了解程序的運(yùn)作方式以及發(fā)現(xiàn)潛在的漏洞。

簡(jiǎn)單介紹下四個(gè)窗口的功能,當(dāng)使用它運(yùn)行程序后就會(huì)看到如下的界面


  • 左上角的窗口里顯示的是程序匯編代碼

  • 右上角的窗口里展示的是寄存器的信息

  • 左下交的窗口里展示的是內(nèi)存信息

  • 右下角的窗口里展示的是堆棧信息

定位 EIP 的位置

EIP(Extended Instruction Pointer)是 x86體系結(jié)構(gòu)中的一個(gè)寄存器,用于存儲(chǔ)下一條將要執(zhí)行的指令的內(nèi)存地址。

運(yùn)行 Immunity 后點(diǎn)擊文件圖標(biāo)(或者按 F3 用快捷鍵)來(lái)打開(kāi)目標(biāo)程序

打開(kāi)程序之后,點(diǎn)擊三角按鈕運(yùn)行程序(或者按 F9 用快捷鍵來(lái)運(yùn)行程序)

當(dāng)看到 dawn3.exe 顯示了提示信息,并且右下角的運(yùn)行狀態(tài)為 “Running” 時(shí)就代表運(yùn)行成功

那么此時(shí)再向目標(biāo)端口發(fā)送 600 個(gè) A

在執(zhí)行后,我們可以觀察到 EIP 寄存器的值變?yōu)榱?"41414141",這對(duì)應(yīng)于 ASCII 值為 41 的字符 "A"。

從這一步我們可以推斷,我們輸入的這 600 個(gè) "A" 已經(jīng)成功地溢出到了 EIP 寄存器中,導(dǎo)致 EIP 寄存器的值變?yōu)榱?"41414141",也就是 4 個(gè) "A",即 "AAAA"。

現(xiàn)在因?yàn)槲覀兂晒Φ匦薷牧?EIP?的值,所以可以確認(rèn)這個(gè)程序有緩沖區(qū)溢出漏洞的存在。

因此,我們的下一步目標(biāo)是確定需要輸入多少個(gè) "A" 才能溢出到 EIP 寄存器,從而修改 EIP 的值,這將影響 CPU 執(zhí)行的下一條指令。

進(jìn)行下一步操作之前,點(diǎn)擊叉來(lái)關(guān)閉當(dāng)前應(yīng)用(或者用快捷鍵 Alt+F2 來(lái)關(guān)閉)

成功運(yùn)行之后就可以進(jìn)行下一步操作了

這里會(huì)用到 msf 的一個(gè)工具:msf-pattern_create?,可以用它來(lái)生成一段連續(xù)不重復(fù)的字符串

然后將這段字符串發(fā)送給 windows7 的 6812 端口,也就是 dawn3.exe 的服務(wù)端口

發(fā)送之后,可以看到 EIP 的值變成了?"35724134",也就就是?"\x35\x72\x41\x34"

然后就可以用另一個(gè)工具 msf-pattern_offset?來(lái)尋找偏移量

它計(jì)算偏移量為 524,這意味著從第 524 個(gè)字符開(kāi)始,數(shù)據(jù)將會(huì)溢出到 EIP 寄存器中。

計(jì)算這個(gè)偏移量的過(guò)程如下:

  • 在 x86 架構(gòu)中,采用小端字節(jié)序。這意味著低位字節(jié)存儲(chǔ)在內(nèi)存的低地址處,而高位字節(jié)存儲(chǔ)在內(nèi)存的高地址處。因此,"\x35\x72\x41\x34" 的存儲(chǔ)順序?qū)嶋H上應(yīng)該是反過(guò)來(lái)的,它的值為:"\x34\x41\x72\x35"。

  • 將這個(gè) "\x34\x41\x72\x35" 轉(zhuǎn)換為 ASCII 碼,得到的是 "4Ar5"。這正好是我們使用 "msf-pattern_create -l 600" 生成的字符串的一部分。

  • 接下來(lái)就是是確定 "4Ar5" 這段字符串從源字符串的第幾個(gè)字符開(kāi)始出現(xiàn)的。將這段字符放入文本編輯器中,選中 "4Ar5" 之前的字符,就可以發(fā)現(xiàn)在它之前的字符串的總長(zhǎng)度是 524。

因此,我們可以嘗試發(fā)送如下內(nèi)容:

524 個(gè) "A" 作為填充,以達(dá)到溢出之前的目的,加上 4 個(gè) "B" 用來(lái)覆蓋 EIP 寄存器,再加上72 個(gè) "C" 用來(lái)填充堆棧

要注意的是,每次發(fā)送數(shù)據(jù)之前,都需要關(guān)閉 Immunity Debugger 中的 dawn3.exe?程序,并重新運(yùn)行它,確保程序的正常運(yùn)行。

發(fā)送完成后,我們可以觀察到 EIP 寄存器的值變?yōu)榱?"42424242",即 "BBBB",這表明我們成功地將數(shù)據(jù)精準(zhǔn)地溢出到了 EIP 寄存器中。

因此,我們現(xiàn)在成功地定位了 EIP 的位置,下一步就是測(cè)試 ESP 的容量。


測(cè)試 ESP 的容量

ESP(Extended Stack Pointer)是 x86架構(gòu)中的一個(gè)寄存器,通常被用于指示棧的當(dāng)前頂部。

在后續(xù)的操作中,我們將會(huì)把?Shellcode 存放在棧中。標(biāo)準(zhǔn)的 Shellcode 大小通常約為 500 個(gè)字節(jié)左右。因此,我們需要測(cè)試一下 ESP 寄存器的容量,看看是否足夠容納這 500 個(gè)字節(jié)的 Shellcode。如果程序沒(méi)有崩潰,就說(shuō)明可以繼續(xù)進(jìn)行下一步。

將 C 的數(shù)量改為 500,并發(fā)送數(shù)據(jù)到目標(biāo)地址:

500 個(gè) C 發(fā)送過(guò)去之后,可以看到堆棧從 "28FCF0"?開(kāi)始

從 "28FEDC"?結(jié)束

計(jì)算中間的字節(jié)數(shù)量

最終確認(rèn)有效空間為 492 字節(jié),是足夠我們存放 Shellcode 的。


查找不兼容字符(壞字符)

不同的程序存在不同的不兼容字符,我們需要找出那些不能被利用的不兼容字符,并將它們篩選出來(lái)。這樣可以確保在生成 Shellcode 時(shí)不會(huì)因?yàn)檫@些不兼容字符的存在而導(dǎo)致執(zhí)行異常。

舉例來(lái)說(shuō),"\x00"?就是一個(gè)壞字符,在系統(tǒng)底層中它被視為字符串的終止符或結(jié)束標(biāo)志。因此,如果 Shellcode 中包含 "\x00",就可能導(dǎo)致程序異常終止。

我們可以使用工具來(lái)生成所有可能的字符,然后用這些字符來(lái)進(jìn)行測(cè)試。以下鏈接提供了一個(gè)工具,可以生成不兼容字符,用于指導(dǎo)編碼器(如 shikata-ga-nai)將這些字符轉(zhuǎn)換為其他字符:

badchars:https://github.com/cytopia/badchars

將項(xiàng)目克隆到本地,然后進(jìn)入 badchars 目錄運(yùn)行程序

執(zhí)行程序之后,能看到他生成了除 "\x00"?以外的所有字符,下面就將它進(jìn)我們的測(cè)試命令中,發(fā)送給目標(biāo)

發(fā)送完成后追蹤 ESP 的內(nèi)存位置

可以看到從地址 "28FCF0" 開(kāi)始的 "01"、"02"、"03" 到最后的 "FF" ,并沒(méi)有缺失一個(gè)字符

這說(shuō)明目標(biāo)程序并沒(méi)有不兼容的字符,也就是沒(méi)有壞字符("\x00"?除外)

下面就可以定位 ESP 的位置了


定位 ESP 的位置

由于 ESP 寄存器中的地址是不確定的,我們需要找到 ESP 的地址,并將它覆蓋到 EIP 寄存器中。這樣,當(dāng) CPU 執(zhí)行到 EIP 所指向的地址時(shí),它實(shí)際上會(huì)執(zhí)行 ESP 寄存器中存儲(chǔ)的地址。而 ESP 指向的內(nèi)存位置已被我們的 Shellcode 所覆蓋,因此 CPU 將會(huì)執(zhí)行我們的 Shellcode。

為了找到 ESP 寄存器的地址,我們需要使用一個(gè)叫做 msf-nasm_shell?的工具。這個(gè)工具能夠?qū)R編語(yǔ)言代碼轉(zhuǎn)換為相應(yīng)的十六進(jìn)制格式,以便我們?cè)诼┒蠢弥惺褂谩?/span>

在上面的內(nèi)容中,我們對(duì) "jmp esp" 的十六進(jìn)制格式進(jìn)行了查詢,發(fā)現(xiàn)它十六進(jìn)制格式為?FFE4,相應(yīng)的操作碼為 "\xFF\xE4"。

"jmp esp" 是一個(gè)匯編指令,其作用是跳轉(zhuǎn)到存儲(chǔ)在 ESP 寄存器(棧指針)中的地址所指向的位置,也就是我們通常用來(lái)存放 Shellcode 的位置。

接下來(lái),我們將在 "dawn3.exe" 這個(gè)程序中尋找包含 "jmp esp" 指令的位置,從而獲取 ESP 寄存器所指向的位置。

需要注意的是,在尋找時(shí)我們不能直接使用 "jmp esp" 作為關(guān)鍵字,而是要使用其對(duì)應(yīng)的操作碼:"\xFF\xE4"。

此時(shí),我們需要使用 Immunity Debugger 的名為 "mona" 的插件。默認(rèn)情況下該插件是未安裝的,需手動(dòng)下載并安裝。

然后將里面的?mona.py 復(fù)制到:

C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands?這個(gè)目錄里

再次啟動(dòng) Immunity 即可成功加載 mona

在 Immunity?里啟動(dòng)?dawn3.exe?之后,通過(guò)左下角輸入命令,列出所有的模塊

執(zhí)行成功后就能看到類(lèi)似下面的頁(yè)面

從 Module info 這個(gè)列表中可以看出來(lái)有四種安全機(jī)制:

  1. Rebase(重定位):重定位是一種操作系統(tǒng)和程序加載器的特性,允許將共享的庫(kù)和可執(zhí)行文件加載到內(nèi)存中的不同位置,以防止地址空間的沖突。重定位可以提高系統(tǒng)的安全性,防止一些攻擊,如基于地址的攻擊。

  2. SafeSEH(安全異常處理鏈表):在 Windows 操作系統(tǒng)中,SafeSEH 是一種保護(hù)機(jī)制,用于檢測(cè)和阻止異常處理鏈表被利用用于漏洞利用。它可以幫助防止 SEH(Structured Exception Handling)覆蓋攻擊。

  3. ASLR(地址空間布局隨機(jī)化):ASLR 是一種操作系統(tǒng)的安全特性,通過(guò)隨機(jī)化加載程序和庫(kù)的內(nèi)存位置,來(lái)防止攻擊者預(yù)測(cè)這些位置。這可以減少緩沖區(qū)溢出和代碼注入等攻擊的成功率。

  4. NXCompat(不可執(zhí)行內(nèi)存保護(hù)):NXCompat 是一種硬件和操作系統(tǒng)級(jí)別的安全特性,阻止內(nèi)存中的數(shù)據(jù)被當(dāng)作代碼執(zhí)行。這可以防止緩沖區(qū)溢出等漏洞被利用來(lái)執(zhí)行惡意代碼。

但這四種安全機(jī)制對(duì)于 dawn3.exe 來(lái)講都是 False,也就是沒(méi)有啟用,所以我們可以繼續(xù)進(jìn)行操作。

確定了可以繼續(xù)利用之后就可以開(kāi)始找目標(biāo)的 "jmp esp"?的位置了

執(zhí)行命令后,我們找到了一個(gè)指針的信息,可以從中看到該指針指向地址為:"0x52501513"。

現(xiàn)在,我們可以使用這個(gè)地址來(lái)覆蓋 EIP 寄存器,從而引導(dǎo) CPU 執(zhí)行棧中的 Shellcode。

但需要注意的是,在 x86 架構(gòu)中采用的是小端字節(jié)序。因此,我們需要將這個(gè)地址反轉(zhuǎn),變?yōu)?"13155052",即:"\x13\x15\x50\x52"。

那么現(xiàn)在我們的發(fā)送的數(shù)據(jù)邏輯如下:


生成 Shellcode

這里用 msfvenom 生成一個(gè) windows 的 Shellcode

這個(gè)命令生成了一個(gè)大小為 351 字節(jié)的 Shellcode??紤]到堆??臻g有 492 字節(jié),這個(gè)大小是足夠的。

然而,需要注意的是,"shikata_ga_nai" 編碼器會(huì)在執(zhí)行代碼之前生成一個(gè)用于解碼的解碼器,因此會(huì)占用一些字節(jié)。為了給解碼器預(yù)留空間,這里使用 "\x90" 字節(jié)作為填充,確保有足夠的空間供解碼器使用。如果不預(yù)留空間,后續(xù)的 Shellcode 可能有部分會(huì)被覆蓋,導(dǎo)致無(wú)法正常執(zhí)行。

"\x90" 表示 NOP 指令,在匯編語(yǔ)言中,NOP 指令通常用作占位符或延時(shí)操作。在許多情況下?NOP 指令不會(huì)對(duì)程序的執(zhí)行產(chǎn)生實(shí)際影響,它主要用于填充指令序列,以實(shí)現(xiàn)指令地址對(duì)齊或緩解特定條件。

然后就可以將生成的 Shellcode 和填充的 NOP 指令組合起來(lái)。

數(shù)據(jù)發(fā)送之后就可以成功地收到反彈回來(lái)的 Shell。測(cè)試結(jié)束,接下來(lái)就是對(duì)靶機(jī)進(jìn)行漏洞利用了。


漏洞利用

如果不出意外的話,只需將 Shellcode 這部分從 Windows 改為 Linux 即可成功利用緩沖區(qū)溢出漏洞獲得靶機(jī)上的立足點(diǎn)。

生成 Linux 下的 Shellcode

這次 Shellcode 只有 95 字節(jié),比 Windows 下的要小不少。

將它組合進(jìn)命令,發(fā)送給靶機(jī)

不出意外的成功反彈回來(lái)了一個(gè) Shell,并且在檢查當(dāng)前用戶身份的時(shí)候,發(fā)現(xiàn)反彈回來(lái)的 Shell?就是?root 權(quán)限,省去了提權(quán)的部分。



用?"crontab -l"?命令可以發(fā)現(xiàn)計(jì)劃任務(wù)中有一個(gè)每分鐘都用 wine 來(lái)運(yùn)行 dawn3.exe 這個(gè)程序的任務(wù)

這樣就可以解釋為什么 exe 文件可以在 linux 上運(yùn)行了。


最后,歡迎各位師傅捉蟲(chóng)??

SUNSET: DAWN3 打靶過(guò)程的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
峡江县| 贺兰县| 翁源县| 连江县| 房产| 长丰县| 黄石市| 类乌齐县| 曲靖市| 内丘县| 贵州省| 彰化市| 佛山市| 清流县| 宜君县| 当雄县| 乌鲁木齐县| 清新县| 佛冈县| 清流县| 尚义县| 囊谦县| 沅江市| 江津市| 若尔盖县| 佳木斯市| 正镶白旗| 和顺县| 林甸县| 张掖市| 晋城| 高青县| 思茅市| 武穴市| 洛宁县| 东至县| 太原市| 厦门市| 烟台市| 利津县| 新密市|