Tác động tiêm html
Sự mô tảChèn HTML là một cuộc tấn công tương tự như Cross-site Scripting (XSS). Trong khi ở lỗ hổng XSS, kẻ tấn công có thể tiêm và thực thi mã Javascript, tấn công tiêm HTML chỉ cho phép tiêm một số thẻ HTML nhất định. Khi một ứng dụng không xử lý đúng cách dữ liệu do người dùng cung cấp, kẻ tấn công có thể cung cấp mã HTML hợp lệ, thường thông qua một giá trị tham số và đưa nội dung của chính chúng vào trang. Cuộc tấn công này thường được sử dụng cùng với một số hình thức kỹ thuật xã hội, vì cuộc tấn công đang khai thác lỗ hổng dựa trên mã và lòng tin của người dùng.
khắc phụcTập lệnh của bạn sẽ lọc các siêu ký tự từ đầu vào của người dùng Người giới thiệuThử nghiệm chèn HTML (OTG-CLIENT-003) Tư vấn CERT CA-2000-02 Thẻ HTML độc hại được nhúng trong yêu cầu web của khách hàng Bưu thiếp từ thế giới hậu XSS Lỗ hổng liên quanPHP unserialize() được sử dụng trên đầu vào của người dùng Việc sử dụng UUID/GUID phiên bản 1 không an toàn Plugin WordPress WPtouch tạo nonce không an toàn PHP preg_replace được sử dụng trên đầu vào của người dùng tiêm XSLT mức độ nghiêm trọngVừa phảiphân loạiCWE-80 CVSS. 3. 0/AV. không áp dụng. L/PR. N/UI. Không áp dụng. U/C. không có. L/A. NthẻLạm dụng chức năngNhiều nhà phát triển web không biết cách truy vấn SQL có thể bị giả mạo và cho rằng truy vấn SQL là một lệnh đáng tin cậy. Điều đó có nghĩa là các truy vấn SQL có thể phá vỡ các biện pháp kiểm soát truy cập, do đó bỏ qua các kiểm tra xác thực và ủy quyền tiêu chuẩn và đôi khi các truy vấn SQL thậm chí có thể cho phép truy cập vào các lệnh cấp hệ điều hành máy chủ Chèn lệnh SQL trực tiếp là một kỹ thuật mà kẻ tấn công tạo hoặc thay đổi các lệnh SQL hiện có để hiển thị dữ liệu ẩn hoặc ghi đè lên các dữ liệu có giá trị hoặc thậm chí để thực thi các lệnh cấp hệ thống nguy hiểm trên máy chủ cơ sở dữ liệu. Điều này được thực hiện bởi ứng dụng lấy đầu vào của người dùng và kết hợp nó với các tham số tĩnh để tạo truy vấn SQL. Thật không may, các ví dụ sau đây dựa trên những câu chuyện có thật Do thiếu xác thực đầu vào và kết nối với cơ sở dữ liệu thay mặt cho siêu người dùng hoặc người có thể tạo người dùng, kẻ tấn công có thể tạo siêu người dùng trong cơ sở dữ liệu của bạn Ví dụ #1 Chia tập kết quả thành các trang. và tạo siêu người dùng (PostgreSQL)
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0Người dùng bình thường nhấp vào các liên kết 'tiếp theo', 'trước đó' trong đó $offset được mã hóa thành URL. Tập lệnh hy vọng rằng $offset sắp tới là một số thập phân. Tuy nhiên, điều gì sẽ xảy ra nếu ai đó cố gắng đột nhập bằng cách thêm một dạng urlencode()'d sau vào URL 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; --Nếu điều đó xảy ra, thì tập lệnh sẽ hiển thị quyền truy cập siêu người dùng cho anh ta. Lưu ý rằng ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --1 là cung cấp phần bù hợp lệ cho truy vấn ban đầu và chấm dứt truy vấn đó
Một cách khả thi để có được mật khẩu là phá vỡ các trang kết quả tìm kiếm của bạn. Điều duy nhất kẻ tấn công cần làm là xem liệu có bất kỳ biến đã gửi nào được sử dụng trong các câu lệnh SQL không được xử lý đúng cách không. Các bộ lọc này có thể được đặt phổ biến ở dạng trước để tùy chỉnh các mệnh đề ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --3 và ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --4 trong câu lệnh ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --5. Nếu cơ sở dữ liệu của bạn hỗ trợ cấu trúc ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --6, kẻ tấn công có thể cố gắng thêm toàn bộ truy vấn vào truy vấn ban đầu để liệt kê mật khẩu từ một bảng tùy ý. Sử dụng các trường mật khẩu được mã hóa được khuyến khích mạnh mẽ Ví dụ #2 Liệt kê các bài báo. và một số mật khẩu (bất kỳ máy chủ cơ sở dữ liệu nào) ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0 ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0Phần tĩnh của truy vấn có thể được kết hợp với một câu lệnh ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --5 khác tiết lộ tất cả mật khẩu ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --Nếu truy vấn này (chơi với ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --3 và ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --2) được gán cho một trong các biến được sử dụng trong $query, con thú truy vấn sẽ thức tỉnh SQL UPDATE cũng dễ bị tấn công. Các truy vấn này cũng bị đe dọa bằng cách cắt và thêm một truy vấn hoàn toàn mới vào nó. Nhưng kẻ tấn công có thể loay hoay với mệnh đề ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --5. Trong trường hợp này, một số thông tin lược đồ phải được sở hữu để thao tác truy vấn thành công. Điều này có thể có được bằng cách kiểm tra các tên biến biểu mẫu hoặc chỉ đơn giản là cưỡng bức vũ phu. Không có nhiều quy ước đặt tên cho các trường lưu trữ mật khẩu hoặc tên người dùng Ví dụ #3 Từ việc đặt lại mật khẩu. để đạt được nhiều đặc quyền hơn (bất kỳ máy chủ cơ sở dữ liệu nào) ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --6Nhưng nếu một người dùng độc hại gửi giá trị ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --7 đến $uid để thay đổi mật khẩu của quản trị viên hoặc chỉ cần đặt $pwd thành ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --8 để có thêm đặc quyền, thì truy vấn sẽ bị xoắn ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --9
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0 Một ví dụ đáng sợ về cách các lệnh cấp hệ điều hành có thể được truy cập trên một số máy chủ cơ sở dữ liệu Ví dụ #4 Tấn công hệ điều hành máy chủ cơ sở dữ liệu (MSSQL Server)
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0 $offset = $argv[0]; // beware, no input validation! 4 tới $prod, thì $query sẽ là
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0Máy chủ MSSQL thực thi các câu lệnh SQL trong lô bao gồm lệnh thêm người dùng mới vào cơ sở dữ liệu tài khoản cục bộ. Nếu ứng dụng này đang chạy dưới dạng $offset = $argv[0]; // beware, no input validation! 7 và dịch vụ MSSQLSERVER đang chạy với đủ đặc quyền, thì kẻ tấn công giờ đây sẽ có một tài khoản để truy cập vào máy này
kỹ thuật tránhMặc dù rõ ràng là kẻ tấn công phải có ít nhất một số kiến thức về kiến trúc cơ sở dữ liệu để tiến hành một cuộc tấn công thành công, nhưng việc thu thập thông tin này thường rất đơn giản. Ví dụ: nếu cơ sở dữ liệu là một phần của mã nguồn mở hoặc gói phần mềm có sẵn công khai khác với cài đặt mặc định, thì thông tin này hoàn toàn mở và có sẵn. Thông tin này cũng có thể được tiết lộ bằng mã nguồn đóng - ngay cả khi nó được mã hóa, làm xáo trộn hoặc biên dịch - và thậm chí bằng chính mã của bạn thông qua việc hiển thị các thông báo lỗi. Các phương thức khác bao gồm người dùng tên bảng và cột chung. Ví dụ: biểu mẫu đăng nhập sử dụng bảng 'người dùng' có tên cột 'id', 'tên người dùng' và 'mật khẩu' Các cuộc tấn công này chủ yếu dựa trên việc khai thác mã không được viết với mục đích bảo mật. Không bao giờ tin tưởng vào bất kỳ loại thông tin đầu vào nào, đặc biệt là thông tin đến từ phía khách hàng, ngay cả khi nó đến từ hộp chọn, trường nhập ẩn hoặc cookie. Ví dụ đầu tiên cho thấy một truy vấn vô tội vạ như vậy có thể gây ra thảm họa
Bên cạnh đó, bạn được hưởng lợi từ việc ghi nhật ký các truy vấn trong tập lệnh của mình hoặc bởi chính cơ sở dữ liệu, nếu nó hỗ trợ ghi nhật ký. Rõ ràng, việc ghi nhật ký không thể ngăn chặn bất kỳ nỗ lực gây hại nào, nhưng có thể hữu ích để truy ngược lại ứng dụng nào đã bị phá vỡ. Bản thân nhật ký không hữu ích, nhưng thông qua thông tin chứa trong đó. Chi tiết hơn nói chung là tốt hơn ít hơn |