Với port 80 tôi thấy có path /joomla/, vậy là web này được buil trên Joomla CMS, và nếu qua path /administrator/ thì tôi sẽ vào được login page joomla. Tuy nhiên với kiến thức hạn hẹp, phải loay hoay 1 lúc lâu tôi mới tìm ra được version joomla đang chạy trên machine này.
Lội qua 1 đống tool thì tôi tìm được thằng này: juumla giúp check version cũng như tìm find backup hay config, khá tiện.
Check trên exploit-db Tôi có 1 SQLi, chạy thử sqlmap nhưng nó quá lâu (lâu vô hạnnnn =.=). Vậy nên tôi thử tìm trên github xem có payload joomla version 3.7.0 không. Và nó ở đây.
Clone nó về và chạy với IP machine và tôi có luôn user trong 1 phút, phí mất 15 phút ngồi chờ thằng sqlmap, ngẫn quá
Login vào joomla để upload shell. Dạo quanh 1 lúc thì tôi thấy template là nơi có thể upload shell vì nó sẽ là thứ hiện ra cho người dùng khi họ truy cập vào trang web.
Sửa file php có sẵn trong template thành reverse shell php, shell này tôi lấy từ pentestmonkey, sửa listen host và port thành ip machine của mình.
Tạo listener bằng netcat: nc -lnvp 2402 sau đó truy cập vào file vừa sửa: http://IP-MACHINE/templates/beez3/index.php
┌──(neo㉿kali)-[~]└─$nc-lnvp2402listeningon[any]2402...connectto[10.18.3.74]from(UNKNOWN)[10.10.71.145]37496Linuxdailybugle3.10.0-1062.el7.x86_64#1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
23:38:06up36min,0users,loadaverage:0.03,0.04,0.05USERTTYFROMLOGIN@IDLEJCPUPCPUWHATuid=48(apache)gid=48(apache)groups=48(apache)sh:nojobcontrolinthisshellsh-4.2$
Config lại shell bằng python nhưng không được, trong thư mục /home tôi có thư mục jjameson nhưng không thể truy cập. Tôi sẽ tìm xung quanh xem có password của ông này không. Tôi sẽ ưu tiên các file config vì thường thì các user và passwd sẽ được lưu ở đây. Thêm nữa đây là web được buil trên php nên tôi sẽ thử tìm file config.php xem có thu được gì đặc biệt không.
Sau khi lần mò trong thư mục lưu trữ web (thường là /var/www/html/) tôi tìm thấy 2 file configuration.php và web.config.php
sh-4.2# id
uid=0(root)gid=0(root)groups=0(root)sh-4.2# ls /root/root.txt
/root/root.txt
Tổng kết
Qua bài này chúng ta biết thêm về Joomla cms, biết đâu sau này lại có hứng thú tạo web bằng thằng này. Tiếp theo là cách sử dụng exploit-db để tìm kiếm lỗ hổng trong các phiên bản của ứng dụng, cách sử dụng john-the-ripper để decrypt file hash. Cuối cùng là cách sử dụng yum để leo thang đặc quyền. Yeah chắc vậy là đủ rồi.
Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - Ignite. Géc gô!!!
Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.
Tôi chỉ có 1 port đang mở là port 80 chạy Apache httpd 2.4.18 trên Ubuntu server.
Với http-header Fuel CMS, có nghĩa là site này dựng trên cms fuel phiên bản 1.4. Trong file robots.txt có 1 entry là /fuel. Path này sẽ điều hướng web đến trang login của fuel cms.
Tôi thử login vào site bằng username và password mặc định: admin-admin.
Site dashboard cũng không có gì đặc biệt lắm. Thực ra thì khi nhìn thấy fuel cms tôi đã nghĩ đến việc tìm exploit-db hoặc searchsploit, nhưng vì được cho login từ đầu nên bây giờ tôi mới thử.
Với 3 exploit RCE này, tôi chọn cái thứ 3 vì nó là python code và chạy trên php.
Có shell rồi này. Tôi sẽ dùng python reverse shell để trỏ về máy local. Nhưng có vẻ là không được, kể cả các shell khác.
À! Còn cách khác. Tôi sẽ upload file shell php từ máy local.
Tạo http server từ máy local.
Sau đó dùng wget để tải file từ máy local về remote server.
Bật netcat và mở file trên browser. http://MACHIEN-IP/shell.php
Truy cập user www-data và tôi có user flag.
Bây giờ đến bước leo thang đặc quyền. Tôi đã thử vài thứ đơn giản như sudo -l hay crontab đều không có kết quả gì. Vì vậy, tôi sẽ tạo http server bằng python và wget linPEAS.
Dạo quanh 1 đống vô cùng nhiều thứ này thì tôi tìm được vài thông tin trong databse fuel_schema.
Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.
Chúng ta có 3 port đang mở:
port 21 với ftp server và cho phép login bằng anonymous.
port 22 chạy ssh trên ubuntu server
port 80 với Apache httpd 2.4.18 trên ubuntu server
Với port 21, tôi có vài thứ hay ho ở đây.
Trong ftp server tôi có 1 file txt và 1 file ảnh, user anonymous cũng có quyền sửa, ghi file. Vậy là tôi có thể upload file lên ftp server, tôi không chắc. Xem qua 2 file kia đã.
Tôi có 1 cái tên ở đây: Maya. Còn chiếc ảnh kia thì không có gì đặc biệt lắm. Tôi sẽ quay lại ftp server để put shell lên xem có được không.
Được rồi. Bây giờ thử check web path để xem có tìm được url của file vừa up không.
Vào path /files và tôi tìm thấy ftp file server.
Tạo listener với port đã cấu hình bên trong shell và thử mở file.
Ồ được rồi này. Config lại shell 1 chút với python để dễ khai thác hơn. Trong file server web chúng ta có 1 file recipe.txt. Mở file này và tôi tìm được secret spicy soup recipe.
Vào thư mục /home và tôi có user lennie. Tuy nhiên không cần có password. Tôi thử check xem có thư mục nào chạy quyền của www-data không. Và tôi tìm thấy thư mục incidents.
Trong này có 1 file pcap, clone nó về và thử check bằng Wireshark xem có tìm được gì đặc biệt không, biết đâu lại có password của Lennie. Tôi tạo http server bằng python trên máy remote và wget file pcap về máy local của mình, đáp nó vào Wireshark thôi.
Sau 1 thời gian dài ngụp lặn, tôi đã tìm được password của user lennie, trong file pcap.
Đăng nhập và tôi có user flag.
Việc tiếp theo là leo thang đặc quyền. Cùng với user flag tôi có thêm 2 folder nữa và folder scripts có chứa file thực thi. Tôi sẽ khai thác nó trước. File planner.sh sẽ ghi đề 1 list vào file startup_list.txt và sau đó thực thi file /etc/print.sh. Tôi check qua file print.sh thì nó đang chạy dưới quyền user lennie, điều này có nghĩa là chúng ta có thể sửa được file này.
Tôi sẽ thêm reverse shell vào file này, nhưng không thể get root được. Do file planner.sh này có thể chạy được nên tôi sẽ thử kiểm tra xem nó có phải 1 cronjob chạy dưới quyền root hay không. Và đúng là như vậy.
Nên việc tiếp theo là sửa file này để gọi reverse shell. Tôi sẽ dùng shell này
Với port 80 tôi có 1 default page apache ubuntu server. Lướt qua page thì có 1 chút kỳ lạ, tôi xem qua source code:
<!-- Jessie don't forget to udate the webiste -->
Tiếp tục dùng dirsearch để tìm web path và tôi tìm được /sitemap/. Vào url thì đây là một blog html, cũng không có gì đặc biệt. Tôi thử check thông tin site:
Tôi thấy có Modernizr [2.6.2.min], đây là một thư viện java nên thử tìm xem có exploit nào không, tuy nhiên cũng không có gì hữu ích. Vậy nên tôi thử tìm web path thêm lần nữa để xem ở sau /sitemap/ có gì không.
Qua GTFOBins để tìm wget. Có vẻ như với wget chúng ta có thể tải file về local machine. Tôi sẽ thử dùng nó để tải root flag trong thư mục root. Và với tên user_flag thì tôi nghĩ root flag cũng sẽ có kiểu format như thế này.
Thử tạo listener trên local machine và lưu dữ liệu vào file flag
┌─[neo@parrot]─[~]└──╼$sudonc-lnvp80>flag
Sau đó tạo 1 POST request từ remote machine đến local machine.
Mở file flag và tôi có root flag. Còn để leo thang đặc quyền bằng wget tôi sẽ nói ở 1 bài sau.
Tổng kết
Thực sự thì bài này không có kỹ thuật gì mới, chú yếu là để luyện thêm về recon, cách login ssh bằng rsa key, sử dụng wget để lấy được file về local machine và sau đó có thể get root bằng cách đẩy file chứa password của mình.
Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng. Tôi sẽ dùng Rustscan cho nhanh và thêm vài tùy chọn của nmap.
Chúng ta có 2 port đang mở:
port 22 chạy ssh trên ubuntu server
port 80 với Apache httpd 2.4.18 trên ubuntu server
Với header này có vẻ như web chỉ là default page Apache. Kiểm tra source web cũng không có gì đặc biệt.
Thử dirsearch để tìm web path nào. Thằng này cú pháp đơn giản hơn gobuster vì nó có sẵn wordlist khá đầy đủ và còn được cập nhật.
Thử vào path và tôi có 1 site index của basic-cms sweetrice.
Thử tìm trên exploit-db và tôi tìm được exploit upload file: 40716. Xem qua exploit này thì tôi thấy có vài path ở đây.
Vậy có thể là sau /content/ vẫn còn có các path nữa.
Thử thêm 1 lần dirsearch nữa xem sao.
Và tôi có thêm các path của site sweetrice, trong đó có path /as/ dẫn đến site login và path /inc/ chứa các file hệ thống. Tôi để ý có mysql_backup ở đây. Thử tải và kiểm tra xem có user và password không nào.
Đây rồi! Tôi có username và password với hash md5. Vào Crackstations để unhash password. Login thôi.
Dashboard này nhiều thứ quá, tôi nhớ ra exploit lúc nãy cần username và password để upload file. Vậy thì thử thôi upload reverse shell nào.
Được rồi này. Điều lưu ý ở đây là cần phải đổi .php sang .php5, nếu để .php thì server không cho upload.
Bật netcat lên với listen port đã tạo trong shell: nc -lnvp 1234
Config lại session với python.
python3 -c ‘import pty;pty.spawn(”/bin/bash”)’
export TERM=xterm
Ctrl+Z
stty raw -echo; fg
Tìm trong thư mục /home/ có user itguy, và tôi tìm được user flag ở đây.
Bây giờ thì thử tìm xem có thư mục nào chạy bằng quyền root không.