SQL Injection là gì là một trong những từ khóa được tìm kiếm nhiều nhất trên google về chủ đề SQL Injection là gì. Trong bài viết này, coder.com.vn sẽ viết bài SQL Injection là gì? Hướng dẫn cách kiểm tra SQL Injection mới nhất 2020
SQL Injection là gì?
SQL injection là một kỹ thuật tấn công vào hệ thống cơ sở dữ liệu của áp dụng (web, mobile hoặc laptop …) thông qua việc kẻ tấn công lợi dụng lỗ hổng kiểm duyệt dữ liệu đầu vào và thi hành các câu lệnh SQL bất hợp pháp. kết quả của hành động này có khả năng đáng báo động.
Như chủ đạo tên của nó, mục đích của cuộc tiến công SQL injection là tiêm mã SQL phi pháp, độc hại vào áp dụng.
Tại các ứng dụng có dữ liệu này được chỉ định đi đến cơ sở dữ liệu như:
- Biểu mẫu (form) đăng nhập – người sử dụng nhập dữ liệu đăng nhập
- Mẫu biểu tìm kiếm – người dùng nhập dữ liệu tìm kiếm
Thay vì nhập dữ liệu chính xác, kẻ tấn cống sẽ nhập một câu lệnh truy vấn độc hại bất cứ nào vào, thì có thể xảy ra một số thiệt hại trầm trọng đối với cơ sở dữ liệu , toàn bộ hệ thống.
SQL injection được hành động với ngôn ngữ lập trình SQL. SQL (Structured Query Language) được dùng để quan sát cũng như quản lý dữ liệu được giữ tại cơ sở dữ liệu được lưu trong cơ sở dữ liệu. do đó, tại cuộc tấn công SQL injection này, câu lệnh của SQL được sử dụng như một mã độc hại.
Đây được coi là tấn công phổ biến nhất, vì cơ sở dữ liệu được sử dụng hầu như cho tất cả những công nghệ.
Xem thêm: Stored Procedure là gì? Cách viết và sử dụng Stored Procedures hiện nay?
Hậu quả khi bị tấn công SQL injection
Mục tiêu chủ đạo của tiến công này là hack cơ sở dữ liệu của hệ thống, vì đa phần hệ thống hiện nay đều có cơ sở dữ liệu để lưu thông tin. thế nên kết quả của cuộc tấn công này thật sự rất lớn.
Các điều sau đây có thể là kết quả của tấn công SQL injection:
- Hack tài khoản của người khác.
- Ẳn cắp , sao chép dữ liệu nhạy cảm của trang web hoặc hệ thống.
- điều chỉnh dữ liệu của hệ thống, gây ra sai lệch dữ liệu.
- Kẻ tấn công có thể đăng nhập với tư cách người sử dụng hợp pháp, ngay cả với tư cách quản trị viên.
- Kẻ tiến công có khả năng xem nội dung cá nhân thuộc về người dùng khác, ví dụ: chi tiết về hồ sơ (profile) của người sử dụng khác, chi tiết về giao dịch của họ, v.v..
- Kẻ tiến công có thể điều chỉnh nội dung cấu hình ứng dụng và dữ liệu của những người sử dụng khác.
- Kẻ tiến công có thể sửa đổi cấu trúc cơ sở dữ liệu; thậm chí xóa những bảng tại cơ sở dữ liệu của áp dụng.
- Kẻ tiến công có khả năng kiểm soát máy chủ cơ sở dữ liệu , thực hiện những lệnh trên theo dự định.
Các kết quả được liệt kê ở trên thật sự có khả năng xem là nghiêm trọng, vì việc khôi phục cơ sở dữ liệu có thể tốn cực kì nhiều chi phí. Nó có thể khiến công ty mất tiếng tăm. vì thế, việc bảo vệ hệ thống trước loại tiến công này , coi thử nghiệm bảo mật là một điều không thể thiếu hàng đầu và là một khoản đầu tư tốt cho danh tiếng sản phẩm , doanh nghiệp.
Bản chất của tấn công SQL injection
Để kiểm duyệt, trước tiên bạn phải cần tìm các phần hệ thống dễ bị thương tổn (vulnerable) và sau đấy thử gửi một đoạn mã SQL độc hại thông qua các ô nhập dữ liệu đầu vào. nếu hệ thống có lỗi này thì mã SQL có hại được tiêm vào sẽ được gửi tới truy vấn cơ sở dữ liệu tại áp dụng và thực thi nó.
Bất kỳ vị trí nào có nhập dữ liệu đầu vào và có liên kết với cơ sở dữ liệu thì phải nên kiểm duyệt bằng cách: Thay vì nhập một dữ liệu chuẩn xác tôi sẽ nhập bất cứ một mã SQL độc hại nào , thấy hệ thống thực thi mã được nhập vào thì chuẩn xác là đã gặp gỡ lỗi SQL injection.
Để thực hiện cuộc tiến công này, phải thay đổi hành động , mục đích của một truy vấn cơ sở dữ liệu phù hợp với từng hoàn cảnh. Một trong các phương pháp khả thi để thực thi nó là giúp cho truy vấn luôn luôn đúng và sau đấy chèn mã độc. thay đổi truy vấn thành luôn luôn đúng có khả năng được thực hiện bằng một mã dễ dàng ' OR 1 = 1; --
Người thực hiện kiểm duyệt nên lưu tâm rằng trong thời gian kiểm duyệt coi việc đổi truy vấn thành mãi mãi đúng có thể được thực hiện nữa không, thì nên thử các trích dẫn khác nhau – đơn và đôi. Dó đấy , nếu như đã thử một mã ' OR 1=1;--
, cũng nên thử với " OR 1=1;--
Ví dụ: Hãy giả sử rằng có một truy vấn, đó là tìm kiếm từ đã nhập trong bảng cơ sở dữ liệu:
1 2. 3. 4. | <span class=”keyword”>select</span> * <span class=”keyword”>from</span> notes nt <span class=”keyword”>where</span> nt.subject = ‘search_word‘; |
Thay vì tìm từ tìm kiếm, hãy nhập truy vấn SQL injection ' OR 1=1;--
và thì truy vấn sẽ mãi mãi đúng. , sẽ trở nên
1 2. 3 4 | <span class=”keyword”>select</span> * <span class=”keyword”>from</span> notes nt <span class=”keyword”>where</span> nt.subject = ‘ ‘ <span class=”keyword”>or</span> <span class=”number”>1</span>=<span class=”number”>1</span>;<span class=”comment”>–</span> |
trong hoàn cảnh này, tham số subject
của người sử dụng được đóng với '
và sau đó chúng ra có mã or 1=1
và việc làm này làm cho một truy vấn mãi mãi đúng. Với ký hiệu --
sẽ bình luận
phần khác của mã truy vấn sẽ, và phần mã đằng sau sẽ không nên thực thi. đây là một trong những cách phổ biến nhất và dễ nhất để bắt đầu làm chủ truy vấn.
một số mã khác cũng có thể được dùng để làm cho truy vấn mãi mãi đúng, như:
‘ or ‘abc‘=‘abc‘;--
‘ or ‘ ‘=‘ ‘;--
Phần quan trọng nhất ở đây chính là Khi mà đã có dấu phẩy, chúng ta có khả năng nhập bất cứ mã độc nào, mà chúng ta mong muốn nó được thực thi. Ví dụ: Nó có thể là ‘ or 1=1; drop table users; --
nếu câu lệnh tiêm trên được thực thi, thì bằng users
trong cơ sở dữ liệu sẽ bị xóa. nếu việc câu lệnh trên có thể chạy thì bất cứ mã độc nào khác cũng có thể được viết vào. Trogn hoàn cảnh này phụ thuộc vào kiến thức và mục đích của kẻ tiến công.
Cách kiểm tra SQL injection
Kiểm duyệt lỗ hổng này có thể được thực hiện rất giản đơn. có nhiều khi nó chỉ cần nhập một biểu hiện bất thường nào như ‘ or “
. nếu nó trả về bất cứ lên tiếng bất ngờ (unexpected) nào, thì chúng ta chắc chắn rằng hoàn cảnh này là SQL injection. Ví dụ:: nếu như thu được công bố lỗi như Internal Server Error
tại kết quả của tìm kiếm, thì có thể khẳng định rằng cuộc tiến công SQL injection này có khả năng xảy ra tại hệ thống.
Những kết quả khác, có thể thông báo rằng có thể tiến công SQL injection:
- Trả về một trang trống.
- không có thông báo lỗi hoặc thành công – công dụng và trang không bức xúc với đầu vào.
- công bố thắng lợi cho mã độc được nhập vào.
Hãy dựa vào hoàn cảnh thực tế để đoán biết.
Ví dụ: Hãy kiểm duyệt xem cửa sổ đăng nhập có đễ bị tấn công đối với SQL injection không. trong trường hợp này, trường username , mật khẩu, chỉ cần nhập dấu '
như ảnh phía dưới.
nếu đầu vào trả về lên tiếng lỗi hoặc bất cứ hậu quả không phù hợp nào khác, thì có khả năng đoán cam kết rằng cuộc tấn công SQL injection có thể xảy ra. công bố lỗi đồng nghĩa với ảnh
Kiểm tra SQL injection
bằng một trích dẫn '
là một cách đáng tin yêu để kiểm tra coi cuộc tấn công này có khả thi nữa không.
Nếu như trích dẫn đơn '
không trả về bất kỳ hậu quả không hợp lý nào, thì có thể thử nhập dấu nháy kép "
và kiểm duyệt kết quả.
Bên cạnh đó, mã SQL để thay đổi truy vấn luôn luôn đúng 'OR 1=1;--
có khả năng được coi là một cách để kiểm duyệt coi cuộc tấn công này có khả thi nữa không. Nó đóng tham số , điều chỉnh truy vấn thành True
. vì thế, nếu đừng nên xác thực, đầu vào như vậy cũng có thể trả về bất kỳ hậu quả không mong muốn nào , thông báo cũng giống như, , khẳng định rằng cuộc tấn công SQL injection có thể xảy ra trong hoàn cảnh này.
Kiểm tra các cuộc tiến công SQL có thể được thực hiện từ liên kết của trang website. Giả sử chúng tôi có một liên kết http://35.190.155.168/cf5ef2940d/fetch?id=1
trả về nội dung của một file ảnh. tại hoàn cảnh này, id
là tham số , 1
là giá trị của nó.
Nếu như tại liên kết, chúng tôi sẽ điền '
thay vì 1
để kiểm duyệt. tại hoàn cảnh này, nếu như liên kết http://35.190.155.168/cf5ef2940d/fetch?id='
trả về một lên tiếng lỗi Internal Server Error
hoặc một trang trống hoặc bất kỳ lên tiếng lỗi không ước muốn nào khác, thì chắc chắn đây chính là SQL injection. có khả năng gởi mã SQL khó khăn hơn.
không chỉ có thông báo lỗi không mong muốn mới có khả năng được coi là lỗ hổng SQL injejction. không ít người kiểm duyệt kiểm tra những cuộc tấn công có khả năng chỉ theo công bố lỗi. tuy nhiên, cần nhớ rằng, không hề có lên tiếng lỗi xác thực hoặc công bố chiến thắng nào cho mã cũng có thể là một dấu hiệu, rằng cuộc tiến công này khả thi.
Có thể bạn quan tâm: ASP.NET Core là gì? ASP.NET Core ra đời trong hoàn cảnh nào?
Tóm lại
- Qua bài đăng mình đã recommend về SQL injection, thực chất , cách kiểm duyệt một áp dụng có lỗi SQL injection nữa không.
- Từ đây có thể áp dụng để thực thi những câu lệnh SQL phức tạp hơn
Nguồn: https://techtalk.vn/