4번 문제다 renewal 전에 300점 이하는 다 풀었었는데 어째 요즘에는 300점 중에서도 어려운 게 좀 있는 거 같다.

이번 문제는 푸는데 시간이 좀 걸렸다.(설명 들으면 왜 걸리는 줄 아십니다)

[그림 1]

음 정감 가는 페이지 디자인이다. 난해한 글자들이 적혀 있고 패스워드를 입력해야 되고 소스코드를 볼 수 있다.

느낌상으로는 저 값에 연관된 것을 제출하면 될 거 같다.(바로 넣어봤는데 역시 아니더라...)

[그림 2]

보자 보자... sleep(1); 무작위 대입 공격을 예방하기 위해 넣어뒀다고 주석으로 적어놨다.

밑에 구문들을 해석해보면

chall4의 값을 key값과 비해서 같으면 문제가 풀린단다.

chall4는 1000만부터 9999만 사이 랜덤값과 salt_for_you 값을 sha1으로 500번 암호화 한 값이다.

ex) 12345678salt_for_you --md5 * 50 --> asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf

지금 이 asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf에 해당하는 값이 우리 눈에 표기되는 것이다.

(참고로 세션 종료될 때마다 값이 바뀐다.)

 

md5를 복호화하는 법 아는 사람? 백날 검색해봐라 나오나 절대 안 나온다.

(나오시면 댓글 주세요 저가 배우러 달려갑니다)

 

md5에 대한 것은 직접 찾아서 공부하길 바란다.(참고로 md5로 암호화시키면 40글자 나온다)

 

복호화가 안 되는 암호화일 경우 어떻게 해야 하나? 레인보우 테이블을 만들어야 된다.

레인보우 테이블이란? 해시 함수를 사용하여 만들어 낼 수 있는 값들을 저장한 표이다.

 

코드를 짜서 1000만부터 9999만까지의 평문을 저장해 놓자(세션 종료돼도 저장해두면 만사 OK)

from hashlib import sha1

t=90000001
print("Web hacking cahllenge 4 solution module")
f = open("C:\\Users\Ravidus\Desktop\\webhacking4-9.txt", "w")
while(t <= 99999999):
                testhash = str(t)+"salt_for_you"
                temp = testhash
                for i in range(0, 500):
                    testhash = sha1(testhash.encode('utf-8')).hexdigest()


                result = temp+' '+testhash+'\n'
                f.write(result)
                t += 1
f.close()                
print('finish')

 

이 코드를 사용하여 레인보우 테이블을 만들었다.

한 번에 1000만부터 9999만 까지 돌리면 시간이 오래 걸리기 때문에 나눠서 돌리는 편을 추천한다.

[그림 3]


몇 달 전에 푼 건데 이렇게 정리해뒀다 언제 보고서 쓸지 몰라서...

 

암호문이 보고서 작성 사이 또 바뀌었다...

bbb2e3b3bea48e4afb395ba64b9ff62bd44053bd

1-9까지 표를 보고 평문을 찾아서 값을 넣어주면 문제가 풀린다.(아 이번에도 4-9 맨뒤에서 나왔다...ㅎ....)

[그림 4]

 

레인보우 테이블과 md5에 관한 지식 그리고 코드 작성 능력이 필요한 문제인 거 같다.

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

Webhacking 7번 문제 풀이  (0) 2020.02.03
Webhacking 6번 문제 풀이  (1) 2020.01.30
Webhacking 5번 문제 풀이  (0) 2020.01.30
Webhacking 3번 문제풀이  (0) 2020.01.29
Webhacking 1번 문제풀이  (0) 2020.01.28

+ Recent posts