My Drive

webhacking #6 본문

writeup

webhacking #6

sunnyeo.park 2014. 9. 29. 22:03

webhacking #6.


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>&nbsp;&nbsp;HINT : base64&nbsp;&nbsp;</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> 


위의 코드에서 첫번째 php부분을 보면,

user, password의 쿠키 값을 설정해주고 있다.

id는 guest, password는 1234qwe를 각 각 No7~12에서 20번씩 base64인코딩을 한 후,

No14~30에서는 인코딩 된 값에서 숫자를 각 특수문자로 변환하여주고 있다.

최종적으로 설정된 쿠키값을 보면 아래와 같이 굉장히 긴 것을 알 수 있다. 


문제에서 요구하는 것은 암호화된 값을 다시 디코딩하였을 때, 아이디와 비밀번호가 모두 admin이어야 한다.

따라서 admin을 20번 base64인코딩한 후, 숫자를 특수문자로 변환해주는 작업을 하면 된다.


파이썬 코드를 이용하여 인코딩 하였다.


앞에서 쿠키를 변조한 것과 마찬가지로 user와 password의 value를 위에서 인코딩 된 값으로 바꿔준다.





'writeup' 카테고리의 다른 글

webhacking #17  (0) 2014.09.29
webhacking #15  (0) 2014.09.29
webhacking #14  (0) 2014.09.29
webhacking #4  (0) 2014.09.29
webhacking #1  (0) 2014.09.29
Comments