SQL Injection bypass login

Hề lố xin chào mọi người lại là mình với series phá đảo Cookie Arena đây :hear_no_evil:!! Bài viết lần này sẽ về 2 lab cùng chủ đề: Simple SQL Injection Bypass LoginSQL Injection bypass login nhé!!

Trước khi nhảy vào làm chúng ta cần điểm lại kiến thức về SQL Injection chứ nhỉ ehehe

Tham khảo từ bài viết của anh Hazy

Lỗ hổng SQL Injection là một kỹ thuật tấn công phổ biến trên các ứng dụng web, trong đó kẻ tấn công chèn các câu lệnh SQL độc hại vào các trường nhập liệu của ứng dụng, để có thể thực thi các lệnh SQL không mong muốn hoặc lấy thông tin từ cơ sở dữ liệu.
Kẻ tấn công thường sử dụng các chuỗi ký tự đặc biệt và câu lệnh SQL để lừa ứng dụng Web và hệ thống quản trị cơ sở dữ liệu (DBMS) của nó. Khi được chấp nhận, các chuỗi này có thể gây ra các tác động xấu, bao gồm:

  • Thực thi các lệnh SQL bất hợp pháp, như chèn thêm, cập nhật hoặc xóa dữ liệu trong cơ sở dữ liệu.
  • Truy cập và đánh cắp dữ liệu nhạy cảm từ cơ sở dữ liệu, như thông tin tài khoản người dùng hoặc thông tin thẻ tín dụng.
  • Thực thi lệnh hệ thống để tạo ra mã độc, Web Shell nhằm kiểm soát hệ thống

Mặc dù trong bài viết trên đã hint sẵn đáp án để giải 2 lab này, cơ mà đi từng bước một để hiểu rõ vấn đề vẫn tốt hơn chứ ha!! :laughing: :laughing:

Mình sẽ giải quyết 2 bài lab này bằng tay - manual testing nhé :sunglasses:

Hãy bắt đầu với lab SQL Injection bypass login

Trong mô tả, ta biết được phần đăng nhập của bài lab dính SQLi, với câu truy vấn SQL là

SELECT * FROM users WHERE username='$username' AND password='$password'

Mục tiêu của chúng ta là phải khai thác lỗi SQLi và đăng nhập vào tài khoản admin

Khởi động lab và vào giao diện đăng nhập

Kiểm tra SQLi với dấu nháy đơn ' (lí do tại sao là dấu nháy đơn đã được anh Hazy giải thích trong bài viết này nha) cả 2 trường username và password, server đều trả về lỗi Internal Server Error do câu truy vấn bị lỗi

Thêm 2 dấu trừ -- vào sau dấu nháy đơn, web trả về thông báo lỗi sai tên đăng nhập/mật khẩu ( do -- là cú pháp comment của SQL)

Trong các trường hợp thực tế thì các Gà nên kiểm tra từng input một thay vì thử cả 2 một lúc giống mình để dễ xác định vị trí dính lỗ hổng SQLi hơn nhé :smiling_face:

Hãy thử đăng nhập tài khoản admin với phần mật khẩu là ' OR 1=1--

Câu truy vấn sẽ có dạng

SELECT * FROM users WHERE username='admin' AND password=' ' OR 1=1-- '

phần AND kiểm tra điều kiện password sẽ luôn đúng, và dấu nháy đơn cuối câu truy vấn đã bị comment loại bỏ làm cho câu truy vấn trên rất chuẩn chỉ về mặt ngữ pháp

Từ đó ta đăng nhập được vào tài khoản admin và flag đã được trả về

Quá dễ!! Mang lab tiếp theo đến đây :triumph:

Simple SQL Injection Bypass Login

Tại mô tả, ta có thêm thông tin đăng nhập guest:guest và mục tiêu của bài lab vẫn là là vào được account của admin.

Khởi động lab

Giao diện đăng nhập

Đăng nhập với tài khoản guest:guest, một thông báo sẽ hiện lên như này

Nếu đăng nhập sai server sẽ trả về thông báo wrong

Vì đã biết được bài lab này dính lỗi SQLi => Ta sẽ khai thác lỗi này để vào được tài khoản admin

Kiểm tra SQLi trong trường password tại chức năng đăng nhập bằng kí tự nháy đơn '

Hiện thông báo lỗi, suy ra ta không thể khai thác SQLi bằng kí tự nháy đơn được

Thử lại với kí tự nháy kép "

và server trả về một màn hình lỗi Internal Server Error


=> câu truy vấn SQL đính kèm dữ liệu nhập vào của chúng ta đã bị lỗi, khiến cho server không hiểu và gây ra lỗi Internal Server Error

Kiểm tra lại lần nữa, cũng với kí tự nháy kép " nhưng thêm 2 dấu trừ -- vào đằng sau


Server lại trả về thông báo wrong => 2 dấu trừ đã comment đoạn sau của câu truy vấn

Từ đó, thực hiện tấn công SQLi để đăng nhập vào tài khoản admin bằng cách điền vào trường password giá trị " OR 1=1 --

Lúc đó câu truy vấn sẽ có dạng SELECT * FROM users WHERE userid="admin" AND password="" OR 1=1 --" => phần AND của câu truy vấn trên luôn đúng => có thể đăng nhập được vào tài khoản admin (theo lý thuyết là thế)

Nhưng mà cái thông báo trả về nó lạ lắm :slight_smile: Vậy là ta không thể thực hiện SQLi vào tài khoản admin qua password giống lab bên trên được rồi :frowning:

Còn cách nào khác không nhỉ? :thinking: :thinking: :thinking: Sẽ thế nào nếu như ta tấn công qua trường userid và bỏ qua phần kiểm tra password? Như này chẳng hạn


Pass nhập bừa đó đừng để ý :smiley:

Vàaaaaaaa

Vậy là chúng ta đã cùng giải xong 2 lab chủ đề SQLi (rất dễ :hear_no_evil:), nhưng mà trên nền tảng Cookie Arena còn rất nhiều lab SQLi khác cũng thú vị không kém đó!!! Nếu gặp thắc mắc gì trong quá trình làm các Gà có thể comment xuống dưới để cùng thảo luận nhé! Iu cả nhà :heart_eyes: