## prob5(web, 300pt)
[Main]
5번 문제는 로그인 버튼과 회원가입 버튼이 있는 문제였고, 특별히 php 소스코드가 주어지진 않았습니다. 우선 문제 페이지를 보면 아래 [그림 1]과 같습니다.
[그림 1] 문제 페이지
login 버튼을 누르면 로그인 페이지로 넘어가고 join 버튼을 누르면 "Access Denied"라는 alert박스가 뜨게 됩니다. 우선 id, pw를 모르므로 login 버튼을 눌러 넘어가는 "mem/login.php"페이지에서는 특별히 할 것이 없었습니다. admin으로 로그인을 하기 위해 id:admin, pw:????를 입력해보았지만, 비밀번호가 틀렸다고 나옵니다.
[그림 2] login.php
[그림 3] wrong password
[그림 4] join버튼 클릭 시
일단 join버튼이 막혀있어서 회원가입 페이지를 찾아야 된다고 생각했습니다. login버튼을 클릭하면 "/mem/login.php"로 넘어가므로 join버튼을 클릭하면 원래라면 "/mem/join.php"라는 페이지로 넘어가지 않을까라는 생각에 "/mem/join.php"에 접속해보니 아래 [그림 5]와 같이 페이지는 존재하지만 아무 결과도 보여주지 않았습니다.
[그림 5] /mem/join.php
그래서 소스코드를 보았더니 아래 [그림 6]과 같이 난독화된 자바스크립트 코드를 볼 수 있었습니다.
[그림 6] 난독화된 자바스크립트
일단 저 난독화된 자바스크립트를 해석하기 위해 크롬의 개발자 도구를 켜고 console창에다가 위 스크립트 중 마지막 alert("access_denied"); 뒷 부분의 else 블럭을 입력하면 아래 [그림 7]과 같이 숨겨진 창이 나타나게 됩니다.
[그림 7] /mem/join.php
이제 회원가입을 할 수 있게 되었습니다. admin으로 가입을 해서 admin으로 로그인을 하려고 했는데 아래 [그림 8]처럼 이미 있는 아이디라고 나옵니다.
[그림 8] admin 회원가입 실패
그래서 이를 우회하기 위해서 예전 어디선가 풀어본 문제 중에 admin 중복체크를 우회하고 db에 저장시에는 "admin"이 insert되도록 하는 문제가 있었습니다. "admin " 이런 식으로 id부분에 적으면 중복 체크는 우회가 되고, db에 insert될 때에는 공백이 제거되고 insert 됩니다. 이런 방식으로 했더니 아래 [그림 9]와 같이 admin으로 회원가입이 가능했습니다.
[그림 9] admin 회원가입
이제 가입을 했으니 아래 [그림 10] 과 같이 로그인을 시도해보았습니다.
[그림 10] Congratulations~!
'Wargame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] prob45(550pt) (0) | 2018.02.21 |
---|---|
[webhacking.kr] prob26(100pt) (0) | 2018.02.21 |
[webhacking.kr] prob33(200pt) (0) | 2018.02.21 |
[webhacking.kr] prob4(150pt) (0) | 2018.02.21 |
[webhacking.kr] prob1(200pt) (0) | 2018.02.21 |