도카이트

[Wargame] Webhacking.kr - old 51 본문

Wargame/Webhacking.kr

[Wargame] Webhacking.kr - old 51

dodoh4t 2022. 6. 20. 23:32
728x90
반응형

문제 화면

[old 51 - 문제 화면]

- Admin page 를 출력하며, ID와 PW를 입력할 수 있는 폼이 출력된다.

- 소스코드를 확인해보도록 하자 !

 

 

소스코드

[old 51 - 소스 코드]

- id 값에 대하여 addslashes 함수를 적용하고 있으며,

- pw의 경우는 md5 함수가 적용되어 있고, 추가로 true 인자 값이 작성되어 있다.

- admin 으로 로그인 성공하면 해당 문제가 solve 되는 듯 하다.

 

 

md5 함수에 true 값 존재?

md5([입력 값],true) 형태의 함수는 실행 결과에 ‘=’ 문자열이 포함되면 해당 쿼리문이 참이 되는

취약점이 존재한다. 해당 소스코드를 예시로 살펴보면 입력받는 pw 값이 싱글 쿼터로 감싸져 있다.

pw='{$input_pw}'  // $input_pw = md5($_POST['pw'],true);

이때 md5(example,true)의 실행 결과로 '=' 값이 포함되어 있다면..
pw=''='' 형태가 되어 쿼리문에서의 결과가 참이 되는 것을 확인할 수 있다.

이러한 취약한 부분을 이용하여 무작위 정수 값을 md5 함수에 대입 후 해시화하여 ‘=’ 을 포함한 결과를 출력하는 정수 대입값을 pw 부분에 입력 시 쿼리 실행문이 참이 되어 로그인이 가능해진다.

 

‘=’ 을 포함한 값을 찾기 위해 Python의 hashlib 모듈을 이용해서 값을 찾아보도록 하자 !

 

 

md5.py 작성 및 실행 결과

import hashlib

for i in range(0, 10000000):
    if b"'='" in hashlib.md5(str(i).encode()).digest():
        print('{}'.format(i))
        break

[md5.py  작성]

- 0부터 10000000 까지의 정수를 대입하여 md5 해시화를 진행한다.

- 이 중 ‘=’ 을 포함하는 값을 print 하도록 for 문을 작성하였다.

- 실행 결과 1839431을 출력하며 이는 md5 해시화 하였을 경우 ‘=’ 값을 포함하는 정수이다.

- 획득한 값을 이용해 메인 페이지에서 admin 계정으로 로그인을 시도하면.. (ID : admin / PW : 1839431)

- 성공적으로 문제를 solve 할 수 있다 !

728x90

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

[Wargame] Webhacking.kr - old 58  (0) 2022.06.20
[Wargame] Webhacking.kr - old 54  (0) 2022.06.20
[Wargame] Webhacking.kr - old 50  (0) 2022.06.20
[Wargame] Webhacking.kr - old 34  (0) 2022.06.20
[Wargame] Webhacking.kr - old 33  (0) 2022.06.20
Comments