CTF : SQLi 1

DATE : 2023/12/03

UNION SQL INJECTION PROCESS에서 공부한 내용으로 간단한 CTF 문제를 풀어볼 시간이다. ~.~

사이트에 들어가면 총 4개의 계정 정보를 볼 수 있다.

우리의 목표는 게시판에서 실행되는 Query를 활용해 다른 Table에 있을 Flag를 찾아내는 것이다.

그렇기 위해서는 우선 SQL injection을 수행할 수 있는 지의 여부를 파악해야 한다.

일부러 항등원인 값을 넣어 "bello"를 입력했을 때와 동일한 결과가 나오는 지 확인해보았다.

결과가 동일하게 나오는 걸 보니 주입한 Query가 문제 없이 동작하는 듯 하다!

그럼 이제 서버에서 실행되고 있는 Query가 몇 개의 COLUMN을 가져오는 지 알아내 보자.

UNION을 이용해서 column이 1개, 2개, 3개,... 늘려 나가다 보면

column 수를 4개로 맞췄을 때, 결과가 나오는 걸 볼 수 있다.

이 말은 즉, 서버에서 작성해둔 구문이 4개의 column을 결과로 보여준다는 뜻이다.

column의 개수를 알아냈으니 이제 DB, TABLE, COLUMN 정보를 알아가 보자.

bello' union select 1,database(),1,1 #

column이 4개라고 했는데, 화면에 제공되는 값 또한 4개이므로

어느 위치에 얻고자 하는 값을 넣든 상관이 없다!

database 이름은 2번째 column에 출력 되도록 Query를 주입해보았다.

결과는 database : sqli_1

그럼 이제 DB 안에 어떤 table이 들어있는 지 물어볼 수 있다.

bello' union select 1,table_name,1,1 from information_schema.tables where table_schema='sqli_i' #

DB sqli_1 안에 어떤 테이블이 들어있니~? 물어봤더니

flag_table, user_info라는 2개의 Table이 들어 있다고 한다.

우리의 목표는 flag이기 때문에 flag_table의 정보를 알아내 보자.

bello' union select 1,1,1,column_name from information_schema.columns where table_name='flag_table' #

이번에는 flag_table 안에 어떤 column이 있는 지 알려 달라는 Query를 넣어보았다.

그랬더니 flag라는 column이 들어 있다고 한다!

그럼 이제 flag column에 어떤 값이 들어있는 지 알아낼 수 있다. 😏

flag_table에서 flag column 값을 출력해! 라고 했더니 이번 문제의 flag를 알려준다. 👍

이렇게 해서 SQLi 1 문제 해결!!

Last updated