[Dreamhack WEB] LEVEL1 : type confusion

2026. 1. 30. 10:38War Game

문제 설명

 

정답은 바로 이 제목 자체에 있다. 라고 되어있다.


문제 분석

VM 활성화 후 웹에 들어가면 다음과 같이 소스코드를 볼 수 있게 되어있다.

 

 

 

 

소스 코드를 보면 php로 작성되어 있다.

 

 

if ($json->key == $key) { 부분을 보면

 

key == $key

사용자 입력 == 서버 비밀번호가 문자열로서 똑같은지 확인을 하는데..

==는 php에서 타입이 달라도 알아서 변환해서 비교해버린다.

 

 

Boolean Bypass? 

php는 웹개발을 쉽고 빠르게 하기 위해 만들어졌다.

따라서 형식에 얽매이지 말고 편하게 비교하라는 철학이 있다.

보통 사용자가 입력창에 123을 문자로 넣든.. 숫자로 123넣든.. 그냥 같게 하자 피곤하니까! 하고 설계했지만

이 때문에 보안 취약점이 생긴다.

 

1. 서버는 비밀번호를 기대하고 == 연산을 수행하지만

2. 해커가 입력값을 true로 조작해서 보낸다

3. php 내부 로직 상 true == 문자열은 true 로 판정된다 

 

php에서 {"key": true} 에 빈문자열만 아니면 ture 라고 해버리기 때문에..

 

 


페이로드 (.js) 를 작성해서 개발자 > 콘솔 에 입력해준다.

fetch(window.location.href, {    
    method: 'POST',               
    headers: {                    
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: 'json={"key":true}' 
})
.then(response => response.text())
.then(data => console.log(data));

 

 

플래그 획득!

 

'War Game' 카테고리의 다른 글

[Dreamhack WEB] LEVEL1 : call  (0) 2026.02.04
[Dreamhack WEB] LEVEL1 : Type c-j  (0) 2026.02.02
[Dreamhack WEB] LEVEL1 : What time is it?  (0) 2026.01.29
[Dreamhack WEB] LEVEL1 : DreamDocs  (0) 2026.01.28
[Dreamhack WEB] LEVEL1 : what-is-my-ip  (0) 2026.01.27