Hướng dẫn what is sql injection attack in php? - tấn công sql injection trong php là gì?
Nhiều nhà phát triển web không biết làm thế nào các 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 điều khiển truy cập, do đó bỏ qua 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ủ. Show Tiêm 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 đè các lệnh có giá trị hoặc thậm chí để thực hiện 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ằng ứ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 để xây dựng truy vấn SQL. Các ví dụ sau đây dựa trên những câu chuyện có thật, thật không may. 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 một 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 một siêu người dùng trong cơ sở dữ liệu của bạn. Ví dụ #1 chia kết quả được đặt thành các trang ... và tạo siêu người dùng (PostgreSQL)
= $argv[0]; // beware, no input validation! Ngườ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 vào URL. Kịch bản hy vọng rằng bù $ đến 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 nối thêm một dạng urlencode () 'urlencode()'d form of the following to the 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 nó xảy ra, thì kịch bản sẽ trình bày một siêu người dùng truy cập vào anh ta. Lưu ý rằng
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 mà kẻ tấn công cần làm là xem liệu có bất kỳ biến được 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 điều khoản ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0, kẻ tấn công có thể cố gắng nối toàn bộ truy vấn vào bản gốc để 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 viết ... 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; --2 ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --3 Phầ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; -- 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; --5 và -- ) được gán cho một trong các biến được sử dụng trong $ truy vấn, Truy vấn Beast Awakened.Cập nhật SQL 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à nối một truy vấn hoàn toàn mới cho nó. Nhưng kẻ tấn công có thể fiddle với mệnh đề ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --7. Trong trường hợp này, một số thông tin lược đồ phải được sở hữu để thao túng 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. Không có quá 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; --8 Nhưng nếu 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; --9 thành $ uid để thay đổi mật khẩu của quản trị viên hoặc chỉ cần đặt $ pwd thành
0 để đạt được nhiều đặc quyền hơn, thì truy vấn sẽ bị xoắn:
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 của cơ sở dữ liệu (Máy chủ MSSQL)
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --2
4 Nếu kẻ tấn công gửi giá trị
' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --2
8 Máy chủ MSSQL thực thi các câu lệnh SQL trong lô bao gồm một 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
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 mà kẻ tấn công cần làm là xem liệu có bất kỳ biến được 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 điều khoản ' union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable; --0, kẻ tấn công có thể cố gắng nối toàn bộ truy vấn vào bản gốc để 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 viết ... và một số mật khẩu (bất kỳ máy chủ cơ sở dữ liệu nào) Phần tĩnh của truy vấn có thể được kết hợp với một câu lệnh 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 bảo mật. Không bao giờ tin tưởng bất kỳ loại đầu vào nào, đặc biệt là những thứ xuất phát từ phía máy khách, mặc dù nó đến từ một hộp chọn, trường đầu vào ẩn hoặc cookie. Ví dụ đầu tiên cho thấy rằng một truy vấn vô tình như vậy có thể gây ra thảm họa.
Bên cạnh đó, bạn được hưởng lợi từ các truy vấn ghi nhật ký trong tập lệnh của bạn hoặc chính cơ sở dữ liệu, nếu nó hỗ trợ ghi nhật ký. Rõ ràng, việc khai thác không thể ngăn chặn bất kỳ nỗ lực có hại nào, nhưng nó có thể hữu ích để truy tìm lại ứng dụng nào đã bị phá vỡ. Nhật ký không hữu ích, nhưng thông qua thông tin nó chứa. Chi tiết hơn thường tốt hơn ít hơn. Php SQL tiêm là gì?SQL Injection thường xảy ra khi bạn yêu cầu người dùng đầu vào, như tên người dùng/userid của họ và thay vì tên/ID, người dùng cung cấp cho bạn câu lệnh SQL mà bạn sẽ vô tình chạy trên cơ sở dữ liệu của mình. Nhìn vào ví dụ sau tạo câu lệnh CHỌN bằng cách thêm một biến (txtuserid) vào một chuỗi chọn.usually occurs when you ask a user for input, like their username/userid, and instead of a name/id, the user gives you an SQL statement that you will unknowingly run on your database. Look at the following example which creates a SELECT statement by adding a variable (txtUserId) to a select string.
Tấn công tiêm PHP là gì?Tiêm mã PHP là gì?Một cuộc tấn công tiêm mã khai thác lỗi máy tính do xử lý dữ liệu không hợp lệ.Kẻ tấn công giới thiệu mã (hoặc tiêm) vào chương trình máy tính dễ bị tổn thương và thay đổi thực thi.Tiêm mã thành công có thể đưa ra những rủi ro nghiêm trọng.exploits a computer bug caused by processing invalid data. The attacker introduces (or injects) code into the vulnerable computer program and changes the execution. Successful code injections can introduce severe risks.
Tấn công SQL là gì?SQL Injection, còn được gọi là SQLI, là một vectơ tấn công phổ biến sử dụng mã SQL độc hại để thao tác cơ sở dữ liệu phụ trợ để truy cập thông tin không có ý định được hiển thị.Thông tin này có thể bao gồm bất kỳ số lượng mục nào, bao gồm dữ liệu công ty nhạy cảm, danh sách người dùng hoặc chi tiết khách hàng riêng tư.a common attack vector that uses malicious SQL code for backend database manipulation to access information that was not intended to be displayed. This information may include any number of items, including sensitive company data, user lists or private customer details.
SQL tiêm là gì và tại sao nó là một vấn đề?SQL Injection (SQLI) là một lỗ hổng bảo mật web cho phép kẻ tấn công can thiệp vào các truy vấn mà ứng dụng thực hiện vào cơ sở dữ liệu của nó.Nó thường cho phép kẻ tấn công xem dữ liệu mà họ thường không thể truy xuất.a web security vulnerability that allows an attacker to interfere with the queries that an application makes to its database. It generally allows an attacker to view data that they are not normally able to retrieve. |