krone
VIP Members
-
26/07/2016
-
141
-
259 bài viết
Khai thác lỗ hổng PHPMailer thực thi mã từ xa ( CVE-2016-10033 )
Vâng như đã hứa thì mình sẽ quay trở lại phân tích về lổ hổng PHPMailer mới được công bố gần đây. Oke mình sẽ bắt đầu luôn. Vậy thì đầu tiên là:
What is PHPMailer ?
PHP Mailer là bộ thư viện mã nguồn mở viết bằng PHP cho phép gửi mail từ các ứng dụng web. Điển hình là WordPress, Drupal, 1CRM, SugarCRM, Joomla đều sử dụng bộ thư viện này, ...hoặc các ứng dụng có chức năng gửi mail bằng PHP Mailer.
Một form gửi mail trên web có dạng như sau:
Hàng triệu Website PHP và các ứng dụng web mã nguồn mở phổ biến bao gồm WordPress, Drupal, 1CRM, SugarCRM và Joomla đều sử dụng thư viện PHPMailer cho việc gửi email bằng nhiều phương thức khác nhau.
Lổ hổng PHPMailer ( CVE-2016-10033 )?
Lỗ hổng CVE-2016-10033 do Dawid Golunski - chuyên gia nghiên cứu bảo mật của Legal Hackers công bố vào ngày 25.12.2016 ảnh hưởng tới PHPMailer trước 5.2.18, sau 2 ngày Dawid Golunski tiếp tục cập nhật lỗ hổng CVE-2016-10045 (ảnh hưởng tới PHP Mailer < 5.2.20) vượt qua bản vá của lỗ hổng CVE-2016-10033 mới được cập nhật trong phiên bản 5.2.18 trước đó. Hiện tại mã khai thác cũng đã được công bố.
Lợi dụng lỗ hổng này tin tặc có thể thực thi mã khai thác và tấn công vào máy chủ/ứng dụng web. Tất cả ứng dụng web, sử dụng chức năng, các form “Liên hệ/Contact/feedback”, “Đăng ký/Regsitration” hay “Reset password” có chức năng gửi mail dựa trên PHP Mailer đều có thể bị tấn công.
Khai thác - Exploition?
Ở đây mình có clone được một lab của một team nước ngoài có nghiên cứu về các lổ hổng thực thi mã. Link dưới đây bao gồm mã nguồn một web form cơ bản mô phỏng gửi mail. Source của mã nguồn mở PHPMailer version 5.2.17.( Vuln < 5.2.18 ). NGoài ra còn có cả source exploit.
https://github.com/opsxcq/exploit-CVE-2016-10033
- Đầu tiên là cài đặt môi trường gây ra lỗi có thể khai thác. Sandbox cần được cài đặt Docker trước hết để có thể thực hiện tạo môi trường ảo.
Nếu bạn nào chưa biết Docker là gì thì có thể tham khảo link ở phía dưới để hiểu được nó là gì, đại loại là nó gần như tương tự KVM-EQMU nhé ! Nếu có thời gian mình cũng sẽ viết một bài tham khảo phân tích về Docker cho các bạn xem.
https://blog.duyetdev.com/2015/12/docker-la-gi-co-ban-ve-docker.html#.WHM5Nxt97Dc
Sau khi thực hiện lệnh lên chúng ta sẽ có một web form như sau:
Để thực hiện khai thác chỉ chạy lệnh:
Tất nhiên là mình đang chạy trên môi trường ảo do Docker tạo ra nên ta chỉ cần chạy:
Sau khi khai thác, một tập tin gọi là backdoor.php sẽ được lưu vào thư mục gốc của thư mục web. Và khai thác sẽ đặt mộ shell nơi bạn có thể gửi lệnh đến backdoor:
Thử với lệnh thực thi:
And...refresh.
Trên đây mình đã trình bày về cách khai thác lỗi PHPMailer, mặc dù chỉ dựa trên môi trường do Docker tạo ra nhưng code để exploit vẫn có thể dử dụng cho các web sifte ngoại tuyến. Các bạn có thể thử nếu có thể tìm thấy web lỗi đúng phiên bản PHPMailer < 5.2.18. Tuy nhiên sau hơn 2 tuần thì có lẽ các quản trị cũng đã cập nhật được tin tức, cùng với đó bộ mã của PHPMailer là một mã nguồn mở ứng xử độc lập nên khá dễ dàng để cập nhật . Vài hôm nữa mình sẽ tiếp một bài ngắn về nguồn gốc của lổ hổng và tại vì sao có thể thực thi được mã dựa trên lỗ hổng của PHPMailer này.
Cám ơn các bạn đã đọc bài .!
By Krone
What is PHPMailer ?
PHP Mailer là bộ thư viện mã nguồn mở viết bằng PHP cho phép gửi mail từ các ứng dụng web. Điển hình là WordPress, Drupal, 1CRM, SugarCRM, Joomla đều sử dụng bộ thư viện này, ...hoặc các ứng dụng có chức năng gửi mail bằng PHP Mailer.
Một form gửi mail trên web có dạng như sau:
Hàng triệu Website PHP và các ứng dụng web mã nguồn mở phổ biến bao gồm WordPress, Drupal, 1CRM, SugarCRM và Joomla đều sử dụng thư viện PHPMailer cho việc gửi email bằng nhiều phương thức khác nhau.
Lổ hổng PHPMailer ( CVE-2016-10033 )?
Lỗ hổng CVE-2016-10033 do Dawid Golunski - chuyên gia nghiên cứu bảo mật của Legal Hackers công bố vào ngày 25.12.2016 ảnh hưởng tới PHPMailer trước 5.2.18, sau 2 ngày Dawid Golunski tiếp tục cập nhật lỗ hổng CVE-2016-10045 (ảnh hưởng tới PHP Mailer < 5.2.20) vượt qua bản vá của lỗ hổng CVE-2016-10033 mới được cập nhật trong phiên bản 5.2.18 trước đó. Hiện tại mã khai thác cũng đã được công bố.
Lợi dụng lỗ hổng này tin tặc có thể thực thi mã khai thác và tấn công vào máy chủ/ứng dụng web. Tất cả ứng dụng web, sử dụng chức năng, các form “Liên hệ/Contact/feedback”, “Đăng ký/Regsitration” hay “Reset password” có chức năng gửi mail dựa trên PHP Mailer đều có thể bị tấn công.
Khai thác - Exploition?
Ở đây mình có clone được một lab của một team nước ngoài có nghiên cứu về các lổ hổng thực thi mã. Link dưới đây bao gồm mã nguồn một web form cơ bản mô phỏng gửi mail. Source của mã nguồn mở PHPMailer version 5.2.17.( Vuln < 5.2.18 ). NGoài ra còn có cả source exploit.
https://github.com/opsxcq/exploit-CVE-2016-10033
- Đầu tiên là cài đặt môi trường gây ra lỗi có thể khai thác. Sandbox cần được cài đặt Docker trước hết để có thể thực hiện tạo môi trường ảo.
Mã:
docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033
Nếu bạn nào chưa biết Docker là gì thì có thể tham khảo link ở phía dưới để hiểu được nó là gì, đại loại là nó gần như tương tự KVM-EQMU nhé ! Nếu có thời gian mình cũng sẽ viết một bài tham khảo phân tích về Docker cho các bạn xem.
https://blog.duyetdev.com/2015/12/docker-la-gi-co-ban-ve-docker.html#.WHM5Nxt97Dc
Sau khi thực hiện lệnh lên chúng ta sẽ có một web form như sau:
Để thực hiện khai thác chỉ chạy lệnh:
Mã:
./exploit host:port
Tất nhiên là mình đang chạy trên môi trường ảo do Docker tạo ra nên ta chỉ cần chạy:
Mã:
./exploit localhost:8080
Sau khi khai thác, một tập tin gọi là backdoor.php sẽ được lưu vào thư mục gốc của thư mục web. Và khai thác sẽ đặt mộ shell nơi bạn có thể gửi lệnh đến backdoor:
Thử với lệnh thực thi:
Mã:
echo 'Defaced' > /www/index.php
And...refresh.
Trên đây mình đã trình bày về cách khai thác lỗi PHPMailer, mặc dù chỉ dựa trên môi trường do Docker tạo ra nhưng code để exploit vẫn có thể dử dụng cho các web sifte ngoại tuyến. Các bạn có thể thử nếu có thể tìm thấy web lỗi đúng phiên bản PHPMailer < 5.2.18. Tuy nhiên sau hơn 2 tuần thì có lẽ các quản trị cũng đã cập nhật được tin tức, cùng với đó bộ mã của PHPMailer là một mã nguồn mở ứng xử độc lập nên khá dễ dàng để cập nhật . Vài hôm nữa mình sẽ tiếp một bài ngắn về nguồn gốc của lổ hổng và tại vì sao có thể thực thi được mã dựa trên lỗ hổng của PHPMailer này.
Cám ơn các bạn đã đọc bài .!
By Krone