본문 바로가기
CTF_/webhacking.kr

[webhacking.kr] old-04(300) 풀이

by 낭람_ 2020. 1. 31.
반응형

[old-04] 레인보우 테이블


- 들어가면 어떠한 값이 써져있고, Password를 입력하는 칸이 있다.


- php 부분을 보면 brute force 공격을 막기 위해 sleep(1)함수가 적용되어 있고,

- 10000000~99999999+salt_for_you 라는 문구를 $_SESSION['chall4']에 저장하고,

- 그것을 sha1로 500번 암호화 하여 출력한다.

- 우리가 알아야하는것은 sha1로 암호화 하기 전의 문자열이다.

- 이 문제를 풀기위해서는 레인보우 테이블이라는 것이 필요하다.

- sha1은 단방향 암호화 방식이다. (해시값에서 평문값을 못찾는다)

- 단방향 암호화를 복호화 하려면 해시값끼리 비교해보는 것이 유일하다.

- 즉, 레인보우 테이블이란 해시값에서 평문을 추출하기 위한 목적으로 사용되는 테이블이다.

ex) a : 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8

ex) b : E9D71F5EE7C92D6DC9E92FFDAD17B8BD49418F98

ex) c : 84A516841BA77A5B4648DE2CD0DFCB30EA46DBB4

a, b, c가 평문 오른쪽이 sha1로 암호화한 값

만약 E9D71F5EE7C92D6DC9E92FFDAD17B8BD49418F98 이 해시값의 평문을 찾고 싶으면, 

직접 b를 sha1로 암호화 하여 해시값을 비교하는 것이 유일한 복호화 방법

- 위의 복호화 방법에서 생각한 방법이 레인보우 테이블이다.

- 즉, 평문과 암호화한 값을 테이블 형식으로 저장하여, 해시값을 검색하여 평문을 찾아낸다.



- 나는 파이썬을 통하여 레인보우 테이블을 제작하였다.

- 우선 랜덤값이 10000000 ~ 99999999 이기 때문에 함수를 table1() ~ table9()까지 나눴고,

- 한 함수당 시간이 오래 걸리기 때문에 쓰레드를 이용하여 각 txt 파일에 평문과 해시값을 저장하도록 했다.

web04.py


- 4번 문제에 나와 있는 hash값을 테이블에서 검색하여 평문을 넣어주면 클리어



+ 레인보우 테이블은 크기가 너무 커서 이메일 적어주시면 보내 드리겠습니당(테이블 만드는데 하루 걸렸네욤..)

반응형

'CTF_ > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] old-10(250) 풀이  (0) 2020.01.31
[webhacking.kr] old-06(100) 풀이  (0) 2020.01.31
[webhacking.kr] old-17(100) 풀이  (0) 2020.01.30
[webhacking.kr] old-16(100) 풀이  (0) 2020.01.30
[webhacking.kr] old-15(50) 풀이  (0) 2020.01.30

댓글