뉴비에욤

Webhacking.kr 5번 본문

Webhacking.kr

Webhacking.kr 5번

초보에욤 2015. 8. 15. 12:58

 

2가지 메뉴가 있는데 우선 소스부터 분석한다.

 

 

"Login" 메뉴를 누르면 "mem/login.php" 페이지로 이동되지만, "Join" 버튼을 누르면 에러가 발생한다.

적당한 게싱을 통해 "mem/join.php" 페이지를 유추한다.

 

 

유추한 페이지로 가면 빈 화면만 보이는데, 소스를 분석해야 한다.

 

 

 뭔가 겁나 복잡하다. 알파벳들을 이상한 문자에 대입하고 아래쪽에서 비교하는 듯 하다.

 

 

다행히 콘솔에서 자동으로 복호화가 되기 때문에 부분 부분 복호화를 진행하면서 분석한다.

위 사진에서 얻은 평문을 기반으로 하면 아래와 같은 결과를 얻을 수 있다.

if(eval(document.cookie).indexOf(oldzombie)==-1) { bye; }

 

 

if(eval(document.URL).indexOf(mode=1)==-1) {alert('access denied'); history.go(-1); }

 

 

 

 <form method=post action=NaNoin.php> 

 

 

<input type=text name='id' maxlength=5>

 

 

<input type=text name='pw' maxlength=10>

 

 

첫 번째 복호화 결과를 보면 쿠키값에 "oldzombie" 문자열을 요구하기 때문에 세팅을 한다.

 

 

그 다음 결과인 "mode=1"을 입력한다.

 

 

드디어 로그인 창이 나타난다.

 

 

test/test 계정으로 가입을 한다.

 

 

가입 성공!!

 

 

"mem/login.php" 페이지로 이동한다.

 

"test/test" 계정으로 로그인하려면 오류가 나타난다.

 

 

"mem/join.php" 페이지로 이동하여 "admin/admin" 계정으로 회원 가입을 시도한다.

 

 

이미 있는 아이디라서 가입이 안된다.

 

 

 

 

maxlength 값이 '5'로 설정되어 있어 'admin' 까지 밖에 입력되지 않는다.

 

* php 에서 값을 입력 받아 mysql 쪽으로 넘기는 과정에서 필터링이 제대로 되어 있지 않다면 몇가지

  문제가 발생한다.

  이번 문제는 공백 필터링이 제대로 되지 않아 발생하는 문제이다.

 

크롬 콘솔을 이용해 id 값을 "admin                                                                 #" 으로 설정한다.

HTML 에서 제한이 걸린 '5' 글자 보다 훨씬 긴 값이다.

 

 

그리고 로그인을 시도한다.

 

 

'Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 7번  (0) 2015.08.15
Webhacking.kr 6번  (0) 2015.08.15
Webhacking.kr 4번  (0) 2015.08.15
Webhacking.kr 3번  (0) 2015.08.14
Webhacking.kr 2번  (0) 2015.08.14
Comments