여러분 안녕하세요. 세이버입니다.
이번 시간에는 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입니다.
경우의 수가 너무 크고, 해쉬함수를 실행하는 횟수도 500번이기에 손으로 하나씩 해쉬값을 구하기는 어렵습니다.
따라서 해쉬를 자동으로 실행하는 프로그램을 만들어야 합니다.
저는 파이썬3으로 프로그램을 만들었지만, 다른 언어로 만드셔도 무방합니다.
프로그램으로 10000000salt_for_you ~ 99999999salt_for_you를 전부 500번 해쉬하고, 주어진 문자열을 검색하면 됩니다.
그러면 쉽게 문제를 해결할 수 있습니다.
해쉬 하는데만 거의 2일이 걸렸습니다....
이번 강의는 여기까지입니다.
오늘도 수고하셨습니다.
정리
- php코드를 해석
- 10000000salt_for_you 부터 99999999salt_for_you 까지 500번 해쉬하는 프로그램을 작성 후 주어진 문자열을 검색
강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.
궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.
'Write Up > webhacking.kr_old' 카테고리의 다른 글
Webhacking.kr Challenge(old)_6번문제 (0) | 2020.05.03 |
---|---|
Webhacking.kr Challenge(old)_5번문제 (2) | 2020.01.13 |
Webhacking.kr Challenge(old)_3번문제 (0) | 2019.11.30 |
Webhacking.kr Challenge(old)_2번문제_part2 (0) | 2019.11.24 |
Webhacking.kr Challenge(old)_2번문제_part1 (13) | 2019.11.20 |