728x90
오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 md5 password를 함께 풀어볼 예정입니다.
## 문제 설명:
문제 정보를 살펴보면 md5('value', true)라는 힌트가 있다. 해당 함수는 php의 함수로 입력한 value의 md5해시값을 바이너리 형식으로 출력해준다.
## 문제 풀이
사이트에 접속해보니 다음과 같은 화면이 보인다.
패스 워드를 검증하는 입력창이 있다. 밑에 "get 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
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 |