CTF : SQLi 1
DATE : 2023/12/03
Last updated
DATE : 2023/12/03
Last updated
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 정보를 알아가 보자.
column이 4개라고 했는데, 화면에 제공되는 값 또한 4개이므로
어느 위치에 얻고자 하는 값을 넣든 상관이 없다!
database 이름은 2번째 column에 출력 되도록 Query를 주입해보았다.
결과는 database : sqli_1
그럼 이제 DB 안에 어떤 table이 들어있는 지 물어볼 수 있다.
DB sqli_1 안에 어떤 테이블이 들어있니~? 물어봤더니
flag_table, user_info라는 2개의 Table이 들어 있다고 한다.
우리의 목표는 flag이기 때문에 flag_table의 정보를 알아내 보자.
이번에는 flag_table 안에 어떤 column이 있는 지 알려 달라는 Query를 넣어보았다.
그랬더니 flag라는 column이 들어 있다고 한다!
그럼 이제 flag column에 어떤 값이 들어있는 지 알아낼 수 있다. 😏
flag_table에서 flag column 값을 출력해! 라고 했더니 이번 문제의 flag를 알려준다. 👍
이렇게 해서 SQLi 1 문제 해결!!