SQL INJECTlON WORKSHOP

SQL INJECTlON WORKSHOP

Để ý phần URL, ta sẽ thấy param ?id=1, rất có thể đây là mã định danh của phần bài báo đính kèm bên dưới, ta có thể hình dung tác giả dùng id để Select ra bài viết bằng câu querry như sau:
SELECT content FROM news WHERE id = 1;
Vậy giả sử ta truyền một id = 2 - 1, xem thử ta có thể khai thác SQLi được hay không, nếu kết quả trả về giống với kết quả của id = 1 thì ta có thể khai thác SQLi

Ta thử với payload: 99 UNION SELECT @@version;

Vậy là thành công đọc được version của hệ quản trị cơ sở dữ liệu, và ta cũng xác định được loại cơ sở dữ liệu ở đây là MySQL hoặc là Microsoft

Mục tiêu là đọc được tập tin bí mật, nên ta thử SELECT ra tên các bảng bằng payload sau: 99 UNION SELECT TABLE_NAME FROM information_schema.tables

Ở đây output của câu query đã bị giới hạn, có thể là lấy kết quả trả về đầu tiên, ta thử thêm điều kiện tên bảng cần tìm là LIKE '%secret%' xem sao
Payload: 99 UNION SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '%secret%'

Ta thấy cả hai dấu nháy đơn của chúng ta đều đã bị escape dẫn đến syntax error
Nếu không thể dùng nháy đơn vậy thì dùng GROUP_CONCAT để lấy tên tất cả các bảng gộp chung trên 1 dòng :
Payload: 99 UNION SELECT GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables

Ở đây default nó trả về all database và một số schema mặc định nên hơi nhiều, ta thêm điều kiện là database hiện tại xem sao:
Payload: 99 UNION SELECT GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables WHERE table_schema = database()

Kết quả trả về đã gọn hơn rất nhiều, nếu như không bị escape thì ta đã có thể tìm được tên bảng là secret6 ở payload ở trước, ta thử đọc nội dung của bảng secret6 bằng SELECT * FROM secret6 nhưng không được vì không cùng số cột với câu query trước đó là 1 cột, trong trường hợp này ta buộc phải đọc được tên cột của bảng secret6
Payload: 99 UNION SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns WHERE table_schema = database()

Vậy tên cột của bảng secret6 là id và content, giờ thì ta đọc nội dung của bảng secret6 thôi:

Payload: 99 UNION SELECT content FROM secret6

FLAG: CBJS{eb627f3d394a64184da1a16d6bb8100d}