Đây là bài lab Builder trên Hackthebox mới level Medium. Sau khi connect OpenVPN tới htb. Ta thực hiện join machine và được cấp địa chỉ mục tiêu là 10.10.11.10
Tiến hành scan Nmap để tìm thông tin dịch hệ thống mục tiêu:
nmap 10.10.11.10
Ở đây ,ta chạy nmap với quyền root để có thể quét TCP SYN , giúp scan nhanh hơn và hiệu quả hơn.
Như kết quả được thấy , có 2 dịch vụ đang chạy là ssh(22) và http(8080).
Quét với -A
flag 2 port trên để scan service :
Ta thấy Jenkins server chạy trên port 8080. Tiến hành truy cập 10.10.11.10:8080
Sau khi open connect , ta thấy trang Jenkins hiện ra , vì là lần đầu biết tới Jenkins , nên thử mày mò các chức năng trên web , ta thấy có 2 user trong tab "People" :
Chú ý được có id user anonymous
(Chế độ truy cập anonymous trong Jenkins cho phép người dùng truy cập vào Jenkins mà không cần phải đăng nhập. Mức độ truy cập và các quyền được cấp cho người dùng anonymous có thể được cấu hình tùy chỉnh tùy thuộc vào nhu cầu bảo mật của hệ thống Jenkins.)
Ấn vào từng user một để xem có thông tin gì k , nhưng chả có thông tin gì cả ngoài user id =()
Xem phía dưới góc phải của trang , ta thấy đựa version Jenkins 2.441 :
Quick search xem nào , ta xác định được server dính CVE-2024-23897 (Khá là mới =() )
Lỗ hổng cho phép người dùng chưa được xác thực có thể đọc file bất kỳ nào trên Jenkins controller file system. Kẻ tấn công có thể lợi dụng để extract username và password người dùng.
Sau khi xác định được CVE ,tìm một lúc cũng thấy được PoC ưng ý trên github.
(Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an @ character followed by a file path in an argument with the file's contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.)
Sau một hồi tìm hiểu , lỗ hỗng được xác định do cú pháp "@/path/to/file" trong Jenkins CLI được thay thế bằng nội dung của file. Download jenkins CLI (Jenkins-cli.jar file) :
wget http://10.10.11.10:8080/jnlpJars/jenkins-cli.jar
Run command: java -jar jenkins-cli.jar -s http://10.10.11.10:8080/ -http connect-node "@/etc/passwd"
: (Chạy CLI jenkins bằng jar file với java)
Kết quả lỗi dump ra rất nhiều content file /etc/passwd.
Ta xác định được home directory Jenkins:
Đọc nội dung user.txt trong home directory với lệnh sau : java -jar jenkins-cli.jar -s http://10.10.11.10:8080/ -http connect-node "@/var/jenkins_home/user.txt"
(sau vài lần thử fail với user* :>) Ta được flag đầu tiên :>>
Sau một hồi tìm hiểu cấu trúc mặc định trong home directory của Jenkins , ta biết được các file config.xml chứa thông tin của người dùng:
Như lúc đầu ta thấy có user là "jennifer", thử đọc tệp ./users/jennifer/config.xml xem sao :
Không tìm thấy file cấu hình của jennifer. Xem gợi ý trên htb về file XML chứa thông tin các người dùng đã đăng ký =)) :
Tiến hành đọc file ..../users/users.xml, ta tìm được tên người dùng jennifer được nối random string ( biện pháp để che giấu thư mục người dùng):
Thử đọc tệp cấu hình của user jennifer :
Thu được pass được hash , đem đi crack trên hashcat , ta được pass là : "princess"
Thực hiện login vào portal Jenkins :
Truy cập Dashboard > jennifer > Credentials :
User jennifer lưu trữ thông tin SSH private key "root", có thể đây là thông tin đăng nhập vào máy chủ triển khai của Jenkins.
Vì có chức năng update credential này , và xem thêm gợi ý , ta tìm được đoạn encrypt Private Key SSH trong source page:
Do key được encrypt trên Jenkins , sử dụng ChatGPT =)) , tìm được cách decrypt private key SSH:
All done! . Có được private key SSH , ta login root user với syntax ssh -i privateKey [email protected]
Đây là bài lab khá hay mô phỏng về lỗ hổng "Unexpected read file" - CVE-2024-23897 trên Jenkins (ứng dụng trong CI pipeline ), cho phép đọc file tùy ý có thể gây leo thang đặc quyền. Hiện lỗ hổng đã được fix ở bản cập nhật mới nhất!