skip to content
Yupy Syntax

HackTheBox - Agile

/ 4 min read

Last Updated:

HackTheBox Agile Write Up

Information Gathering

Nmap Scan

Seperti biasa kami memulai dengan Nmap scanning untuk melihat port port yang terbuka pada web service alt text

Tampilan utama website

Untuk tampilan utama website terdapat menu login ini memungkinkan kita akan mengexploit disini alt text

Scanning dengan Dirsearch

Kami mencoba scanning directory dengan dirsearch untuk melihat hidden directory. disini kami menemukan 3 directory yang terkena hidden alt text

Redirect

kami mencoba membuka directory download dan hasil membuka kita teredirect kedalam panel login alt text

Register

kami mencoba mendaftar dengan random username dan password dan hasilnya muncul error, dari sini kami tahu bahwa website ini dioperasikan dengan python alt text

Setelah mencoba coba kita berhasil mendaftar menggunakan nama username dan password alt text

Disini terdapat add password dan export menu, website ini seperti password manager bisa menyimpan username dan password. alt text alt text

Exploitation

Export

Berikut ini ketika kita mendownload file export alt text

Exploit LFI

Dari downloadan file export kami mencoba mengexploit dengan payload LFI, karena parameter download= kemungkinan ada kerentanan LFI alt text

Ketika kita menggunakan payload /etc/passwd kita mendapatkan seluruh isi yang ada di /etc/passwd website ini pasti rentan terhadap serangan Local File Inclusion alt text

IDOR

Kami disini juga menemukan IDOR yang terdapat pada url /vault alt text

untuk menexploit bahwa website ini terdapat kerentanan IDOR kita mengubah pada parameter id 10 menjadi 11 seperti gambar dibawah, disini kita dapat melihat username dan password. alt text alt text

Post Exploitation

Exploit

Selanjutnya kita mencoba menggunakan payload LFI untuk melihat file file sensitive yang terdapat di web service tersebut alt text

Kami mendapatkan informasi senstive mysql yang terdapat pada /app/config_prod.json alt text

Dan disini terdapat informasi web service dijalankanya dan ada parameter yang memungkinan penyerang menggunakan directory tersebut seperti serangan IDOR alt text

python
import flask
import subprocess
from flask_login import login_required, current_user
from superpass.infrastructure.view_modifiers import response
import superpass.services.password_service as password_service
from superpass.services.utility_service import get_random
from superpass.data.password import Password
blueprint = flask.Blueprint('vault', __name__, template_folder='templates')
@blueprint.route('/vault')
@response(template_file='vault/vault.html')
@login_required
def vault():
passwords = password_service.get_passwords_for_user(current_user.id)
print(f'{passwords=}')
return {'passwords': passwords}
@blueprint.get('/vault/add_row')
@response(template_file='vault/partials/password_row_editable.html')
@login_required
def add_row():
p = Password()
p.password = get_random(20)
return {"p": p}
@blueprint.get('/vault/edit_row/<id>')
@response(template_file='vault/partials/password_row_editable.html')
@login_required
def get_edit_row(id):
password = password_service.get_password_by_id(id, current_user.id)
return {"p": password}
@blueprint.get('/vault/row/<id>')
@response(template_file='vault/partials/password_row.html')
@login_required
def get_row(id):
password = password_service.get_password_by_id(id, current_user.id)
return {"p": password}
@blueprint.post('/vault/add_row')
@login_required
def add_row_post():
r = flask.request
site = r.form.get('url', '').strip()
username = r.form.get('username', '').strip()
password = r.form.get('password', '').strip()
if not (site or username or password):
return ''
p = password_service.add_password(site, username, password, current_user.id)
return flask.render_template('vault/partials/password_row.html', p=p)
@blueprint.post('/vault/update/<id>')
@response(template_file='vault/partials/password_row.html')
@login_required
def update(id):
r = flask.request
site = r.form.get('url', '').strip()
username = r.form.get('username', '').strip()
password = r.form.get('password', '').strip()
if not (site or username or password):
flask.abort(500)
p = password_service.update_password(id, site, username, password, current_user.id)
return {"p": p}
@blueprint.delete('/vault/delete/<id>')
@login_required
def delete(id):
password_service.delete_password(id, current_user.id)
return ''
@blueprint.get('/vault/export')
@login_required
def export():
if current_user.has_passwords:
fn = password_service.generate_csv(current_user)
return flask.redirect(f'/download?fn={fn}', 302)
return "No passwords for user"
@blueprint.get('/download')
@login_required
def download():
r = flask.request
fn = r.args.get('fn')
with open(f'/tmp/{fn}', 'rb') as f:
data = f.read()
resp = flask.make_response(data)
resp.headers['Content-Disposition'] = 'attachment; filename=superpass_export.csv'
resp.mimetype = 'text/csv'
return resp

Credentials

Setelah finding kami mendapatkan Credentials seperti dibawah

Terminal window
Credentials in row 3:
Sitename: hackthebox.com
Username: 0xdf
Password: 762b430d32eea2f12970
Credentials in row 4:
Sitename: mgoblog.com
Username: 0xdf
Password: 5b133f7a6a1c180646cb
Credentials in row 6:
Sitename: mgoblog
Username: corum
Password: 47ed1e73c955de230a1d
Credentials in row 7:
Sitename: ticketmaster
Username: corum
Password: 9799588839ed0f98c211
Credentials in row 8:
Sitename: agile
Username: corum
Password: 5db7caa1d13cc37c9fc2

Priveleges Escalation

Kami mencoba menggunakan Credential tersebut untuk login SSH alt text

Daftar port internal kita dapat melihat 41829 yang tidak umum terlihat pada sistem alt text alt text

Kami juga mengecek sudoers dengan command sudo -l alt text

Credentials

Setelah mencari cari kami mendapatkan Credentials dibawah

Terminal window
edwards@10.10.11.203
d07867c6267dcb5df0af

Ternyata disini sudo -l dapat dilihat dengan user edward. Melihat hak istimewa level sudoers, kita dapat membuka 2 file dengan sudoedit sebagai dev_admin alt text

Membuat daftar tugas dengan pspy kita dapat menemukan bahwa root mengeksekusi file /app/venv/bin/activate alt text

Kita dapat menemukan CVE-2023–22809 untuk sudoedit yang menunjukkan kepada kita sedikit untuk mengeksploitasinya. Kami mengekspor variabel seperti yang ditunjukkan dengan membuka /app/venv/bin/activate sebagai file tambahan alt text

Sekarang kita membuka salah satu dari 2 file yang memungkinkan kita untuk membuka sebagai dev_admin di tingkat sudoers

Terminal window
sudo -u dev_admin sudoedit /app/config_test.json

Kami memodifikasi file dengan menambahkan di awal perintah yang menambahkan izin suid ke python alt text alt text

Submit Flag in HackTheBox

alt text