OSQUERY INJECTION LÀ GÌ?
osquery là một công cụ thu thập thông tin hệ điều hành như một cơ sở dữ liệu quan hệ hiệu suất cao. Nó cho phép các nhà phát triển viết các truy vấn dựa trên SQL để khám phá dữ liệu hệ điều hành. Với osquery, thì việc trừu tượng hoá thông tin hệ điều hành sẽ giúp cho người dùng thu thập thông tin một cách dễ dàng, các thông tin chẵn hạn như:- Tiến Trình Đang Chạy
- Các module hạt nhân được nạp
- Các kết nối mạng đang mở
- Các plugin trên trình duyệt
- Các sự kiện liên quan đến phần cứng
- File hashes
Bạn có thể truy cập danh sách các bảng được xác định trước tại đây: https://osquery.io/schema/2.11.2.
OSQUERY HOẠT ĐỘNG NHƯ THẾ NÀO?
Dưới đây là một số ví dụ về những gì bạn có thể làm với osquery và tại sao nó là một tiện ích hữu ích như vậy. Bạn không thể truy xuất một số dữ liệu dưới đây mà không cần đến phân tích cú pháp các tệp hệ thống hoặc thậm chí tệ hơn, mà bạn không sử dụng các lệnh hệ thống nguy hiểm:
- Liệu Kê Danh Sách Người Dùng
SELECT * FROM users;
LẤY TÊN, CỔNG VÀ PID CỦA TẤT CẢ CÁC TIẾN TRÌNH
Điều này thường sẽ liên quan đến một lệnh hệ thống, nhưng bây giờ bạn chỉ có thể sử dụng truy vấn dưới đây:
SELECT DISTINCT processes.name, listening_ports.port, processes.pid FROM listening_ports JOIN processes USING (pid);
OSQUERY INJECTION
osquery Injection là một lỗ hổng gây ra bởi việc lạm dụng thư viện, giống như SQL Injection hoặc Memcache Injection. Thư viện Python chính thức được công bố bởi Facebook. Thật không may, nó không sử dụng một cơ chế như Prepared Statement. Do đó, khi đầu vào của người dùng được đặt trong bất kỳ phần nào của truy vấn, các truy vấn độc hại có thể được thực hiện và các lỗ hổng có thể được khai thác bởi kẻ tấn công.
Đây là cách nó có thể được thực hiện:
Mã này chỉ cung cấp một số thông tin về người dùng, bằng cách đưa tên người dùng từ phương thức GET vào truy vấn.
Một cách dễ dàng để kiểm tra ứng dụng dễ bị tấn công của chúng tôi là triển khai docker container bằng cách sử dụng các lệnh sau:
Một cách dễ dàng để kiểm tra ứng dụng dễ bị tấn công của chúng tôi là triển khai docker container bằng cách sử dụng các lệnh sau:
Mã sẽ hoạt động tốt sau tiến trình này. Bây giờ bạn có thể truy cập ứng dụng bạn đã triển khai từ địa chỉ sau:
Hãy cẩn thận với đoạn mã này, vì nó chứa một lỗ hổng khá nghiêm trọng. Trong trường hợp bạn không phát hiện ra ngay, đầu vào mà chúng tôi nhận được từ người dùng đã được bao gồm trong truy vấn, như được minh họa:
Vì vậy, nếu chúng tôi gửi một yêu cầu như sau, truy vấn của chúng tôi sẽ thay đổi và kết quả là chúng tôi sẽ nhận được thông tin chi tiết về người dùng mạng systemd:
Nếu chúng ta muốn khai thác lỗ hổng này, chúng ta phải lấy dữ liệu từ các bảng khác. Điều này tương tự như lỗ hổng SQL Injection mặc định. Tất cả những gì chúng ta cần là:
- Số cột cho truy vấn
- Các tên bảng
LẤY THÔNG TIN SỐ CỘT
Như trong các truy vấn SQL chuẩn, mệnh đề ORDER BY cũng có sẵn trong osquery. Thông thường, nó được sử dụng để sắp xếp các kết quả theo một tên cột được chỉ định, chẳng hạn như tên ORDER BY.
Tuy nhiên, vì bạn có thể chỉ định một số thay vì một tên cột, mệnh đề này đặc biệt thú vị cho việc tiêm SQL. Số này tương ứng với vị trí của một cột trong danh sách lựa chọn. Và, giống như trong một SQL Injection, chúng ta có thể sử dụng hành vi này để xác định số lượng các cột sử dụng mệnh đề ORDER BY trong quá trình tiêm osquery của chúng ta.
Nếu bạn lạm dụng hành vi này trong một lần tiêm SQL, bạn thường sẽ nhập một số lớn ngay sau mệnh đề ORDER BY. Ví dụ có thể là ORDER BY 50. Nếu số này quá lớn, bạn sẽ nhận được phản hồi, chẳng hạn như lỗi, trang trống hoặc nội dung bị thiếu. Sau đó, bạn sẽ chia giá trị ban đầu cho hai và thử lại. Trong ví dụ của chúng tôi: ORDER BY 25. Lặp lại quá trình này nhiều lần, mặc dù tẻ nhạt, sẽ giúp bạn khám phá đúng số cột.
Trong osquery, tình hình tốt hơn nhiều so với quan điểm của kẻ tấn công. Thứ hai, chúng tôi gửi một số lớn hơn số cột thực tế, nó ngay lập tức cung cấp cho chúng tôi số cột. Bạn có thể thấy điều này trong ví dụ dưới đây:
Chúng tôi đã gửi giá trị 999 trong mệnh đề ORDER BY (xem hình ảnh). Nó trả về thông báo sau:http://{docker_ip_adress}:35275/?username=systemd-network’ ORDER BY 999 --
Vì giá trị ORDER BY mà chúng tôi cần gửi chỉ có thể nằm trong khoảng từ 1 đến 2, chúng tôi có thể giả định rằng số cột của chúng tôi là 2.
Dấu gạch ngang kép (–) được bao gồm ở cuối một số truy vấn này chỉ đơn giản là cách để bắt đầu nhận xét. Điều này có hiệu quả loại bỏ bất kỳ phần nào của truy vấn theo sau dấu gạch ngang kép.
Trong ảnh chụp màn hình, chúng ta có thể thấy rằng hai cột bổ sung được in dưới dạng đầu ra.http://{docker_ip_adress}:35275/?username=systemd-network’ union select 1,2 from processes --
TÌM KIẾM TÊN BẢNG
Tìm tên bảng là một nhiệm vụ dễ dàng hơn nhiều so với việc tìm số đếm cột. Điều này là do các bảng được xác định trước và chúng đã được công bố sẵng tại địa chỉ sau:
Thật không may, không có cách nào để tìm các bảng tùy chỉnh đã được thêm vào sau đó. Trong một tiêm MySQL, bạn có thể truy cập các tên bảng thông qua information_schema. Tuy nhiên, không có cấu trúc như vậy cho tên bảng trong osquery.https://osquery.io/schema/2.11.2
TRUY CẬP VÀO CÁC TÊN BẢN KHÁC
Để phát hiện hệ điều hành và phiên bản hệ điều hành mà osquery đang làm việc, chúng tôi gửi một truy vấn như sau:
http://{docker_ip_adress}:35275/?username=systemd-network’ union select build_platform,version from osquery_info --
Để tìm hiểu tiến trình nào đang chạy trên hệ thống, chúng tôi gửi một truy vấn như sau:
Để tìm các PID của các cổng lắng nghe và các dịch vụ lắng nghe cổng, chúng tôi gửi một truy vấn như sau:http://{docker_ip_adress}:35275/?username=systemd-network’ union select cmdline,path from processes --
Để tìm hiểu tất cả người dùng trong hệ thống, chúng tôi có thể gửi truy vấn sau:http://{docker_ip_adress}:35275/?username=systemd-network’ union select pid,port from listening_ports --
quát đờ heo
Trả lờiXóalâu lâu đổi chủ đề :V
XóaẤy đù ,send temp t sài với
Trả lờiXóaT SINH dz nè
Xóaakk dukkk gắt :V
Xóaweb như cụ cặc đi chê web ngta :)) thằng bại não
Trả lờiXóa:V thằng bờm ngáo đây mà :V sài nặc danh chi vậy em :v
XóaShare code khi trỏ chuột vào vùng chứa code hiện chữ đi
Trả lờiXóatrong temp nó có sẳn á :V
Xóaphóng to hình ảnh lên :v nhìn mỏi mắt vl
Trả lờiXóaClick vào rồi phóng to được mà ta :V
Xóa