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

바울·2024년 12월 13일
0

모의해킹 스터디

목록 보기
24/40

문제

flag를 찾는 문제이다.

풀이

로그인 시에는 별다른 특이사항은 없는 것 같다. 마이페이지를 접속해 보자.

db에서 계정 정보를 가져와서 출력하지만 클라이언트 측에서 접근할 방법이 없다.. 정보 수정이 잘못된 정보를 넣으면 에러 메시지가 나올까 하고 여러 시도를 해봤지만 그냥 수정될 뿐 다른 에러는 나오지 않았다.

게시글을 작성해둔후에 작성자 ba라고 검색을 해보았는데 ba라는 글자가 포함된 모든 데이터를 출력한것으로 보아 LIKE절을 사용중인걸 알수있었다. 좀더 자세하게 보기위해 패킷을 확인해보았다.

option_val=username&
board_result=ba&
board_search=%F0%9F%94%8D&
date_from=&date_to=

해당 파라미터에서 알 수 있는 건 option_val은 column이고 board_result 부분에는 우리가 입력한 값이 들어가는 걸 알 수 있다. 서버 측 select 문을 추측해 보자면

select ? from ? where 1=1 and username like '%ba%'

이런 식으로 작성이 돼있을 것이다. 여기서 쿼리를 사용할 수 있을지 확인을 해보았다.

select ? from ? where 1=1 and username like '%ba%'
select ? from ? where 1=2 and username like '%ba%'

and 조건문을 사용해 참일 경우는 값이 출력되고 거짓일 경우에는 아무것도 나오지 않는 걸 확인했다. 이제 화면에 보이고 있는 User ID, Title, Views, Date들이 몇 번째 column을 사용하는 이 알아야 하기 때문에 일단 order by로 column 개수를 확인해 보았다.

order by 11부터 값이 나오지 않는 것으로 보아 column 개수는 10개인걸 확인했다. 이제 몇 번째 column들이 화면에 출력되고 있는지 확인해 보자!

'' union select 1,2,3,4,5,6,7,8,9,10#

column 부분을 잘못된 이름으로 할 경우 에러가 나기 때문에 null 값을 넣어준 후 아무런 값이 없는 상태에서 select 문을 사용해 첫 번째 row로 데이터를 넣어 해당 column 들에 위치를 알아내 주었다. 이제 원하는 데이터를 추출해 보자!

db 이름을 알아냈다 다음으로 table 이름을 추출해 보자!

총 3개의 table이 나왔다. 우리의 목적은 flag를 찾는 거기 때문에 flagTable부터 확인해 보자.

column을 찾았다! 마지막으로 column 안에 있는 데이터를 확인해 보자!

flag를 확인할 수 있다! 항상 느끼는 거지만 서버 측에서 어떤 쿼리문을 사용하고 있는지 유추해 보는 게 중요한 거 같다.

0개의 댓글