[Pentest Q&A cùng Tsu] #5: SQL Injection without information_schema

Pre-Q&A
————
Hi, chào các bạn, long time no see. Trước khi bắt đầu post này cần làm rõ rằng các bạn cần có kiến thức căn bản về SQL Injection. Cụ thể là những bước mà 1 người bình thường sẽ làm khi phát hiện ra lỗi SQLi ở một chương trình nào đó (tìm tên bảng, tên cột thông qua information_schema).
Nếu các bạn mới biết về SQLi, mình khuyến khích các bạn xem qua các tuts căn bản khác trước trên google hoặc view qua cái bài củ chuối với kiến thức sai tè le của mình (phần union based) 🙂 http://www.mediafire.com/file/kglfl608766rd11/TTSQLi.pptx

————
Ok vào đề
————

Q1: Bạn ơi, trong lúc pentest mình fuzz ra lỗi sqli rồi, mà bị chặn mất information_schema, bây giờ mình phải làm sao.

A1: Đầu tiên mình sẽ nói lại về information_schema

Trong cơ sở dữ liệu luôn có 1 database là information_schema, đây là 1 metadata, bao gồm tất cả dữ liệu trong cơ sở dữ liệu. Trong databases này có 2 bảng là tables chứa tên của các table hiện có trong tất cả databases, và bảng columns chứa tên của các column hiện có trong tất cả database. Dựa vào đây ta có thể tìm được tên bảng, tên cột để tiến hành select được data cần thiết.

Q2: Ờ biết rồi, mình hỏi làm sao bypass cơ mà?

A2: Một cách bypass mà có lẽ nhiều người đã biết, đó là “union table”, cụ thể chúng ta sẽ làm 3 bước sau:

1/ Đoán hoặc bruteforce ra được table_name (vì table_name thường đặt rất dễ biết như users, address, info ..v..v.)

2/ Tạo ra một bảng mới với column_name mà chúng ta tự đặt sử dụng union based method

3/ Select dữ liệu mà chúng ta cần ra mà không cần biết column_name là cái vẹo gì 🙂

Như các bạn đã biết, để select dữ liệu, chúng ta thực hiện câu query: Select column_name from table_name , ở đây chúng ta đã tạo được 1 table fake với column_name tự đặt, vậy thì chỉ cần select ra thôi 😀

Q3: Cách của bạn chuối vãi, cuối cùng cũng phải đoán tên table???
Thế lỡ không đoán được thì sao??? bobo putang cyka

A3: Ok, Challenge Accepted.

Mình xin confirm lại vấn đề ở đây là:
SQLi được, nhưng bị filter information_schema, không đoán được tên table, tên column luôn, đúng hem? Let see….

MySQL ver 5.6 và upper có 1 “default storage engine” gọi là InnoDB.

Đi kèm với cái default storage engine này là 2 tables mới:

Thử digging vào 2 tables này xem thế nào…. Oops XD….:

Có table_name rồi đó, biết phải làm gì chưa? Trở về đầu bài đọc lại

Advertisements

7 thoughts on “[Pentest Q&A cùng Tsu] #5: SQL Injection without information_schema

  1. Pingback: [Pentest Q&A cùng Tsu] #0: Introduction | Tsu BlogS ٩(^‿^)۶

  2. Pingback: PwC’s Hackaday Web 500pts write up – Hello World!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s