본문 바로가기
Write Up/webhacking.kr_old

Webhacking.kr Challenge(old)_4번문제

by 비원(Be one) 2019. 12. 5.
반응형

여러분 안녕하세요. 세이버입니다.

 

이번 시간에는 Webhacking.kr Challenge old 4번 문제를 풀어보도록 하겠습니다.


1. 문제 파악하기

4번 문제를 클릭해봅시다.

 

옆에 코드 아이콘이 있는 걸로 보아 코드와 관련된 문제일 거 같습니다.

 

4번을 클릭하면 가장 먼저 문자열이 눈에 띕니다.

 

아무래도 저 문자열을 해독하는 것이 문제인 거 같습니다.

 

아래를 자세히 보면 [view-source]라고 쓰여있습니다.

클릭하면 소스코드가 적힌 창이 뜹니다.

 

중간에 있는 php 코드가 핵심인 듯합니다.

 

2. 코드 해석하기

<?php
  sleep(1); // anti brute force
  if((isset($_SESSION['chall4'])) && ($_POST['key'] == $_SESSION['chall4'])) solve(4);
  $hash = rand(10000000,99999999)."salt_for_you";
  $_SESSION['chall4'] = $hash;
  for($i=0;$i<500;$i++) $hash = sha1($hash);
?>

코드를 해석하면 다음과 같습니다.


hash 변수에 10000000부터 99999999까지의 임의의 랜덤값에 salt_for_you를 붙인 값을 저장합니다.

그러면 10000000salt_for_you ~ 99999999salt_for_you 중 하나가 hash에 대입됩니다.

그런 후 sha1 함수에 hash 변수를 넣고 500번 실행합니다.

500번 실행된 값을 출력합니다. 처음 본 문자열이 sha1 함수를 500번 실행한 값이었습니다. 

입력한 패스워드와 sha1 함수를 500번 실행하기 전의 값이 일치하면 풀리게 됩니다.


즉, 주어진 문자열을 보고 원본을 알아내는 문제입니다.

 

패스워드가 10000000salt_for_you ~ 99999999salt_for_you 중 하나이니까 경우의 수가 1/90,000,000입니다.

 

9천만 분의 1....

경우의 수가 너무 크고, 해쉬함수를 실행하는 횟수도 500번이기에 손으로 하나씩 해쉬값을 구하기는 어렵습니다.

따라서 해쉬를 자동으로 실행하는 프로그램을 만들어야 합니다.

 

저는 파이썬3으로 프로그램을 만들었지만, 다른 언어로 만드셔도 무방합니다.

프로그램으로 10000000salt_for_you ~ 99999999salt_for_you를 전부 500번 해쉬하고, 주어진 문자열을 검색하면 됩니다.

 

그러면 쉽게 문제를 해결할 수 있습니다.

해쉬 하는데만 거의 2일이 걸렸습니다....


이번 강의는 여기까지입니다.

 

오늘도 수고하셨습니다.

 


정리

- php코드를 해석

- 10000000salt_for_you 부터 99999999salt_for_you 까지 500번 해쉬하는 프로그램을 작성 후 주어진 문자열을 검색


강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.

궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.

 

poci5003@gmail.com

 

반응형