
1. 문제 정보
- 문제 번호 : old -5
- 문제 점수 : 30점
2. 문제 분석
문제에 들어가면 join과 login이 보인다.

조인을 누르면 access denied가 뜬다.

로그인을 보자 로그인 창이 나오고 아이디 비밀번호를 마구잡이로 입력해도 안된다.

https://webhacking.kr/challenge/web-05/mem/login.php에서 mem이 새로 있길래 혹시 웹서버의 Directory Listing(디렉토리 리스팅) 취약점이 있을 거 같아서 요청해보니까 index가 나왔다,

join을 들어가보니 join에서 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문 두개로 검증하고 있다.
else문을 자바스크립트 console에 입력하면 입력창이 입력창이 나온다.


3. 풀이
id: asd, pw: asd로 회원가입 요청을 보내고 로그인해봤다.


admin으로 로그인해야한다. 하지만 admin으로 아이디를 만드려면 이미 존재하는 아이디라고 나온다.

여기서 널 바이트 주입(%00)을 사용해서 버프 스위트로 admin%00로 보내면 회원가입이 된다.

로그인에서 다시 버프 스위트로 %00를 포함하면



풀리게 된다.
4. 요약
- old-5 문제의 회원가입 페이지 접근 제한을 해결하기 위해 자바스크립트 난독화를 분석하고, 조건문을 우회하여 console에서 직접 가입 폼을 생성했다.
- 이미 존재하는 admin 계정과의 중복 체크를 피하기 위해, 아이디 뒤에 %00을 붙여 서버의 문자열 처리 허점을 이용한 중복 가입을 성공했다.
- 로그인 시에도 동일하게 널 바이트를 포함한 요청을 보내, 서버가 이를 admin 계정으로 오인하게 만들어 문제를 해결했다.
'워게임 > webhacking.kr' 카테고리의 다른 글
| [webhacking.kr] old-3 문제 (0) | 2026.02.05 |
|---|---|
| [webhacking.kr] old-7문제 (0) | 2026.02.03 |
| [webhacking.kr] old-11 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-4 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-56 문제 (0) | 2026.02.02 |