일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- property
- 배열
- 사칙연산
- object
- IF문
- 객체
- document
- 함수
- window
- github
- 파이썬
- 조건문
- htmlspecialchars
- blind sql injection
- xss game
- burp suite
- sql injection
- Pwndbg
- 백준 알고리즘
- jQuery
- 백준 파이썬
- 메소드
- xss game 풀이
- 자바스크립트
- element 조회
- 김성엽 대표님
- suninatas 풀이
- 포인터
- python
- lord of sql injection
- Today
- Total
power-girl0-0
[webhacking.kr-old] 5번 본문
주소 : https://webhacking.kr/old.php
[ 풀이 ]
이번 문제에서는 login과 join버튼이 있다.
먼저 가입을 하기 위해, join을 클릭시 아래와 같이 권한이 없다고 출력된다.
login버튼을 클릭시, 아래와 같이 출력된다.
위 페이지에서 login.php의 url을 갖고 있는 것을 보아, 혹시 하는 마음에 login.php대신 join.php를 입력하여 접근해 보았다.
그 결과 bye라는 알림창을 출력하고, 아무것도 출력되지 않는다.
소스코드를 살펴보니, 난독화된 스크립트를 확인할 수 있었다.
해당 코드를 아래 웹사이트를 통해 난독화를 해제하였다.
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('<font size=2 color=white>Join</font><p>');
document.write('.<p>.<p>.<p>.<p>.<p>');
document.write('<form method=post action=' + llllllllll + lllllllllllllll + lllllllll + llllllllllllll + li + llllllllllllllll + llllllll + llllllllllllllll +
'>');
document.write('<table border=1><tr><td><font color=gray>id</font></td><td><input type=text name=' + lllllllll + llll + ' maxlength=20></td></tr>');
document.write('<tr><td><font color=gray>pass</font></td><td><input type=text name=' + llllllllllllllll + lllllllllllllllllllllll + '></td></tr>');
document.write('<tr align=center><td colspan=2><input type=submit></td></tr></form></table>');
}
?!!!! 일단 개발자 도구를 이용해서 해석해보자.
if (eval(document.cookie).indexOf(oldzombie) == -1) {
alert('bye');
throw "stop";
}
if (eval(document.URL).indexOf(mode = 1) == -1) {
alert('access_denied');
throw "stop";
} else {
document.write('<font size=2 color=white>Join</font><p>');
document.write('.<p>.<p>.<p>.<p>.<p>');
document.write('<form method=post action=' + 'join.php>');
document.write('<table border=1><tr><td><font color=gray>id</font></td><td><input type=text name=' + id + ' maxlength=20></td></tr>');
document.write('<tr><td><font color=gray>pass</font></td><td><input type=text name=' + p + w + '></td></tr>');
document.write('<tr align=center><td colspan=2><input type=submit></td></tr></form></table>');
}
첫번째, if조건문에서 쿠키값에 oldzombie가 없으면 bye를 출력하고 멈추는 것을 알 수 있다.
따라서, oldzomebie라는 쿠키를 생성해주었다.
두번째, if조건문에서는 URL에 mode=1이 없으면 access_denied라는 경고창이 출력되게 되어있다.
그래서 url뒤에 ?mode=1을 입력하고 join.php에 접속해보았다.
가입 페이지에 접속하는 것을 성공하였다.
dohyeon이라는 아이를 생성하고, 로그인을 한 결과 admin으로 로그인하라는 문구가 출력된다.
그래서, join.php로 다시 가서 admin으로 가입하려고 하니 아래와 같이 이미 가입되어 있다고 출력된다.
그래서, burp suite를 사용하여 admin뒤에 공백을 넣어서 가입하였다.
%20은 공백을 의미하고, %00은 NULL을 의미한다.
%20만 넣었을 경우, 이미 있는 id라고 측정해서 %00까지 넣어주었다.
이후, 로그인하였는데 똑같이 공백을 넣어주지 않으면 로그인 실패가 떴다.
따라서 로그인시에도 아래와 같이 burp suite를 이용하여 공백을 넣고 전송하였다.
그 결과, 5번문제 클리어 되었다는 알림창과 아래와 같이 Hello admin이라는 문장이 출력된다 ^_^ 클리어~~
'War game > webhacking.kr' 카테고리의 다른 글
[webhacking.kr-old] 7번 (0) | 2021.06.20 |
---|---|
[webhacking.kr-old] 6번 (0) | 2021.06.19 |
[ webhacking.kr-old ] 4번 (2) | 2021.06.19 |
[webhacking.kr-old] 3번 (0) | 2021.06.18 |
[webhacking.kr - old] 2번 (0) | 2021.06.10 |