Always-Try(정보보안 및 일상)

webhacking.kr - Challenge(old) - 5번 본문

Pen Test

webhacking.kr - Challenge(old) - 5번

Always-Try 2021. 2. 8. 21:08

#1. 5번

1-1. 문제

 

1-2. 풀이

 

우선 로그인 메뉴로 가서 로그인 창에 sql 인젝션을 시도해보는데 특수문자가 아스키코드로 치환되는 것을 확인할 수 있다.

다시 뒤로 돌아가서 페이지 소스 보기를 하면 2가지의 힌트를 얻을 수 있다.

첫번째는 join 버튼을 백날 눌러봤자 Access_Denied가 뜨는 것, 두번째는 /mem 디렉토리가 있을 수 있다는 것.

일단 /mem으로 이동해보니 실제로 2개의 php 파일이 존재한다.

login.php를 클릭하면 아까 전 로그인 창이 나오고, join.php 를 클릭하면 bye 팝업이 출력된다.

확인을 클릭하면 빈 페이지가 나오는데, 페이지 소스보기를 했더니 수상한 것이 나타났다. 난독화 되어있는 것으로 보인다.

개행 처리가 되어 있지 않아서 굉장히 보기 불편하다. 아래 사이트에서 보기 편하게 바꿔보자.

beautifier.io/

 

Online JavaScript beautifier

 

beautifier.io

 

그리고 우선 해당 코드의 변수 부분을 콘솔에 넣고, 난독화 된 부분을 콘솔에 입력하면 아래와 같이 난독화 된 문자열이 풀린다.

 

위와 같이 변수를 모두 풀어보면 간단한 형태의 스크립트가 나오는데, 조건문을 살펴보면 아래와 같은 결론이 나온다.

- 쿠키 값에 oldzombie 문자열을 넣고, url에 mode=1 을 추가하면 join.php 를 띄워줄께

 

URL이야 뒤에 ?mode=1 을 입력하기만 하면되는데, cookie 값 변조에서 의문점이 생겼다. burp suite로 쿠키 값에 oldzombie를 추가해서 요청을 날렸더니 계속에서 bye가 뜬다. bye라는 것은 oldzombie를 인식하지 못한다는 것이다.

흐음 이상하다. (아직도 이유를 모르겠다 ㅠㅠ)

 

그래서 일단 문제를 풀기 위해 브라우저에서 쿠키 값을 바꿔봤더니, join 창이 나왔다.

 

이후 아래와 같이 계정을 만들고 로그인했더니, admin으로 로그인하라고 한다.

참 귀찮게 한다. 후. admin으로 계정을 다시 만들어보자. admin은 이미 존재한다고 하네..

한참을 헤메다가 포기했다. 인터넷을 뒤져보니 admin 앞 뒤에 공백을 추가하면 가입이 가능하다고 한다. 로그인 할때도 동일하게 공백을 추가하면 된다.

근데 왜? 답을 아니까 쉽게 풀렸지만 답을 모르는 상태에서 admin 앞/뒤로 공백을 추가할 생각을 가지긴 했을까? 아닐 것 같다.

대부분의 블로그에서 그 답은 찾을 수 없었다. 그러다 우연히 아래와 같이 비슷한 의문을 가진 분의 블로그를 확인했고, 어느정도 의문점이 풀렸다. 참고 바란다.

velog.io/@hevton/Webhacking.kr-5%EB%B2%88-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4

 

Webhacking.kr 5번 문제풀이

5번같은 경우는, 이전 문제들과는 달리 명확히 타겟을 분석하여 흐름을 알고 푸는 문제라기 보다는.. 그냥 때려맞추는 문제인 것 같아서 의욕이 조금 떨어졌다.

velog.io

 

ps.

php와 mysql을 잘 다루지 않고서는 어려운 점이 많겠구나 라고 생각한 문제였다.

 

 

 

Comments