반응형
문제에 접근하여 소스코드를 보면 다음과 같이 나와있다.
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 f = 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 |