일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CTF
- hacking
- C언어
- 웹해킹
- 블록체인
- 프로그래밍
- 자료구조
- 선린인터넷고등학교
- 버그바운티
- 코드게이트
- 시스템
- wargame.kr
- 보안
- Pwnable
- 네퓨즈
- 포너블
- kangsecu
- 버그헌팅
- xcz
- 워게임
- webhacking
- 정보보호
- 포렌식
- webhacking.kr
- 문제풀이
- WarGame
- DVP
- nefus
- 해킹
- 정보보안
- Today
- Total
kangsecu's B1og
[webhacking.kr] pro 5 문제풀이 본문
[webhacking.kr] pro 5 문제를 풀어보도록 하겠습니다.
문제에 들어가면 이렇게 login버튼과 join버튼이 있습니다.
그런데 join버튼을 눌러보니 접근을 제한했습니다.
그래서 코드를 봤더니 mem디렉터리에 좋은게 있다고 합니다. 그래서 mem디렉터리에 접속을 했습니다.
이렇게 내용들을 볼 수 있습니다. 여기서 join.php에 들어가봤더니 아무것도 없이 black out되있는 화면이 출력됬습니다. 그래서 역시 코드를 확인해보니
아래 사진과 같이 더럽게 난독화가 된 javascript코드가 있었습니다.
이걸 beautify를 돌렸습니다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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) { bye; } if (eval(llll + lllllllllllllll + lll + lllllllllllllllllllll + lllllllllllll + lllll + llllllllllllll + llllllllllllllllllll + li + 'U' + 'R' + 'L').indexOf(lllllllllllll + lllllllllllllll + llll + lllll + '=' + I) == -1) { alert('access_denied'); history.go(-1); } 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=5></td></tr>'); document.write('<tr><td><font color=gray>pass</font></td><td><input type=text name=' + llllllllllllllll + lllllllllllllllllllllll + ' maxlength=10></td></tr>'); document.write('<tr align=center><td colspan=2><input type=submit></td></tr></form></table>'); } | cs |
더럽기는 마찬가지입니다. 이제 여기서 값을 하나하나 치환해서 코드를 이해했습니다. 사진은 아쉽게도 없습니다.
Exploit Vector
난독화된 코드를 해석해보면, cookie name에 oldombie가 있어야하며, GET방식으로 파라미터로 mode=1을 전송한후, admin으로 로그인 해야합니다.
Exploit
이렇게 oldzombie를 만들었습니다.
이렇게 mode=1파라미터를 전달했습니다. 그랬더니 아무것도 없던 웹에서 로그인폼이 나타났습니다.
그래서 admin을 입력하고 제출을 했는데, 이미 존재하는 계정이라고 합니다. 그래서 어떻게해야하나 생각을 하던중, id값을 5글자만 받아서 폼에서도 5글자밖에 입력이 안되는걸 보고 ' 아 이걸 10글자로 바끄고 admin뒤에 공백을 넣고 전송해도 서버단에선 앞에 5글자만 받겠구나' 하고 생각했습니다. 그래서 입력길이 제한을 10글자로 바꿨습니다.
그리고 이제 admin뒤에 space를 붙혀서 공백을 만들어줍니다. 아래 사진에선 공백을 보여줄 방법으로 %20을 입력하였습니다.
이렇게 제출을 하면 sign up이 뜨며 가입이 됩니다. 그럼 이제 login.php로 돌아갑니다.
이렇게 입력을 해주면 문제가 해결됩니다.
[webhacking.kr] pro 5 Clear!
'Web Hacking > webhakcing.kr' 카테고리의 다른 글
[webhacking.kr] pro 12 문제풀이 (4) | 2018.02.23 |
---|---|
[webhacking.kr] pro 16 문제풀이 (2) | 2018.02.23 |
[webhacking.kr]pro 4 문제풀이 (0) | 2018.02.22 |
[webhacking.kr] pro 18 문제풀이 (0) | 2018.02.20 |
[webhacking.kr]pro 14 문제풀이 (2) | 2018.02.20 |