반응형

문제에 접근하여 소스코드를 보면 다음과 같이 나와있다.

1
2
3
4
5
6
7
<?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);
?>
cs


분석해보자면 세션에 chall4 값이 존재해야 하며, key값으로 제공하는 것이 세션 내의 chall4와 일치하면 solve된다.

이 때 세션의 chall4 값은 10000000와 99999999 사이의 랜덤 값과 "salt_for_you" 문자열이 붙은 값이며

우리에게 보이는 값은 해당 값을 500번 sha1 hash한 value이다.


처음에는 설마 이걸 계산해서 하라고 하겠어 라는 생각에 sha1의 취약점이라던지, type casting, loose comparison 취약점이라 생각하고 찾아보았지만 잘 나오지 않았다.


그래서 그냥 컴퓨터의 힘을 빌렸다.

아래와 같이 python 코드를 작성하여 레인보우 테이블을 만든 뒤 검색하여 풀었다.


1
2
3
4
5
6
7
8
9
10
11
12
import hashlib
 
= open("C:\\hack_temp\\04.txt",'w')
for i in range(10000000,20000000):
    ori=str(i)+"salt_for_you"
    f.write(ori + " : ")
    for j in range(0,500):
        ori=hashlib.sha1(ori.encode('utf-8')).hexdigest()
    f.write(ori)
    f.write('\n')
 
f.close()
cs


생각보다 검색해서 잘 안나오면 그냥 파이썬 코드 작성해서 자동으로 찾아 문제 풀도록 하려했지만 금방 나와서 그냥 패스

반응형

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

[Webhacking.kr] old-47  (0) 2020.04.10
[webhacking.kr] old-09 Writeup  (0) 2020.04.01
[webhacking.kr] 19번 문제  (0) 2018.03.17
[webhacking.kr] 20번 문제  (0) 2018.03.09
[webhacking.kr] 18번 문제  (0) 2018.03.08
블로그 이미지

rootable

,