Guides & Other Methods of SQL Injection

Oracle SQL Injection

Bạn đọc tham khảo Union và DIOS tại: HereHere

Guides about SQL Injection

Không nhất thiết phải inject qua url (search box,...)
Trong các website, có thể có các filter (bộ lọc) và có một số cách bypass cơ bản:

SQL Injection using User Agent

User Agent là một thông số có trong các packet, có dạng như:

Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Nghe có vẻ lạ nhưng ở một số nơi họ có thể thu thập thông tin UA để phân tích đánh giá lưu lượng truy cập chẳng hạn. Do đó chúng ta có thể lợi dụng điều này

Ví dụ, chúng ta có 1 page visit.php như sau:

<?php

$link = new mysqli('localhost', 'root', 'root', 'analytics');

$query = sprintf("INSERT INTO visits (ua, dt) VALUES ('%s', '%s')",
$_SERVER["HTTP_USER_AGENT"],
date("Y-m-d h:i:s"));

$link->query($query);

?>

Do website chỉ thu thập dữ liệu chứ không hiển thị gì từ database nên chúng ta có thể dùng phương pháp Error Based Injection hoặc Blind SQL Injection. Ví dụ mình sử dụng Blind SQL Injection trong trường hợp xấu hơn:

curl -A "Mozilla/5.0', (select sleep(20) from users where substring(name,1,1)='a')) #" http://worldend.com/visit.php

SQL Injection using Cookie

Cookie cũng có thể tiềm ẩn những nguy cơ SQLi, lí do là vì có thể website muốn lưu lại thông tin gì đó vào database, hoặc trong cookie có chứa thông tin, command về query SQL. Bạn đọc có thể tham khảo 1 case dưới đây, đã bao gồm chi tiết các bước khai thác: Here

SQL Injection using XML Upload Form

Đối với các form upload XML file, thường thì đầu tiên chúng ta sẽ cố gắng khai thác theo hướng như XXE chẳng hạn. Tuy nhiên, nó cũng có thể tiềm ẩn lỗ hổng SQLi nếu server có lưu trữ thông tin hoặc có liên hệ với file XML này. Với case này, bạn đọc có thể xem qua 1 vụ bug bounty với reward 4000$ trong hệ thống Starbucks tại: Here

SQL Injection at key of array

Thông thường, chúng ta thường bypass và inject ở dạng:

worldend.com/store.php?id=1') blah blah

Tuy nhiên đối với phương pháp này, bypass sẽ có dạng:

worldend.com/store.php?id[inject_here][]...=foo

Dấu 3 chấm ở đây có nghĩa có thể inject số lượng chiều tuỳ ý cho mảng. Để hiểu thêm, các bạn đọc 2 cases tại: HereHere

Mình sẽ giải thich sơ lược lối khai thác trong case thứ 2 ở hackerone. URL được craft có dạng:

worldend.com/profile/deleteInvitation?invitationID[1%3dbenchmark(40000000,sha(1))+and+1]=balisong

Khi đó, website sẽ gán key của mảng vào $subField và giá trị tương ứng vào $subValue. Sau đấy 2 biến này sẽ được đưa vào query SQL sau khi đi qua một số function. Cuối cùng query SQL sẽ có dạng:

delete from GDN_Invitation where 1=benchmark(40000000,sha(1)) and 1 = 'balisong'

Hàm benchmark(count,expr) sẽ thực thi count lần expr. Mục đích của hàm này là để test tốc độ xử lí của database, tuy nhiên ta có thể sử dụng nó như một cách để Blind SQL Injection

Tools

Một số tools phổ biến với đa dạng phương thức tấn công cũng như nhiều lựa chọn để craft query như: SQLMap, BBQSQL (Blind SQLi), NoSQLMap,...

Bên cạnh các tool tự động, với phương pháp truyền thống chúng ta có extension giúp tiết kiệm thời gian như HackBar. Lợi ích khi sử dụng extension này là có thể thêm các kí tự vào URL mà không bị HTML encode/decode cũng như reload trang không cần khởi động lại HackBar,...

SQL Injection Prevention