sfw5 문제에 들어가면 위 사진처럼 회원가입 페이지와 로그인 페이지로 나뉩니다. 아이디와 비밀번호는 간단하게 만들어서 로그인해보겠습니다.
이 부분은 제가 삽질한 부분도 포함됩니다. 지금처럼 로그인을하면 왼쪽 상단에 아이디가 뜨고 게시글을 적으면 아래에 게시글 목록들이 뜨는 것을 알 수 있습니다. 그리고 플래그 부분을 들어가보니 관리자 계정의 아이디와 비밀번호를 획득해야 플래그를 얻는 구조 같습니다.
삽질 시작 1...
제가 이 문제에서 엄청 삽질을 많이 했습니다. 우선 처음은 취약점 위치를 잘못 파악해서 한 삽질이었습니다. information schema관련 문제를 풀 때는 일정한 순서가 있습니다.
1. 칼럼 갯수를 알아낸다.
2. 칼럼 갯수를 알냈다면 database()를 통해 현재 사용중인 db이름을 알아낸다.
3. db이름을 알고 있기 때문에 select table_name from information_schema.tables where table_schema='db이름' 을 통해 존재하는 table 이름을 알아낸다.
4. select column_name from information_schema.columns where table_name='table이름'을 통해 테이블에 속한 column의 이름을 알아낸다.
5. select 'column이름' from 'table이름' 을 통해 칼럼에 저장되어 있는 값을 알아내어 문제를 해결한다.
그렇기 때문에 보통 칼럼의 개수를 알아내고 그 결과값을 화면에 출력할 수 있으면 문제가 해결된다는 것을 알았습니다. 그래서 저는 Find Post부분에 아이디를 입력하여 해당 아이디로 작성된 글들을 출력해주는 사실을 알아냈습니다. 그래서 여기에 'union select 1 # 부터 해서 제가 아는 모든 information schema와 관련된 쿼리문을 넣어보며 삽질을 했지만 알아내지 못했습니다.
그래서 여기서 이상함을 느끼고 출제자 친구에게 살짝 힌트를 얻으니 이 부분은 아니라고 하더군요. 저도 아닌가 싶어서 물어봤지만 실제로 들으니 살짝 힘이 빠지긴 했습니다.
삽질 2...
삽질 1을 한 뒤 그렇다면 어느 부분을 공략하여 쿼리문을 활용해야할 까 고민하던 중 개시글에도 이리저리 작성하여 해보았습니다. 그러다가 왼쪽 상단에 아이디 부분이 출력이 되는 것을 보고 그렇다면 아이디 부분을 공략해보자라는 생각을 하였습니다. 일단 어떻게 이 부분을 공략할 것인가를 생각해보다보니 서브쿼리를 이용해보아야 겠다는 생각을 했습니다. 그래서 아래와 같은 많은 시도를 해보았지만 기본 information_schema에 저장되어 있는 데이터 밖에 가져오지 못했습니다.
일단 이 과정에서 information schema 관련 쿼리들을 외워버리는 효과는 있었지만 결국 별다른 문제 해결은 하지 못했습니다.
풀이
일단 삽질 2에서 아이디 부분을 공략해야 한다는 건 알았다는 성과를 가지고 다시 처음으로 돌아갔습니다. 그래서 동아리 수업때 사용했던 쿼리문은 union select를 통해 값을 가져오는 것이었습니다. 저는 삽질1을 하면서 대략 게시판에 사용되는 column의 갯수가 5개인것은 예측하고 있었습니다. 제목, 글, 작성 시간, result 수, 작성 아이디로 추정하고 있었습니다. 그래서 다시 아이디 부분에 삽질1에서 했던 ' union select 1,2,3 #부터 해서 하나 씩 늘려가면서 결과가 출력되었습니다.
이걸보고 되게 허탈감이 들긴했습니다.... 결국 제가 한 삽질1과 삽질2를 잘 결합하면 해결되는 문제였습니다... 그래서 이 결과를 바탕으로 db이름, table 이름, column 이름을 찾아냈습니다.
이 결과값으로 아래의 칼럼 데이터를 찾아내어서 문제를 해결했습니다.
아이디가 root인거 보니 아마 제일 윗글이 root 계정에 대한 정보 같습니다. 아이디와 비밀번호를 알아냈으니 플래그 값을 얻는 것은 어렵지 않았습니다.
'웹 > sfw' 카테고리의 다른 글
sfw8 (페이지 변조 XSS) (0) | 2021.01.20 |
---|---|
sfw6 (XSS) (0) | 2021.01.08 |
sfw4 (error based SQL injection) (0) | 2021.01.08 |
sfw3 (time based SQL injection) (0) | 2021.01.08 |
sfw2 (blind SQL injection) (0) | 2021.01.08 |