$ nmap -sn 10.10.10.102-105 Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-04 17:22 +07 Nmap scan report for 10.10.10.104 Host is up (0.00028s latency). Nmap done: 4 IP addresses (1 host up) scanned in 1.26 seconds $ nmap -p- 10.10.10.104 --min-rate 3000 Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-04 17:24 +07 Nmap scan report for 10.10.10.104 Host is up (0.00015s latency). Not shown: 65534 closed ports PORT STATE SERVICE 80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.24 seconds $ nmap -A 10.10.10.104 -p 80 Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-04 17:25 +07 Nmap scan report for 10.10.10.104 Host is up (0.00053s latency).
PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-server-header: Apache/2.4.38 (Debian) |_http-title: Example.com - Staff Details - Welcome
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 6.71 seconds
Hmm… bủn xỉn vcl, mở mỗi cổng 80-HTTP.
Từ từ đã, tại sao lại có dòng File does not exist ở kia? Tôi link ngay đến một bài CTF từng làm, truyền vào đây thêm một param nữa để gọi file. Đại khái là thằng manager.php đang gọi đến một hàm mở file và cần một param truyền vào (có thể là file, f hoặc gì gì…), nghe vô lý nhưng cái CTF style nó thế, chả đâu vào đâu :/
Chốt lại là web server dính lỗi LFI, lấy được mã nguồn trang, các thứ các thứ, nhưng chưa có thông tin nào cần để lấy được shell. Quay lại với search.php, kiểm tra xem nó có dính SQL Injection hay không.
Okay… vậy là có SQL Injection luôn. Ném nó vào Sqlmap dump dữ liệu ra xem có gì hay ho…
Với mật khẩu hash của admin, đem crack chùa lấy được password ngon lành. Thề, CrackStation với HashKiller lợi hại vãi cả đái.
Sau đó tôi có cố thử lợi dụng SQL Injection để up shell, chèn mã vào khắp nơi trên cái web site này. Sau 30 phút đéo đem lại gì ngoài sự chán nản. Đcm, chả nhẽ nó khó đến thế à? Và thế là tôi lén mở write up lên để xem xem bước tiếp theo họ làm như thế nào. Cái mảng kiến thức này thực sự trước giờ tôi đéo biết :D Như này…
Burp suite
Lần này quay lại với lỗi LFI ở trên đã phát hiện được, bây giờ tôi muốn fuzzing những file ở trong thư mục /etc để tìm kiếm thêm những cấu hình bên trong máy chủ này.
knockd is a port-knock server. It listens to all traffic on an ethernet (or PPP) interface, looking for special “knock” sequences of port-hits. A client makes these port-hits by sending a TCP (or UDP) packet to a port on the server. This port need not be open – since knockd listens at the link-layer level, it sees all traffic even if it’s destined for a closed port. When the server detects a specific sequence of port-hits, it runs a command defined in its configuration file. This can be used to open up holes in a firewall for quick access.
Nói qua một chút cho dễ hiểu, giống như trò gõ cửa mà hồi bé hay chơi, gõ cửa 4 lần thì người ở trong mới mở cửa, còn nếu gõ sai, có nghĩa người bên ngoài là người lạ, thì người bên trong sẽ không mở cửa. Thằng ml Knockd này như kiểu là một thằng đứng ở tầng liên kết (trong mô hình OSI). Nó lắng nghe toàn bộ lưu lượng truy cập và khi nó nghe được một chuỗi knock knock giống như mật khẩu gõ cửa, nó sẽ thực thi lệnh được xác định trong tệp cấu hình. Phân tích tệp cấu hình knockd.conf. Có thể thấy, Knockd đang muốn lắng nghe lần lượt các gói tin TCP syn ở các cổng theo thứ tự 7469, 8475, 9842 để thực hiện lệnh mở cổng 22-SSH. Đây là lí do tại sao Nmap không thể quét ra được cổng 22-SSH trên máy chủ, vì nó có mở đéo đâu mà quét được. Lúc này knock knock knock để mở cổng 22-SSH thôi nào :D
1 2 3 4 5 6 7 8 9 10 11 12
$ knock 10.10.10.104 7469 8475 9842 $ nmap -p- 10.10.10.104 Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-04 22:55 +07 Nmap scan report for 10.10.10.104 Host is up (0.0038s latency). Not shown: 65533 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.35 seconds
Good! Cái này trước đây tôi đéo biết, vậy nên làm bài này khiến tôi có thêm một kiến thức mới, không hề tệ với một bài lab easy. Có SSH rồi, giờ brute-force thôi. Tại sao lại là brute-force? Vì ở kia tôi đã lấy được danh sách người dùng trong hệ thống từ file /etc/passwd. Password thì lấy được từ Sqlmap ở trên, mặc dù nó chả liên quan cho lắm nhưng biết đâu có user nào đấy chủ quan đặt password trên web trùng với password trên server thì sao.
Hydra
Lần này screen-shot Terminal cho nó màu mè
Privileges Escalation
Với session của user janitor, có một cái file vớ vẩn như thế này.
janitor@dc-9:~$ ls -al total 20 drwxrwxrwx 5 janitor janitor 4096 Feb 4 21:54 . drwxr-xr-x 19 root root 4096 Dec 29 2019 .. lrwxrwxrwx 1 janitor janitor 9 Dec 29 2019 .bash_history -> /dev/null drwxr-xr-x 2 janitor janitor 4096 Feb 4 21:55 duma drwx------ 3 janitor janitor 4096 Feb 4 21:55 .gnupg drwx------ 2 janitor janitor 4096 Dec 29 2019 .secrets-for-putin
janitor@dc-9:~$ cd .secrets-for-putin
janitor@dc-9:~/.secrets-for-putin$ ls -al total 12 drwx------ 2 janitor janitor 4096 Dec 29 2019 . drwxrwxrwx 5 janitor janitor 4096 Feb 4 21:54 .. -rwx------ 1 janitor janitor 66 Dec 29 2019 passwords-found-on-post-it-notes.txt janitor@dc-9:~/.secrets-for-putin$ cat passwords-found-on-post-it-notes.txt BamBam01 Passw0rd smellycats P0Lic#10-4 B4-Tru3-001 4uGU5T-NiGHts
Hmm… lại có thểm một vài mật khẩu nữa, nối vào cuối file password.txt rồi gọi lại Hydra xem có lấy thêm được account nào trong hệ thống không.
He, có thêm của fredf. Với mấy user tìm được bên trên thì đều không có tên trong danh sách khách mời của sudoers, mỗi fredf là có.
1 2 3 4 5 6 7 8 9
fredf@dc-9:~$ sudo -l Matching Defaults entries for fredf on dc-9: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User fredf may run the following commands on dc-9: (root) NOPASSWD: /opt/devstuff/dist/test/test fredf@dc-9:~$ /opt/devstuff/dist/test/test Usage: python test.py read append
Phần này tôi bỏ qua SUID, vì tìm rồi và chả có mẹ gì. Tập trung vào /opt/devstuff/dist/test/test. Tìm xem cái file test.py ở đâu và có nội dung gì.
if len (sys.argv) != 3 : print ("Usage: python test.py read append. Adudu") sys.exit (1)
else : f = open(sys.argv[1], "r") output = (f.read())
f = open(sys.argv[2], "a") f.write(output) f.close()
File này chỉ có quyền đọc thôi, không có quyền sửa. Nhưng đọc nội dung xem nó làm cái gì. Sau câu lệnh else, nó thực hiện đọc nội dung file sys.argv[1] và nối (appent) vào file sys.argv[2], với quyền Root. ĐÙ! Thế thì bây giờ tôi sẽ tự tạo một tài khoản bằng cách chèn thêm vào cuối file /etc/passwd với ID 0, vì trong Linux, user có ID 0 thì mặc định là Root.
root@dc-9:/home/fredf# id uid=0(root) gid=0(root) groups=0(root)
Done, Ez! Việc có quyền ghi file với quyền của Root giống như leo thang với các trình editer như Vim hay Nano vậy, có thể sửa đổi những file nhạy cảm như /etc/passwd, /etc/shadow và một loạt các file cấu hình quan trọng khác trong hệ thống của Linux.