우선 첫 화면은 달랑 이것밖에 없었다.

client ip에 내 아이피가 달랑있어서 소스를 켜보았다.

별다른 소스는 없어보였지만

"source : index.php"라는 구문이 보여서 index.php로 들어가 보았다.

그랬더니 소스문을 훤하게 다 보여준다.

REMOTE_ADDR은

사용자가 현재 페이지를 보고 있는 시스템의 ip주소를 나타낸다고 한다.

하지만 ip주소를 바꿀 필요는 없고 cookie에 REMOTE_ADDR가 있다면

거기로 넣어주면 되는데

str_replace로 직접 넣게는 못해놓았다.

그래서 그것만 우회해 주게 cookie값을 넣어주면

무난하게 24번을 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 42번  (0) 2017.11.13
Webhacking.kr 26번  (0) 2017.11.12
Webhacking.kr 6번  (0) 2017.10.22
Webhacking.kr 4번  (0) 2017.10.22
Webhacking.kr 20번  (0) 2017.10.16

첫 우선 첫 화면은 이러하다.

그래서 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

cs

이런 소스가 있었다.

해석을 해보면 처음에 받은 아이디와 비밀번호를 20번 base64로 인코딩을 해서 

쿠키값에 user와 password에 집어넣고 나서 

화면에 출력을 해줄때에는 20번 다시 디코딩을 하는 것으로 보인다.

그래서 이것이 solve화면을 띄우려면

id와 password를 admin으로 만들어 줘야 한다.

따라서

admin을 base64로 인코딩을 20번 해 보았다.


그랬더니

Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZadGNFSmxSbGw1VTJ0V1ZXSkhhRzlVVmxaM1ZsWmFjVkZ0UmxSTmJFcEpWbTEwYTFkSFNrZGpSVGxhVmpOU1IxcFZXbUZrUjA1R1UyMTRVMkpIZHpGV1ZFb3dWakZhV0ZOcmFHaFNlbXhXVm1wT1QwMHhjRlpYYlVaclVqQTFSMWRyV25kV01ERkZVbFJHVjFaRmIzZFdha1poVjBaT2NtRkhhRk5sYlhoWFZtMXdUMVF3TUhoalJscFlZbGhTV0ZSV2FFTlNiRnBZWlVaT1ZXSlZXVEpWYkZKRFZqQXhkVlZ1V2xaaGExcFlXa1ZhVDJOc2NFZGhSMnhUVFcxb2IxWXhaREJaVmxsM1RVaG9hbEpzY0ZsWmJGWmhZMnhXY1ZGVVJsTk5WMUo1VmpKNFQxWlhTbFpYVkVwV1lrWktTRlpxUm1GU2JVbDZXa1prYUdFeGNHOVdha0poVkRKT2RGSnJhR2hTYXpWeldXeG9iMWRHV25STldHUlZUVlpHTTFSVmFHOWhiRXB6WTBac1dtSkdXbWhaTVZwaFpFZFNTRkpyTlZOaVJtOTNWMnhXWVZReFdsaFRiRnBZVmtWd1YxbHJXa3RUUmxweFVtMUdVMkpWYkRaWGExcHJZVWRGZUdOSE9WZGhhMHBvVmtSS1QyUkdTbkpoUjJoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxOSGFGQlZiVEUwVmpGU1ZtRkhPVmhTTUhCNVZHeGFjMWR0U2tkWGJXaGFUVzVvV0ZreFdrZFdWa3B6VkdzMVYySkdhM2hXYTFwaFZURlZlRmR1U2s1WFJYQnhWVzB4YjFZeFVsaE9WazVPVFZad2VGVXlkREJXTVZweVkwWndXR0V4Y0ROV2FrWkxWakpPU1dKR1pGZFNWWEJ2Vm10U1MxUXlUWGxVYTFwb1VqTkNWRmxZY0ZkWFZscFlZMFU1YVUxcmJEUldNalZUVkd4a1NGVnNXbFZXYkhCWVZHdGFWbVZIUmtoUFYyaHBVbGhDTmxkVVFtRmpNV1IwVTJ0a1dHSlhhR0ZVVnpWdlYwWnJlRmRyWkZkV2EzQjZWa2R6TVZZd01WWmlla1pYWWxoQ1RGUnJXbEpsUm1SellVWlNhVkp1UW5oV1YzaHJWVEZzVjFWc1dsaGlWVnBQVkZaYWQyVkdWWGxrUkVKWFRWWndlVmt3V25kWFIwVjRZMFJPV21FeVVrZGFWM2hIWTIxS1IxcEhiRmhTVlhCS1ZtMTBVMU14VlhoWFdHaFlZbXhhVjFsc1pHOVdSbXhaWTBaa2JHSkhVbGxhVldNMVlWVXhXRlZyYUZkTmFsWlVWa2Q0YTFOR1ZuTlhiRlpYWWtoQ1NWWkdVa2RWTVZwMFVtdG9VRll5YUhCVmJHaERUbXhrVlZGdFJtcE5WMUl3VlRKMGExZEhTbGhoUjBaVlZucFdkbFl3V25OT2JFcHpXa2R3YVZORlNrbFdNblJyWXpGVmVWTnVTbFJpVlZwWVZGYzFiMWRHWkZkWGJFcHNVbTFTZWxsVldsTmhWa3AxVVd4d1YySllVbGhhUkVaYVpVZEtTVk5zYUdoTk1VcFZWbGN4TkdReVZrZFdiR1JvVW5wc2IxUldXbmRsYkZsNVkwVmtWMDFFUmpGWlZXaExWMnhhV0ZWclpHRldNMmhJV1RJeFMxSXhjRWhpUm1oVFZsaENTMVp0TVRCVk1VMTRWbGhvV0ZkSGFGbFpiWGhoVm14c2NscEhPV3BTYkhCNFZrY3dOVll4V25OalJXaFlWa1UxZGxsV1ZYaFhSbFp5WVVaa1RtRnNXbFZXYTJRMFdWWktjMVJ1VG1oU2JGcFlXV3hhUm1ReFduRlJiVVphVm0xU1NWWlhkRzloTVVwMFlVWlNWVlpXY0dGVVZscGhZekZ3UlZWdGNFNVdNVWwzVmxSS01HRXhaRWhUYkdob1VqQmFWbFp0ZUhkTk1WcHlWMjFHYWxacmNEQmFSV1F3VmpKS2NsTnJhRmRTTTJob1ZrUktSMVl4VG5WVmJFSlhVbFJXV1ZaR1l6RmlNV1JIWWtaV1VsZEhhRlJVVm1SVFpXeHNWbGRzVG1oU1ZFWjZWVEkxYjFZeFdYcFZiR2hZVm14d1lWcFZXbXRrVmtwelZtMXNWMUl6YURWV01XUXdXVmRSZVZaclpGZGliRXB5Vld0V1MySXhiRmxqUldSc1ZteEtlbFp0TURWWFIwcEhZMFpvV2sxSGFFeFdNbmhoVjBaV2NscEhSbGROTW1oSlYxUkplRk14U1hoalJXUmhVbXMxV0ZZd1ZrdE5iRnAwWTBWa1dsWXdWalJXYkdodlYwWmtTR0ZHV2xwaVdHaG9WbTE0YzJOc1pISmtSM0JUWWtad05GWlhNVEJOUmxsNFYyNU9hbEpYYUZoV2FrNVRWRVpzVlZGWWFGTldhM0I2VmtkNFlWVXlTa1pYV0hCWFZsWndSMVF4V2tOVmJFSlZUVVF3UFE9PQ==

이렇게 나왔고 이것을

edit this cookie로 user와 password에 넣어주니

6번 클리어!!!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 26번  (0) 2017.11.12
Webhacking.kr 24번  (0) 2017.11.12
Webhacking.kr 4번  (0) 2017.10.22
Webhacking.kr 20번  (0) 2017.10.16
Webhacking.kr 54번  (0) 2017.10.16


4번 문제를 시작하니 이런 창이 나왔다.

위에 있는 문장으로 패스워드를 찾는 문제같다.

뭐 이것저것 아무거나 넣어 보아도 반응이 없고

소스코드도 다른 점이 없어보였기 때문이다.

위에 문장은 특이점이 == 이었기 때문에

구글에 ==인코딩이라고 쳐 보니

"http://idchowto.com/php-base64-%EC%9D%B8%EC%BD%94%EB%94%A9%EB%94%94%EC%BD%94%EB%94%A9-%ED%95%A8%EC%88%98%EC%9D%98-%ED%8A%B9%EC%A7%95/"

이 사이트가 나왔는데 굉장히 자세하게 base64를 설명해 놓으셨다.

간락하게 말하자면 8비트인 문자를 6비트로 나누어 암호화 하는 방식으로

남는 비트를 모으면 = 또는 == 가 나오는 것이 특징이다.



그래서 디코딩을 해 보았지만 다른 암호문이 나왔다.

그래서 이것을 여러가지로 디코딩을 해보았는데

인터넷을 뒤지다 보니 sha암호가 특징이 40글자라는 것을 보았는데

이것이 40글자여서 sha1방식으로 디코딩을 해보니

이렇게 변화가 있었다. 그래서 한번더 해 보았더니


정답이 나왔다.

4번도 클리어!!!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 24번  (0) 2017.11.12
Webhacking.kr 6번  (0) 2017.10.22
Webhacking.kr 20번  (0) 2017.10.16
Webhacking.kr 54번  (0) 2017.10.16
webhacking.kr 10번  (0) 2017.10.15


첫 화면을 보니 nickname 창 comment창 code 창에 어떤 값을  처넣어야 하는 문제이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
function ck()
{
 
if(lv5frm.id.value=="") { lv5frm.id.focus(); return; }
if(lv5frm.cmt.value=="") { lv5frm.cmt.focus(); return; }
if(lv5frm.hack.value=="") { lv5frm.hack.focus(); return; }
if(lv5frm.hack.value!=lv5frm.attackme.value) { lv5frm.hack.focus(); return; }
 
lv5frm.submit();
 
}
</script>



여기서

nickname값이 없으면 다시 return

comment 또한 없으면 안되고

code값은 옆에 나와있는 값이어야 submit이 된다고 한다.

하지만 조건을 만족시켜도 안되는 것을 알 수 있었다.

그래서 보니 time:2가 있는 것을 알 수있었다.

아마 2분이나 2초 안에 해야하는 것 같다.

따라서 콘솔창에

lv5frm.id.value = "1"; lv5frm.cmt.value = "1"; lv5frm.hack.value = lv5frm.attackme.value;ck();

라고 치고 2초안에 해보니 성공!


20번도 클리어!!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 6번  (0) 2017.10.22
Webhacking.kr 4번  (0) 2017.10.22
Webhacking.kr 54번  (0) 2017.10.16
webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 12번  (0) 2017.09.24

첫 화면은 이렇게 빈화면이다가

?자리에 여러 숫자와 문자가 하나씩떴다가 사라지고

?만 남는다.

아마 그것들이 곧 비밀번호일 것 같다.

하지만 너무 빨리 지나가기 때문에 먼저 소스를 보았다

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
<html><head>
<title>Challenge 54</title>
</head>
<body>
<h1><b>Password is <font id="aview">?</font></b></h1>
<script>
function run(){
  if(window.ActiveXObject){
   try {
    return new ActiveXObject('Msxml2.XMLHTTP');
   } catch (e) {
    try {
     return new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e) {
     return null;
    }
   }
  }else if(window.XMLHttpRequest){
   return new XMLHttpRequest();
 
  }else{
   return null;
  }
 }
 
x=run();
 
function answer(i)
{
x.open('GET','?m='+i,false);
x.send(null);
aview.innerHTML=x.responseText;
i++;
if(x.responseText) setTimeout("answer("+i+")",100);
if(x.responseText=="") aview.innerHTML="?";
}
 
setTimeout("answer(0)",10000);
 
</script>
 
 
</body></html>




소스를 보니 answer 함수에서 

?m=값으로 넣어주면 안되게 되어 있다.

그리고 x.responseText값을 aview.innerHTML에 넣어주고

그 값을 출력시켜주는 것 같다.

그리고 이제 x.responseText값이 없어지니 그제서야 ?를 띄워주는 소스이다.

따라서 계속 지나가는 값을 다 출력시켜주면 될 것 같다.

따라서 콘솔창에서

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
function run(){
  if(window.ActiveXObject){
   try {
    return new ActiveXObject('Msxml2.XMLHTTP');
   } catch (e) {
    try {
     return new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e) {
     return null;
    }
   }
  }else if(window.XMLHttpRequest){
   return new XMLHttpRequest();
 
  }else{
   return null;
  }
 }
 
x=run();
 
function answer(i)
{
x.open('GET','?m='+i,false);
x.send(null);
aview.innerHTML+=x.responseText;
i++;
if(x.responseText) setTimeout("answer("+i+")",100);
}
answer(0);




즉 aview.innerHTML += x.responseText로 고쳐주면

그 값이 출력 될 것이다.

그러면 답이 출력

54번 클리어!!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 4번  (0) 2017.10.22
Webhacking.kr 20번  (0) 2017.10.16
webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 12번  (0) 2017.09.24
Webhacking.kr 16번  (0) 2017.09.23


10번 문제를 들어가니 알수없는 이런 화면이 나왔다.

화면에서 읽을 수 있는 것은 O와 buy lotto이다

따라서 소스를 보았다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html><head>
<title>Challenge 10</title>
</head>
 
<body>
<hr style="height:100;background:brown;">
<table border="0" width="900" style="background:gray">
<tbody><tr><td>
<a id="hackme" style="position:relative;left:0;top:0" onclick="this.style.posLeft+=1;if(this.style.posLeft==800)this.href='?go='+this.style.posLeft" onmouseover="this.innerHTML='yOu'" onmouseout="this.innerHTML='O'">O</a><br>
<font style="position:relative;left:800;top:0" color="gold">|<br>|<br>|<br>|<br>buy lotto</font>
</td></tr>
</tbody></table>
<hr style="height:100;background:brown;">
</body></html>
cs

하지만 소스코드중 

onclick="this.style.posLeft+=1;if(this.style.posLeft==800)this.href='?go='+this.style.posLeft"

클릭하면 이동하는 소스가 실행이 안되어서 찾아보니

크롬에서는 실행이 안된다고 해서 익스플러어로 실행해 보니

클릭하면 한칸씩 옆으로 가는 것을 알 수 있었다.

그리고 800에 도달한다면 다른 값이 실행되는 것인데

한클릭에 1이 움직이므로 100으로 바꾸어 해 보았다.


 

그랬더니 클리어!












'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 20번  (0) 2017.10.16
Webhacking.kr 54번  (0) 2017.10.16
Webhacking.kr 12번  (0) 2017.09.24
Webhacking.kr 16번  (0) 2017.09.23
Webhacking.kr 14번  (0) 2017.09.23

javascript challenge!

자바스크립트 도전!

우선 소스를 보기로 한다.

WorkTimeFun=String.fromCharCode(118,97,114,32,101,110,99,111,61,39,39,59,13,10,118,97,114,32,101,110,99,111,50,61,49,50,54,59,13,10,118,97,114,32,101,110,99,111,51,61,51,51,59,13,10,118,97,114,32,99,107,61,100,111,99,117,109,101,110,116,46,85,82,76,46,115,117,98,115,116,114,40,100,111,99,117,109,101,110,116,46,85,82,76,46,105,110,100,101,120,79,102,40,39,61,39,41,41,59,13,10,32,13,10,32,13,10,102,111,114,40,105,61,49,59,105,60,49,50,50,59,105,43,43,41,13,10,123,13,10,101,110,99,111,61,101,110,99,111,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,105,44,48,41,59,13,10,125,13,10,32,13,10,102,117,110,99,116,105,111,110,32,101,110,99,111,95,40,120,41,13,10,123,13,10,114,101,116,117,114,110,32,101,110,99,111,46,99,104,97,114,67,111,100,101,65,116,40,120,41,59,13,10,125,13,10,32,13,10,105,102,40,99,107,61,61,34,61,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,52,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,51,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,54,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,52,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,50,45,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,56,41,41,43,34,126,126,126,126,126,126,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,50,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,51,41,41,13,10,123,13,10,97,108,101,114,116,40,34,80,97,115,115,119,111,114,100,32,105,115,32,34,43,99,107,46,114,101,112,108,97,99,101,40,34,61,34,44,34,34,41,41,59,13,10,125,13,10); eval(WorkTimeFun);

소스가 난독화 되어있는 모습을 볼 수 있다.

굉장히 보기 불편하다.

우선 eval(string) 는 자열로 넘어온 자바스크립트 구문을 실행하는데,

호출하는 위치와 방식에 따라 eval의 실행 컨텍스트와 범위(scope)가 달라진다.

그래서 우선 WorkTimeFun을 해독하기 위해서

크롬console 에 넣어보던지

javascript:document.write(WorkTimeFun)또는

javascripts:alert(WorkTimeFun)을 주소창에 쳐 보았다.


"var enco='';

var enco2=126;

var enco3=33;

var ck=document.URL.substr(document.URL.indexOf('='));

 

 

for(i=1;i<122;i++)

{

enco=enco+String.fromCharCode(i,0);

}

 

function enco_(x)

{

return enco.charCodeAt(x);

}

 

if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3))

{

alert("Password is "+ck.replace("=",""));

}

"

그랬더니 소스코드가 나왔다.

위의 소스에서 ck == 뒷 조건을 만족 해 주면 답이 나오는 것 같다.

따라서 

String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)


를 콘솔에 넣어주면

답이 나온다!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 54번  (0) 2017.10.16
webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 16번  (0) 2017.09.23
Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14

시작 화면이 난감하게 별만 달랑있다.

따라서 또 소스코드를 보았다.

우선 소스에서

innerHTML : 특정요소를 가져오거나, 변경할때 사용

onkeypress : 내가 키를 눌렀을 때 동작

Math.floor : 소수값이 있을 때 소수값은 버려주는 함수

Math.random : 랜덤값을 뽑아준다

onmouseover : 해당 이벤트 영역에 마우스커서를 올리면 반응을 해준다

String.fromCharCode(): 받은 값을 유니코드에 해당되는 문자 or 문자열을 반화해 준다

location.href : 페이지를 이동시켜준다


일단 body안에서 html은 위에서 순차적으로 내려가면서 실행 하기 때문에 

body에서 처음 줄에서 kk()함수는 쓸 수 없지만 onload함수때문에 모든 구현이 다 끝난후 실행해 주기에 쓸 수있습니다.

먼저 kk(x,y)함수는 rndc의 값에 9000000보다 같거나 작은 숫자를 정해주고 그 값을 색깔로 해서

x,y좌표를 가지는 문장을 만들어 줍니다. 그리고 마우스를 대면 ' ' ,즉 지워지고 아니면 *을 만들어 줍니다.

또 mv(cd)함수는 먼저 kk함수를 불러오는데 star의 posletf값에서 50을 뺀 값과 posTop-50값을 x,y에 넣어줍니다.

이때 cd값에 따라 좌표가 바뀝니다.

하지만 cd 값은 124일 때 페이지를 이동시켜줍니다. 그리고 String.fromCharCode(cd)로 cd의 값을 유니코드 값으로 바꾸어 줍니다.

따라서 124를 만들어 주기 위해서는 '|'를 넣는다면 위치가 바뀔 것 입니다.

그러면 정답화면으로 넘어갑니다.

16번도 클리어!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 12번  (0) 2017.09.24
Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14

+ Recent posts