[모의해킹 스터디] CTF - SQL Injection 2

바울·2024년 12월 2일
0

모의해킹 스터디

목록 보기
15/40

문제

진짜 데이터를 찾는 문제이다. 여러 가짜 데이터가 존재하는 걸까?


풀이

placeholder 값이 "normaltic"으로 되어있는 것 말고는 별다른 특이점은 없는 것 같다.

notmaltic을 입력해 보니 id랑 info에 값이 생겼다. 다른 정보도 입력해 보았지만 id 부분만 입력한 값으로 생성되고 info 부분은 아무런 값도 생성되지 않았다.

조건문도 문제없이 잘 되는 걸 볼 수 있다. 그럼 column 개수를 확인해 보자.

6개부터 화면에 출력되는 것으로 보아 column 개수가 6개라는 걸 알 수 있다. 원래 대로라면 우리가 입력한 query는 다음 row로 들어가서 다음 줄에 출력되어야 정상이지만 현재 페이지는 첫 번째 row만 화면에 출력되게 하는 것 같다. 그럼 첫 번째 row 말고 두 번째 로우를 화면에 출력하는 법은 없을까? 물론 있다! limit을 사용하면 된다. limit을 사용하면 내가 원하는 행부터 화면에 출력되게 할 수 있다.

normaltic' union select 1,2,3,4,5,6 limit 1,1 #

limit은 0+1로 생각하면 쉽다. 우리가 입력한 값은 2번째 행부터이기 때문에 1,1을 입력해서 결과를 보니 info 부분에 6이 들어간 걸 알 수 있다. 이걸 이용해서 순차적으로 sql injection을 진행해 보자.

DB 이름은 sqli_5이다. table 이름을 찾아보자!

table 이름은 flag_honey이다. column을 찾아보자!

flag라는 column을 찾았다. 데이터를 확인해 보자!

문제를 생각해보니 진짜 데이터를 찾아라.. 이런 가짜 데이터 때문 이었나보다..

다른 행에 flag가 있을 수도 있기 때문에 count를 사용해 값이 몇 개인지 확인해 보았지만 flag column에는 값이 한 개이기 때문에 다른 column이 존재하는지 살펴보자.

flag_honey table에 column도 한 개이다. 이러면 다른 table이 존재할 가능성이 높다. 다른 table을 찾아보자!

count를 이용해 table 개수를 확인해 보니 3개가 나왔다. 처음에 찾은 flag_honey를 제외하면 2개의 table이 더 존재한다는 걸 알 수 있다. limit을 이용해 다른 table들도 확인해 보니 secret이라는 의심스러운 이름에 table이 나왔다.

flag라는 이름에 column을 찾았다!

여기도 가짜 데이터가 있을 줄은 몰랐다.. 하지만!

여기는 2개의 데이터가 존재한다. 다른 limit을 이용해 다른 행을 살펴보자!

진짜 flag를 찾을 수 있다!

0개의 댓글