Webhacking 5번 문제 풀이
로그인 창과 가입 창이 보인다. 나는 계정이 없으니 가입 부터 눌러보자
접근이 거부되었다. 로그인 부터 들어가보자
로그인 창에는 들어가진다.
혹시나 해서 admin/admin을 입력해봤다.
역시나 안된다. guest/guest는? 마찬가지다.
다시 메인 화면으로 와서 코드를 확인해보자
mem/lognin.php 주소로 로그인 페이지로 이동되는 반면 가입 페이지는 스크립트로 막혀있다.
로그인 페이지가 mem/login.php인걸로 미루어 보아 mem/join.php는 가입 페이지라고 추측해보았다.
이를 url에 입력해보자
들어오자마자 가란다 그래도 입뺀은 면했다.
가입 페이지의 코드를 한번 확인해보자
코드를 잘라서 올렸지만 딱 보기에도 더럽다 스크립트 언어를 정리해 주는 방법을 찾아보자
http://jsbeautifier.org/ 이 사이트를 참고해서 정리해보았다.(구글링 하세요 왠만한거 다나옵니다.)
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;
lIIIIIIIIIIIIIIIIIIl = llll + lllllllllllllll + lll + lllllllllllllllllllll + lllllllllllll + lllll + llllllllllllll + llllllllllllllllllll + li + lll + lllllllllllllll + lllllllllllllll + lllllllllll + lllllllll + lllll;
if (eval(lIIIIIIIIIIIIIIIIIIl).indexOf(lIllIllIllIllIllIllIllIllIllIl) == -1)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;
lIIIIIIIIIIIIIIIIIIl = llll + lllllllllllllll + lll + lllllllllllllllllllll + lllllllllllll + lllll + llllllllllllll + llllllllllllllllllll + li + lll + lllllllllllllll + lllllllllllllll + lllllllllll + lllllllll + lllll;
if (eval(lIIIIIIIIIIIIIIIIIIl).indexOf(lIllIllIllIllIllIllIllIllIllIl) == -1) {
alert('bye');
throw "stop";
}
if (eval(llll + lllllllllllllll + lll + lllllllllllllllllllll + lllllllllllll + lllll + llllllllllllll + llllllllllllllllllll + li + 'U' + 'R' + 'L').indexOf(lllllllllllll + lllllllllllllll + llll + lllll + '=' + I) == -1) {
alert('access_denied');
throw "stop";
} else {
document.write('Join
.
.
.
.
');
document.write('
');
}
음 난잡한 코드를 돌려보았더니 이런식으로 정리가 되었다. | 개수별로 단어를 나타내는 것 이었다.
코드를 해석해보면(python으로 코드짜서 돌려보시길 추천합니다)
Cookie값으로 oldzombie가 없으면 bye가 출력되고
URL에 mode=1이 들어 있지 않으면 access_denied가 뜬다.
1번 문제 풀때 썼던 editthiscookie로 쿠키값을 만들어주자
/mem/join.php?mode=1이라고 주소를 입력하고 들어가면
문제가 또나온다.
admin/admin, guest/guest를 넣어보자
admin은 있다고 나오고 guest는
가입 성공이란다.
로그인 해보자
admin 접근하여야 flag가 나오는 것으로 보인다.
admin으로 로그인하라는 것으로 보아 admin이라는 문자열을 온전하게 넣는 방법을 찾아봐야 될것 같다.
몇 시간 동안 다양한 시도와 고민 끝에 whitespace, 즉 공백을 떠올렸다 넣어보자
여러 시도 끝에 ' admin ' 공백을 넣은 온전한 admin으로 가입을 성공 시켰다.
성공했다
온전한 admin을 받는다는 사실을 알아내느라 여러 시행착오를, 어떻게 admin을 온전하게 받게 할것인지 고민 하는라 많은 시간을 들였다.