반응형

webhacking.kr 문제 풀이 / Challenge(old) - 17번 문제 (100)

 

 

 

javascipt로 보여지는 코드가 있습니다. 

상당히 많은 계산식이 보이고, unlock 변수의 값과 입력한 값이 동일할 경우 원하는 페이지로 이동되는 것으로 보입니다. 

 

이 계산식을 파이썬으로 확인하였더니, 7809297.1이 나왔습니다. 

입력란에 이 값을 넣으면 100점을 획득한 것을 볼 수 있습니다. 

unlock=100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+1/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10-100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+9999999
print(unlock)

반응형
반응형

webhacking.kr 문제 풀이 / Challenge(old) - 15번 문제 (50)

 

 

코드를 보려고 해도 나오지 않습니다. 

javascript 때문에 튕겨져 나오는 듯 한데, javascript가 실행되지 않도록 설정해보겠습니다. 

 

 

자바스크립트를 차단하고, 문제 사이트에 접속해 보겠습니다. 

팝업은 뜨지 않고, 코드도 확인할 수 있습니다. 

아래 코드를 보면 팝업 창을 띄우고, 이전 화면으로 돌아가게 되어 있고, 그 이후에 ?getFlag로 이동하게 되어 있습니다. 

이전 화면으로 가기 때문에 ?getFlag 페이지로 이동하지 못하였는데, 주소창에 ?getFlag를 입력하여 보겠습니다. 

아래와 같이 입력하였더니, 50점을 획득할 수 있었습니다.

반응형
반응형

webhacking.kr 문제 풀이 / Challenge(old) - 14번 문제 (100)

이번 문제는 어떠한 값을 입력하고 check 버튼을 누르는 것으로 보입니다. 

우선 개발자 코드(F12)를 확인해 보겠습니다. 

 

코드를 보면 script 안에 pw 넣는 부분과 check 버튼을 눌렀을 때의 동작에 대한 코드가 있습니다. 

check 버튼을 눌렀을 때의 동작에 대한 코드인 ck() 함수를 살펴보겠습니다. 

우선 변수 ul에 이 페이지의 URL을 넣습니다. 

그리고 ".kr"이 있는 자리수를 변수 ul에 다시 넣고, 30을 곱합니다. 

이 변수 ul의 값과 입력한 값이 동일하면 ul*입력값으로 페이지를 이동합니다. 

 

우선 입력란에 변수 ul의 최종값과 동일하도록 값을 넣어 보도록 하겠습니다. 

function ck(){
  var ul=document.URL;
  ul=ul.indexOf(".kr");
  ul=ul*30;
  if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; }
  else { alert("Wrong"); }
}

".kr"은 18번째에 있기 때문에 18*30한 540을 입력란에 넣으면 아래와 같이 100점을 얻을 수 있습니다.

반응형
반응형

webhacking.kr 문제 풀이 / Challenge(old) - 06번 문제 (100)

 

아래와 같이 코드가 보여집니다. 

 

 

이 코드는 COOKIE['user']의 값이 없으면 val_id와 val_pw를 생성하고, 각각을 20번씩 base64로 인코딩합니다. 

그리고 숫자를 문구로 치환하고, user와 password에 대한 COOKIE를 설정합니다. 

<?php
include "../../config.php";
if($_GET['view_source']) view_source();
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,time()+86400,"/challenge/web-06/");
  Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");
  echo("<meta http-equiv=refresh content=0>");
  exit;
}

 

아래 구문은 user와 password에 대한 쿠키값에 문구를 원래의 값인 숫자로 치환합니다. 

그리고 20번씩 base64로 디코딩하게 됩니다. 

 

그리고 마지막에 이 디코딩 된 user와 password 쿠키 값이 각각 admin, nimda인 경우 solve(6)을 호출하게 됩니다. 

 

결국은 user와 password 쿠키 값을 각각 admin, nimda의 20번 인코딩한 값으로 설정하면 될 듯 합니다. 

<?php
$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("<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");

if($decode_id=="admin" && $decode_pw=="nimda"){
  solve(6);
}
?>

 

admin과 nimda를 base64로 인코딩하는 부분은 아래와 같이 파이썬으로 작성하였습니다. 

import base64
s1 = "admin"
b1 = s1.encode("UTF-8")

for i in range(1,21):
    b1 = base64.b64encode(b1)
print(b1)

s2 = "nimda"
b2 = s2.encode("UTF-8")

for i in range(1,21):
    b2 = base64.b64encode(b2)
print(b2)

 

위 파이썬에서 생성된 값을 EditThisCookie 도구를 이용하여, 쿠키값으로 설정합니다. 

zidarn87.tistory.com/164

 

도구 Tool / 쿠키 관리자 EditThisCookie 설치 및 사용법

도구 Tool / 쿠키 관리자 EditThisCookie 설치 및 사용법 EditThisCookie는 쿠키 관리자입니다. 이것을 이용하여 쿠키를 추가하고, 삭제하고, 편집하고, 찾고, 보호하거나 막을 수 있습니다! 다운은 아래 링

zidarn87.tistory.com

 

위 쿠키값을 넣고, 새로고침하면 아래와 같이 점수를 획득할 수 있습니다.

반응형

+ Recent posts