
SQL Injection 1번 문제는 주어진 사이트에서 비밀 데이터(flag)를 찾아야 한다.

주어진 사이트를 접속해보면 위와 같이 검색을 할 수 있고, 검색 시 ID, Level, Rank Point, Rate를 확인할 수 있는 페이지다.
과정1 - SQL Injection 포인트 찾기
flag를 찾기 위해 가장 먼저 찾아야 하는 것이 SQL Injection이 적용되는 지점을 찾아야 한다. 1번 문제답게 비교적 쉽게?(사실 대놓고..) 찾을 수 있다. 바로 검색창이다. 사실 사용자가 별다른 입력할 곳이 검색창 말고는 없기 때문에 가장 먼저 검색창에서 SQL Injection이 적용이 되는지부터 확인했다.
보다시피 검색 필터가 User ID로 되어 있으니 입력한 키워드와 서버 데이터베이스에 있는 데이터와 일치하면 그게 맞는 결과가 출력되는 것 같다. 위에서 확인할 수 있는 'bello'라는 아이디로 검색을 해봤다.

ID가 'bello'인 데이터가 웹 페이지에 나타났다. 'bello'가 아닌 'bell', 'bel', 'be'로 검색해도 같은 결과가 나오는 것으로 보아 LIKE절을 사용해서 입력된 키워드가 포함된 데이터 전체가 출력된다고 예측할 수 있다.

이번에는 SQL Injection이 제대로 작동하는 지 확인했다. ' or '1로 검색을 했을 때와 아무것도 입력하지 않고 검색 했을 때의 결과가 같다.

이번에는 틀린 조건을 주어 확인해 본 결과 없는 데이터를 검색했을 때와 결과가 같다. 이로써 SQL Injection이 정상적으로 작동하는 것을 알 수 있다.
과정2 - Column 개수 찾기
SQL Injection 포인트를 찾았으니 이번에는 해당 테이블의 컬럼 개수를 파악해 보겠다.

order by 4까지는 정상적으로 데이터가 나오고

order by 5부터 데이터가 나오지 않는 것을 보아 컬럼 개수는 4개인 것을 알았다.
과정3 - 출력되는 컬럼 위치 찾기
앞선 과정에서 컬럼 개수까지 파악했다. 이제 UNION 구문을 사용해서 select문을 하나 더 작성했을 때 결과가 출력되는 컬럼을 찾아볼 것이다. 실제 테이블의 컬럼도 4개고 위에서 보다시피 보여지는 데이터의 결과도 ID, Level, Rank Point, Rate로 4개이므로 당연히 여기서 결과가 나오겠지만 정확하게 짚고 넘어가고자 과정을 생략하지 않았다.

UNION 구문을 사용해서 데이터가 출력되는 컬럼을 확인해 본 결과, select 문에 작성된 것이 컬럼별로 순서대로 나오는 것을 확인했다.
과정4 - DB 이름 찾기

DB 이름을 찾을 때는 select database()를 사용해서 찾을 수 있다. union select 1,2,3,4에서 1,2,3,4 중 2 대신 database()를 입력 하고 확인한 결과 DB 이름이 'sqli_1'인 것을 확인했다.
과정5 - Table 이름 찾기
DB 이름도 찾았겠다 이번에는 현재 사용되는 테이블의 이름을 찾기 위해 'sqli_1'에 있는 모든 테이블 명을 찾아봤다.

' union select 1, table_name,3,4 from information_schema.tables where table_schema = 'sqli_1' # 를 입력해서 'sqli_1'에 있는 모든 테이블을 확인해 본 결과 flag_table, plusFlag_Table, user_info로 3개의 테이블이 있는 것을 확인했다.
과정6 - Column 이름 찾기

' union select 1, column_name,3,4 from information_schema.columns where table_name = 'flag_table' # 를 입력. flag 컬럼 한 개만 있는 것을 확인했다.
과정7 - 데이터 추출
이제 flag 컬럼에 있는 모든 데이터를 출력해 보면? ' union select 1,flag,3,4 from flag_table # 를 검색.

flag를 찾을 수 있었다.
SQL Injection 1번 문제답게 가장 기본이되는 프로세스를 따라가면 쉽게 찾을 수 있는 문제였다.
'NS > CTF' 카테고리의 다른 글
| [Week5/CTF] Secret Login (3) | 2024.05.22 |
|---|---|
| [Week5/CTF] PIN CODE Bypass (2) | 2024.05.22 |
| [Week5/CTF] Get Admin (2) | 2024.05.22 |
| [Week5/CTF] Login Bypass 1,2 (1) | 2024.05.22 |
| [Week4] Burp Suite - CTF(간단 퀴즈) (0) | 2024.05.13 |