본문 바로가기

웹해킹/webhacking.kr

webhacking.kr old 05번 문제풀이(Writeup). 디렉터리 리스팅 취약점 설명 및 응용

반응형

webhacking.kr old 05번 문제풀이(Writeup)

old 05번 문제풀이 1

문제를 들어가면 위와 같이 출력된다. Join을 하려고 하면 접근 권한이 없어서 거부되는 것을 보니, Login 페이지와 쿠키를 좀 살펴보고 시작해야 할 것 같다.

 

 

 

 

old 05번 문제풀이 2

먼저 guest 계정으로 로그인을 시도해보니, 힌트가 출력된다. 힌트에는 admin 계정으로 로그인이 하라고 나와있다. 

이렇게 나올 땐 대부분 쿠키 or 세션문제나 SQL Injection 문제이었던 것 같아서 먼저 시도해봤다.

 

 

몇 가지 시도를 해봤는데 잘 안풀린다. 다른 취약점이 있는지 확인해봤다.

 

 

old 05번 문제풀이 3

몇 가지 시도를 해봤는데, URL을 보니 login.php가 mem이라는 폴더에 있다고 나와서 혹시나 해서 mem으로 접속을 

시도하니 디렉터리 리스팅 취약점(Directory listing)이 발견되었다. 이번 문제의 핵심 취약점으로 보인다.

여기서 join.php, login.php 파일을 다운로드 받아서 코드를 확인했다. 

 


디렉터리 리스팅(Directory listing)

웹 서버의 파일을 경로에 따라 디렉토리 형식으로 볼 수 있는 취약점을 말한다. 
웹 서버의 인덱싱(리스팅) 기능이 활성화되어 발생하는 취약점이다.

old 05번 문제풀이 3

위 사진과 같이 리스팅되어 나오고, 보통 index, board, images 등의 폴더에서 발생하는 경우가 많다.

 

대응 방법

<Directory "/var/www/html/index">
	Order Deny,Allow
	Deny from all
	Allow from 특정IP
</Directory>

아파치 웹서버(http.conf) 인덱싱 기능 접근 제어를 하면 된다. 위 코드와 같이 특정 IP에서만 허용을 하거나, 인덱싱 기능을 거부하는 방법이 있다.

 


 

old 05번 문제풀이 4 / login.php

login.php 파일은 의심가는 부분이 없었다.

 

 

 

old 05번 문제풀이 5 / join.php

join.php 파일에 들어가보니 아주 의심되는 코드가 보인다. 일단 읽기가 불편해서 개행을 했다.

 

 

old 05번 문제풀이 6 / join.php

그냥 읽기 불편하게 만든 코드로 보인다. 여기서 'access_denied'과 'bye'가 나온 이유를 알 수 있고 이를 피해 접근 하는

방법도 있다.

 

 

 

old 05번 문제풀이 7 / join.php

코드를 해석해보면 'bye'가 나오는 이유는 document.cookie에 oldzombie 쿠키가 없을 때 출력되고,

'access_denied'는 URL에 mode가 1이 아니면 출력된다. 그래서 쿠키를 만들고 mode=1을 넣어주었다.

 

 

old 05번 문제풀이 8

매번 쿠키는 ETC로 만드는데 나는 왜인지 모르겠지만 만들어지지 않아서 Burp Suite를 캡처해서 쿠키를 넣어줬다.

 

 

 

old 05번 문제풀이 9

join페이지에 접속했다. 이제 admin 계정을 새로 만들어서 접속하려고 했다.

 

 

 

 

old 05번 문제풀이 10

이미 admin계정이 있어서 안된다고 나온다. 그래서 혹시 몰라서 Null을 함께넣었더니 admin 계정이 생성되었다.

 

 

 

old 05번 문제풀이 11

admin으로 로그인에 성공했다. 재밌는 문제였다.

 

 

 

 

참고사이트

https://isc9511.tistory.com/113

728x90