일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 블록체인
- webhacking
- xcz
- webhacking.kr
- nefus
- 시스템
- WarGame
- 해킹
- C언어
- hacking
- 워게임
- wargame.kr
- 정보보안
- kangsecu
- 선린인터넷고등학교
- 문제풀이
- 프로그래밍
- 포렌식
- 보안
- 버그바운티
- 버그헌팅
- 정보보호
- 자료구조
- Pwnable
- 포너블
- 코드게이트
- DVP
- 웹해킹
- Today
- Total
kangsecu's B1og
[webhacking.kr] pro 6번 문제풀이 본문
webhacking.kr에 pro6번 문제를 풀어보도록 하겠습니다.
우선 문제를 눌러서 들어가 보겠습니다.
이러한 화면이 출력됩니다. HINT : base64라고 하네요. 그리고 ID와 PW값을 주어서 'sql injection이겠구나' 하고 생각을 하고 있었습니다. 그럼 이제 index.phps를 들어가 문제 코드를 확인해보도록 하겠습니다.
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | <?php if(!$_COOKIE[user]) { $val_id="guest"; $val_pw="123qwe"; for($i=0;$i<20;$i++) { $val_id=base64_encode($val_id); $val_pw=base64_encode($val_pw); } $val_id=str_replace("1","!",$val_id); $val_id=str_replace("2","@",$val_id); $val_id=str_replace("3","$",$val_id); $val_id=str_replace("4","^",$val_id); $val_id=str_replace("5","&",$val_id); $val_id=str_replace("6","*",$val_id); $val_id=str_replace("7","(",$val_id); $val_id=str_replace("8",")",$val_id); $val_pw=str_replace("1","!",$val_pw); $val_pw=str_replace("2","@",$val_pw); $val_pw=str_replace("3","$",$val_pw); $val_pw=str_replace("4","^",$val_pw); $val_pw=str_replace("5","&",$val_pw); $val_pw=str_replace("6","*",$val_pw); $val_pw=str_replace("7","(",$val_pw); $val_pw=str_replace("8",")",$val_pw); Setcookie("user",$val_id); Setcookie("password",$val_pw); echo("<meta http-equiv=refresh content=0>"); } ?> <html> <head> <title>Challenge 6</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } </style> </head> <body> <? $decode_id=$_COOKIE[user]; $decode_pw=$_COOKIE[password]; $decode_id=str_replace("!","1",$decode_id); $decode_id=str_replace("@","2",$decode_id); $decode_id=str_replace("$","3",$decode_id); $decode_id=str_replace("^","4",$decode_id); $decode_id=str_replace("&","5",$decode_id); $decode_id=str_replace("*","6",$decode_id); $decode_id=str_replace("(","7",$decode_id); $decode_id=str_replace(")","8",$decode_id); $decode_pw=str_replace("!","1",$decode_pw); $decode_pw=str_replace("@","2",$decode_pw); $decode_pw=str_replace("$","3",$decode_pw); $decode_pw=str_replace("^","4",$decode_pw); $decode_pw=str_replace("&","5",$decode_pw); $decode_pw=str_replace("*","6",$decode_pw); $decode_pw=str_replace("(","7",$decode_pw); $decode_pw=str_replace(")","8",$decode_pw); for($i=0;$i<20;$i++) { $decode_id=base64_decode($decode_id); $decode_pw=base64_decode($decode_pw); } echo("<font style=background:silver;color:black> HINT : base64 </font><hr><a href=index.phps style=color:yellow;>index.phps</a><br><br>"); echo("ID : $decode_id<br>PW : $decode_pw<hr>"); if($decode_id=="admin" && $decode_pw=="admin") { @solve(6,100); } ?> </body> </html> | cs |
이렇게 문제 코드가 있습니다. 코드를 해석해보니 처음에 COOKIE에 ID값을 guest로 할당해주고, PW값을 123qwe로 할당을 해줍니다. 그 후, for문을 이용한 반복문에서 decoding을 20번 해준다는것을 알 수 있습니다. 그리고 solve 섹션을 확인하면 ID 와 PW값이 모두 admin이 되어야 문제가 해결되는 것을 알 수 있습니다. 그럼 이제 문제를 밑에서부터 풀어보도록 하겠습니다.
코드가 두가지 섹션으로 나뉘어져있습니다. 한 섹션은 base64 encode부분이 있으며, 다른 부분은 base64 decode부분이 있습니다.
<base64 encoding section>
우선 base64 encoding section을 해석하면 user라는 쿠키값이 존재하지 않는다면 if문을 실행하고 if문 안에서는 위에서 언급한 ID와 PW를 guest와 123qwe로 할당을 해줍니다. 그리고 그 밑에 반복문을 통해 ID값과 PW값을 base64로 20번 encoding하는걸 알 수 있습니다. 그 후, ID값과 PW값을 str_replace를 통하여 치환을 해줍니다. 마지막으로 base64로 20번 인코딩이되고 str_replace로 치환된 값을 다시 해당 변수에 저장을 해줍니다.
<base64 decoding section>
base64 decoding section을 해석하면 위에 encoding section에서 치환한 값을 다시 str_replace를 이용하여 치환해줍니다. 또한, ID 와 PW 값을 반복문을 통해 20번 base64로 decoding하여 다시 변수에 값을 저장합니다. 그 후 각 변수에 저장된 값을 출력한 후, if문을 통하여 ID와 PW 의 값이 admin이면 solve가 됩니다.
<문제 풀이>
이제 직접 문제를 풀어보도록 하겠습니다. 우선 위에 코드를 보아하니 admin이란 값을 20번 인코딩하여서 cookie에 존재하는 ID와 PW에 넣고 그 값이 코드의 과정을 거쳐서 admin이 될 경우에 문제가 해결이됩니다. 아래 사진과 같이 webhacking.kr 에서 제공해주는 en/decoder를 사용하도록 하겠습니다.
이곳에 admin을 적고 base64로 20번을 encoding해줍니다.
그럼 이러한 값이 출력이 됩니다. 이제 이 값을 복사합니다.
이것이 원래 문제에서 세팅 되어있는 쿠키값입니다. 이제 이것을 우리가 구한 값으로 대입을 해주면 됩니다.
이렇게 대입을 한 후 새로고침을 눌러주시면 문제가 해결됩니다.
이상입니다.
'Web Hacking > webhakcing.kr' 카테고리의 다른 글
[Webhacking.kr] pro45 문제풀이 (0) | 2018.02.01 |
---|---|
[webhacking.kr] pro 17 문제풀이 (0) | 2018.01.22 |
[Webhacking.kr] pro26 문제풀이 (0) | 2017.12.26 |
[Webhacking.kr] pro1 문제풀이 (0) | 2017.12.26 |
[Webhacking.kr] pro15 문제풀이 (0) | 2017.04.29 |