로그인과 회원가입 버튼만 있는 페이지가 나왔다.

Join 버튼을 누르니, alert창이 나왔고,

로그인 버튼을 누르니, 로그인 페이지로 이동하였다.

혹시 Join으로 갈 수 있는 방법이 있는지 코드에서 확인하였다.

<input type="button" value="Login" style="border:0;width:100;background=black;color=green" onmouseover="this.focus();" onclick="move('login');">
<input type="button" value="Join" style="border:0;width:100;background=black;color=blue" onmouseover="this.focus();" onclick="no();">

<script>
    function no() {
        alert('Access_Denied');
    }

    function move(page) {
        if(page=='login') { location.href='mem/login.php'; }
    }
</script>

하지만, 전혀 없었다.

로그인 기능에서 취약점을 찾고 이를 이용하여 우회를 해야하는 것으로 판단된다.

나는 아무런 정보가 없어서 일단 guest/guest로 로그인을 시도하였다.

패스워드가 틀렸다는 결과를 얻을 수 있었다.

이것을 보고, 무조건 틀리면 Wrong password가 출력되는지가 궁금하여 아무 값을 넣어서 로그인을 시도하였다.
같은 결과를 얻을 수 있었다.

Blind SQL Injection도 안될 것이라 판단하여 논리적 에러기반 SQLi도 시도하였지만 실패하였다.

그러다가 URL를 보고, mem/login.phpmem/join.php으로 요청하면 어떨까라는 생각으로 발전하였다.

요청을 하였지만, alert창이 뜨는 것을 확인할 수 있었다.
혹시나 하여, 코드를 확인해보니 JS 난독화가 되어있었다.

 

이를 개발자 도구의 콘솔에서 확인했다.

l='a';ll='b';lll='c';llll='d';lllll='e';llllll='f';lllllll='g';llllllll='h';lllllllll='i';llllllllll='j';lllllllllll='k';llllllllllll='l';lllllllllllll='m';llllllllllllll='n';lllllllllllllll='o';llllllllllllllll='p';lllllllllllllllll='q';llllllllllllllllll='r';lllllllllllllllllll='s';llllllllllllllllllll='t';lllllllllllllllllllll='u';llllllllllllllllllllll='v';lllllllllllllllllllllll='w';llllllllllllllllllllllll='x';lllllllllllllllllllllllll='y';llllllllllllllllllllllllll='z';I='1';II='2';III='3';IIII='4';IIIII='5';IIIIII='6';IIIIIII='7';IIIIIIII='8';IIIIIIIII='9';IIIIIIIIII='0';li='.';ii='<';iii='>';

lIllIllIllIllIllIllIllIllIllIl=lllllllllllllll+llllllllllll+llll+llllllllllllllllllllllllll+lllllllllllllll+lllllllllllll+ll+lllllllll+lllll;

위 코드를 실행하니, lIllIllIllIllIllIllIllIllIllIl의 값은 oldzombie라는 문자열을 얻을 수 있었다.

lIIIIIIIIIIIIIIIIIIl=llll+lllllllllllllll+lll+lllllllllllllllllllll+lllllllllllll+lllll+llllllllllllll+llllllllllllllllllll+li+lll+lllllllllllllll+lllllllllllllll+lllllllllll+lllllllll+lllll;

lIIIIIIIIIIIIIIIIIIl의 값은 document.cookie라는 것을 알 수 있었다.

이런 식으로 계속 분석하여 난독화를 풀이하였다.

난독화를 풀어보니, 위와 같은 코드가 나왔다.
Else를 실행시키기 위해선, oldzombie라는 cookie이 없으며 안되며, 파라미터 mode의 값이 1이어야 한다.

https://webhacking.kr/challenge/web-05/mem/join.php?mode=1

위에 정의한 것을 모두 수행하니, 회원가입을 진행할 수 있었다.

admin으로 가입을 시도하니, 이미 존재하는 ID라서 실패하였다.

그래서 일단 lrtk으로 계정을 생성하여 로그인을 시도하였다.

로그인은 성공했지만, admin으로 로그인을 해야 Flag를 주는 것으로 확인되었다.
여기서 막혀서 고민을 하다가 시간을 너무 잡아먹어서 다른 사람의 풀이를 확인하였다.

위와 같이 admin 뒤에 공백을 엄청 많이 주니, 우회가 가능하였다.

로그인을 하니, flag를 획득할 수 있었다.

'워게임 > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Old - 11 Write Up  (0) 2021.05.27
[Webhacking.kr] Old - 7 Write Up  (0) 2021.05.26
[Webhacking.kr] Old - 4 Write Up  (0) 2021.05.25
Old - 56 Write Up  (0) 2021.05.23
Old - 51 Write Up  (0) 2021.05.22
복사했습니다!