wargame.kr 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.
이번 포스트에서는 db_is_really_good 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.
이번 문제는 DB에 대한 이해와 파일 다운로드 취약성이 있는 곳을 찾아볼 수 있어야 합니다.
DB에 어떤 값을 넣어야 터지는지에 대한 학습을 쭈욱 하고, 따라오시는 것을 추천합니다.
|
문제 이해 |
문제에서는 어떤 데이터베이스 종류인지, 물어보기도 합니다.
여기서 user name과 database 내에서 값을 얻을 수 있다고 힌트를 주고 있습니다.
이제 한 번 문제로 들어가보도록 합시다.
문제에는 user라는 입력란과, 로그인 버튼이 있습니다.
힌트에서 user라는 곳에서 답을 얻을 수 있다고 했으니 별의 별 걸 다 넣어봤습니다.
일단 admin은 안 되네요.
일단 aa를 입력하고 로그인이 되어 들어가보았습니다.
위에는 입력창이 있고 write와 logout 버튼이 있습니다.
각각 입력, 로그아웃 버튼입니다.
아래의 그림을 보아하니 누가 또 열심히 때려밖아본 흔적이 보입니다.
별의 별 걸 다 입력해보았는데, 변하는 것이 없었습니다.
|
문제 풀이 |
이번 문제는 역시나 user 영역에서 답을 구할 수 있었습니다.
SQL Injection은 아니었습니다. 다만, 다른 방향의 Injection입니다.
이는 일종의 개발자의 설계 실수가 있었다는 가정하에 만든 문제 같았습니다.
|
특별한 결과가 돌아오는 값들 |
이번 문제에서 . 과 /를 넣었을 때의 결과가 달랐습니다.
만약 .을 넣게 되면 _로 바뀌게 되고, /를 넣게 되면 Fatal Error가 발생했습니다.
일단 .을 넣게 됐을 때의 반응은 별다른 의미는 없어보이고, Fatal Error에서 좋은 힌트를 얻을 수 있었습니다.
위와 같은 Fatal Error가 있습니다.
에러 내용을 쭉 살펴보니, open() 함수에서 에러가 발생한 것을 볼 수 있습니다.
우리가 입력한 값이 /이기 때문에 /가 들어간 곳이 어디인지 살펴보면 wkrm_ 와 .db 사이에 /가 부자연스럽게 들어가 있는 것을 볼 수 있습니다.
아마 wkrm_.db 파일이겠구나 싶어 다운로드를 해봅니다.
다운로드를 마치고 SQLite Expert Personal 프로그램으로 내용을 살펴보니 별 거 없었습니다.
아 링크, http://www.sqliteexpert.com/
그리고, /db 디렉토리가 디렉토리 리스팅 취약점으로 인해 모두 보이는 것을 확인할 수 있었습니다.
보아하니, wkrm_ + '우리가 입력한 값' + .db로 파일이 생성되는 것이며, 그 db에 값이 입력되는 것이라고 볼 수 있을 것 같습니다.
그렇다면, 우리가 입력하지 못했던 값이 admin입니다.
admin을 뒤에 붙인 파일을 찾아 다운로드 해보도록 합시다.
잡았다 요놈..
'WARGAMES > wargame.kr' 카테고리의 다른 글
[Wargame.kr] Level 12 - type_confusion (0) | 2019.04.30 |
---|---|
[Wargame.kr] Level 11 - tmitter (0) | 2019.04.30 |
[Wargame.kr] Level 10 - md5_compare (0) | 2019.04.10 |
[Wargame.kr] Level 09 - strcmp (0) | 2019.04.10 |
[Wargame.kr] Level 07 - md5_password (0) | 2019.04.09 |
[Wargame.kr] Level 06 - fly_to_the_moon (0) | 2019.04.09 |
[Wargame.kr] Level 05 - WTF_CODE (0) | 2019.04.09 |
[Wargame.kr] Level 04 - login_filtering (0) | 2019.04.09 |