[Wargame Write-up]/OverTheWire
[OverTheWire] [Natas] Level 8 → Level 9
Kevin S.
2017. 1. 16. 14:21
Natas 9번째 문제이다.
natas6때와 Form이 비슷해, 잘못 들어온 줄 알았다.
우선 소스코드를 확인해보자.
17라인에서 encodedSecret라는 변수의 특정 문자열을 넣었다.
24라인에서 이 encodedSecret 변수와 비교하게 되는데, 19~21라인 함수에 의해, 입력값을 base64 인코딩 후,
문자열을 역으로 뒤집은 것을 16진수 문자열로 바꾼 값과 비교한다.
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 | <html> <head> <!-- This stuff in the header has nothing to do with the level --> <link rel="stylesheet" type="text/css" href="http://natas.labs.overthewire.org/css/level.css"> <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/jquery-ui.css" /> <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/wechall.css" /> <script src="http://natas.labs.overthewire.org/js/jquery-1.9.1.js"></script> <script src="http://natas.labs.overthewire.org/js/jquery-ui.js"></script> <script src=http://natas.labs.overthewire.org/js/wechall-data.js></script><script src="http://natas.labs.overthewire.org/js/wechall.js"></script> <script>var wechallinfo = { "level": "natas8", "pass": "<censored>" };</script></head> <body> <h1>natas8</h1> <div id="content"> <? $encodedSecret = "3d3d516343746d4d6d6c315669563362"; function encodeSecret($secret) { return bin2hex(strrev(base64_encode($secret))); } if(array_key_exists("submit", $_POST)) { if(encodeSecret($_POST['secret']) == $encodedSecret) { print "Access granted. The password for natas9 is <censored>"; } else { print "Wrong secret"; } } ?> <form method=post> Input secret: <input name=secret><br> <input type=submit name=submit> </form> <div id="viewsource"><a href="index-source.html">View sourcecode</a></div> </div> </body> </html> | cs |
위에서 파악한 알고리즘을 역으로 코딩하여, decode하면 되겠다.
문자열의 요소를 2개씩 묶어, ASCII 문자로 바꾼 후, decoded 변수에 누적시킨다.
그 후, 문자열을 역순으로 배치한 값을 base64 디코딩하는 코드이다.
결과는 그 아래와 같이 나오겠다.
1 2 3 4 5 6 7 8 9 | import base64 encoded = "3d3d516343746d4d6d6c315669563362" decoded = "" for i in range(0, len(encoded), 2): decoded += chr(int(encoded[i:i+2], 16)) print base64.b64decode(decoded[::-1]) | cs |
코딩한 결과를 입력하자.
성공 메시지를 볼 수 있다.