Skip to content
Tags

SQL injection - Authentication GBK

Estimated time to read: 5 minutes

April 28, 2023


Tài nguyên của challenge này tại https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-authentication-GBK

Link challenge này tại http://challenge01.root-me.org/web-serveur/ch42/

Tổng quan

Trong challenge này, mục tiêu của ta là lấy được quyền admin (tất nhiên không dùng account admin).

Vấn đề gian nan của challenge này là injection theo GBK (GBK Character Encoding).

Với challenge SQL Injection Authentication ta đã tìm được cách bypass password đơn giản. Nhưng điều đó không khả thi với GBK.

Thông thường người ta dùng hàm addslashes()1 để bảo vệ SQL Injection.

Hàm này hoạt động như kiểu filter đầu vào như hình bên dưới

Image title

Hình ảnh mô tả các filter có trong hàm addslashes

Nghĩa là nếu đầu vào ta nhập admin' thì sẽ biến đổi thành admin\'. Vậy nên ta có thể dùng GBK mã hóa các kí tự để có thể bypass được password.

Well, phân tích xong rồi, chúng ta đến với kịch bản tấn công nào.

Kịch bản tấn công

Bước 1: Kiểm tra website

Đầu tiên ta xem xét website và bật Burp Suite quan sát gói tin

Image title

Hình ảnh challenge

Quay trở lại đoạn code giả tưởng của ta ở challenge SQL Injection Authentication

SELECT * FROM Users WHERE username ='admin' AND password ='admin'

Mục tiêu hiện tại của ta là tiêm payload admin'OR 1=1-- vào username để có thể bypass password và đoạn code trên sẽ thành

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

Ngay lập tức ta bị filter và bị lỗi nhận dạng như hình bên dưới

Image title

Hình ảnh mô tả gói tin

Ta phân tích gói tin, rõ ràng ta truyền vào admin'OR 1=1-- nhưng khi bật Burp Suite ta thấy thông tin này được mã hóa (HTML URL Encoding) thành admin%27OR+1%3D1-- và vẫn nhận được lỗi không nhận dạng được username, tức bị filter rùi ::). Ta sẽ tìm cách mã hóa input này để bypass filter.

Chậm lại và suy nghĩ 1

Làm thế nào để biết phía BE họ dùng hàm addslashes() để filter đầu vào trong việc truy vấn vào hệ quản trị cơ sở dữ liệu?

Giải quyết chậm lại suy nghĩ 1

Để trả lời câu hỏi này, ta có thể test thử truyền một mảng username như hình bên dưới

Image title
Hình ảnh kết quả việc tiêm payload trên

Hoặc còn nhiều cách khác, bạn đọc tìm hiểu thử xem!

Bước 2: Tạo payload

Như đã phân tích ở trên, ta nhìn lại 1 vài HTML URL Encoding bên dưới

Character From Windows-1252 From UTF-8
' %27 %27
= %3D %3D
\ %5C %5C

Rồi, payload của ta là admin%27OR+1%3D1-- thì %27 là ngay dấu ' thì ngay lập tức sẽ bị filter và biến đổi thành %5C%27 và dẫn đến việc khiến chúng ta không thực hiện được attack. Nhiệm vụ của ta là phải tìm payload để khi chèn vào và khi payload tự thêm %5C thì sẽ được kết hợp với thứ mình chèn, làm tách chuỗi %5C%27 thành ...%5C%27.

Well, áp dụng GBK mà triển thôi, chọn đại 2 bytes đầu là %DF thì sẽ kết hợp với %5c thành %DF%5C và là 1 kí tự Trung Quốc.

Và payload hoàn chỉnh của ta có thể là 1%df%27OR+1%3D1--%20

Image title

Hình ảnh mô tả việc tiêm thành công payload

Và khi tiêm thành công payload, ta sẽ thấy được Follow redirection và ta click vào chuyển hướng, ta được flag.

Image title

Hình ảnh mô tả flag

Flag

iMDaFlag1337!

Chậm lại và suy nghĩ 2

Tại sao payload ở phía trên phía sau cùng là %20, và tại sao số đầu là 1 chứ không phải admin như input mẫu ban đầu?

Giải quyết chậm lại suy nghĩ 2

Contact me :>

Qua bài SQL Injection Authentication trên, ta để ý rằng trong payload ta tiêm tồn tại điều kiện "OR" và bản chất ở đây là tiêm payload với hoặc username đúng hoặc mệnh đề sau đúng (hiển nhiên mệnh đề sau luôn đúng, vì ta tiêm 1=1 mà :>). Tóm lại đây là loại tấn công Tautologies.

Comments