일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Recon
- tryhackme
- OS Command Injection
- php login page
- access control
- FTZ
- php 로그인 페이지 만들기
- Reconnaissance
- Leviathan
- BANDiT
- active recon
- Authentication
- php To Do List
- sql injection
- Cryptography
- active reconnaissance
- over the wire
- file upload
- 파일 업로드 취약점
- Server Side Request Forgery
- Cookie
- php
- privilege escalation
- php file upload
- overthewire
- THM
- SQLi
- php 파일 업로드하기
- War Game
- ssrf
- Today
- Total
R's Hacking Daily Log
SQLi (4) 본문
이번에 정리할 SQL injection 내용은
Examining the database in SQL injection Attack이다.
:) 앞에서 공부한 내용 중에서 username & password column을 갖는 users table이 있는 걸 공격자가 알고
이 내용을 조회하고 싶어 하는 상황을 가정했다.
:) 사실 이 상황을 살펴보면 공격자는 users table에 대한 정보를 알아내는 단계를 미리 거쳐야 한다.
:) Examining the database는 조회하고자 하는 "other database"의 테이블 정보를 수집하는 과정에서
사용할 수 있는 SQL injection이라 할 수 있다.
Querying the database type and version
어떤 data base를 사용하냐에 따라서 query가 조금씩 달라질 수 있다.
그렇기 때문에 사람들이 흔히 사용하는 대표적인 DB마다 어떤 query를 사용할 수 있는지 간단히 살펴보도록 하자.
우선 DB 종류와 버전을 알아낼 수 있는 query이다.
Database type | Query |
Microsoft, MySQL | SELECT @@version |
Oracle | SELECT * FROM v$version |
PostgreSQL | SELECT version() |
query 내용을 union keywork를 사용해 실행하면 다음과 같은 결과를 볼 수 있을 것이다.
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)
예시에서는 Microsoft SQL server를 사용한다고 나오는 걸 볼 수 있다.
Listing the contents of database
대부분의 DB는 자체적으로 DB에 대한 정보를 제공하는 information_scheme라는 걸 갖는다.
* information_schemesms DB와 연관된 데이터, 다른 말로 meta data를 저장한다.
mysql information_scheme를 검색해 보면
어떤 table이 있는지, 어떤 정보를 알 수 있는 지 확인해 볼 수 있다.
information_scheme를 이용한 query를 하기 위해서는 다음과 같이 작성하면 된다.
SELECT * FROM information_schema.tables
이 Query는 DB안에 있는 모든 table을 출력하라는 의미이다.
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE TABLE
결과를 보면 이 DB 안에는 products, users, feedback이라는 이름의 table이 있다는 걸 확인할 수 있다.
이번에는 table이 어떤 column을 갖는지를 확인할 수 있는 query를 살펴보자.
information_scheme에는 columns라는 table name이 있다.
SELECT * FROM information_schema.columns WHERE table_name = 'Users'
table_name이 users인 table의 column 정보를 모두 출력해!라고 query를 실행하게 되면
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
int형의 userid, string data인 username, password column이 있다는 것을 알아낼 수 있다.
Equivalent to information schema on Oracle
oracle DB는 위에서 살펴본 Query 내용이 조금 다르다.
DB 안에 있는 모든 table을 조회하기 위해선 all_tables
SELECT * FROM all_tables
table에 존재하는 column을 조회하기 위해선 all_tab_columns
SELECT * FROM all_tab_columns WHERE table_name = 'USERS'
'Port Swigger > SQL Injection' 카테고리의 다른 글
SQLi (5) - Lab (0) | 2023.05.01 |
---|---|
SQLi (5) (0) | 2023.04.30 |
SQLi (3) - Lab (0) | 2023.04.28 |
SQLi (3) (0) | 2023.04.27 |
SQLi (2) & Lab (0) | 2023.04.27 |