[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(0len(encoded), 2):
    decoded += chr(int(encoded[i:i+2], 16))
 
print base64.b64decode(decoded[::-1])
cs



코딩한 결과를 입력하자.




성공 메시지를 볼 수 있다.