OWASP Top 10 Project - A1:2017 Injection
TIL
763
OWASP Top 10 Project
2
A1:2017 Injection
2
White

Phan Thành Long viết ngày 24/09/2018

OWASP Top 10 Project - A1:2017 Injection

PhanLong 24-09-2018
alt text
Hầu hết mọi nguồn dữ liệu đều có thể là các biến môi trường, các tham số, các dịch vụ web bên ngoài và nội bộ, và tất cả các kiểu người dùng. Nhúng sai sót xảy ra khi kẻ tấn công có thể gửi dữ liệu thù địch đến một thông dịch viên.

Nhúng sai là rất phổ biến. Các lỗ hổng nhúng thường được tìm thấy trong các truy vấn SQL, LDAP, XPath hoặc NoSQL, các lệnh OS, các trình phân tích cú pháp XML, các tiêu đề SMTP, các ngôn ngữ biểu thức và các truy vấn ORM.

Nhúng sai sót dễ phát hiện khi kiểm tra mã. Máy quét và bộ lọc có thể giúp những kẻ tấn công tìm thấy những sai sót.

Nhúng có thể dẫn đến mất dữ liệu, tham nhũng hoặc tiết lộ cho các bên trái phép, mất trách nhiệm giải trình hoặc từ chối truy cập. Nhúng đôi khi có thể dẫn đến việc tiếp quản máy chủ hoàn chỉnh. Tác động kinh doanh phụ thuộc vào nhu cầu của ứng dụng và dữ liệu.

Các dạng lỗi thường gặp:

SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, ...

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

→ Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng.

Câu lệnh này tìm tất tên người dùng trong tất cả CSDL. Tuy nhiên nếu nhập "username" theo một cách khác thì nó trở thành câu truy vẫn với mục đích khác hẳn với LTV.

Ví dụ:

username = "long" or "an"="an"

username = "long" or ""=""

SELECT * FROM users WHERE name = 'long' or 'an'='an';

→ nếu câu lệnh trên dùng để xác thực user thì ngoài user "long" thì user "an" luôn đúng.

username = a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't';

→ Để bảo vệ một trang web khỏi việc nhúng SQL, bạn có thể sử dụng các tham số SQL. Các tham số SQL là các giá trị được thêm vào một truy vấn SQL tại thời gian thực hiện, theo cách được kiểm soát.

userId= getRequestString("UserId"); //@0
SQL= "SELECT * FROM Users WHERE userId = @0"; 
db.Execute(SQL, userId);

Lưu ý rằng các tham số được biểu diễn trong câu lệnh SQL bằng một dấu @. Công cụ SQL kiểm tra từng tham số để đảm bảo rằng nó là chính xác cho cột của nó và được xử lý theo nghĩa đen, và không phải là một phần của SQL được thực hiện.

txtNam = getRequestString("CustomerName"); //@0
txtAdd = getRequestString("Address"); //@1
txtCit = getRequestString("City"); //@2
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);

Tham khảo thêm tại:
https://www.w3schools.com/sql/sql_injection.asp
https://vi.wikipedia.org/wiki/SQL_injection

Blog cá nhân: https://phanlong95.blogspot.com/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Phan Thành Long

2 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
3 0
Chào các bạn, Hôm nay mình sẽ chỉ với các bạn cách mà mình gặp một lỗi html injection, và cách mình biến nó thành lỗi nghiêm trọng với kĩ thuật co...
Nguyễn Hợp Quang viết hơn 1 năm trước
3 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!