모의해킹/Dreamhack

type confusion [WEB LEVEL1]

철민1234 2023. 5. 15. 21:07
728x90

문제 정보

type confusion 취약점은 객체의 인스턴스가 타입을 혼동하여 생기는 취약점이다.

 

문제 정보

문제의 소스코드를 확인해 보자.

 

소스코드

json_decode($POST ['json'] 은 POST 방식으로 json 데이터를 받아서 저장한다.

php소스에서 == 가 같은 비교문은 느슨한 비교를 한다.

 

util.js 파일

개발자 모드를 통해 js 파일을 확인했을 때, submit 함수에서 JSON.stringify() 함수로 자바스크립트의 값을 JSON문자열로 변환시켜 준다.  JSON.stringfy({key: key}) 값을 JSON 문자열로 반환을 해주고, PHP에서 해당 값을 json_decode를 해준다.

 

문제 풀이

PHP 소스에서 if(json -> key == key)에서 key값을 true을 만들면 flag 값을 얻을 수 있다. 즉, json의 key값을 문자열과 비교했을 때 true값이 나오는 값으로 변조를 하면 되는 문제이다.

* [true == 문자열] 의 경우 결과는 true이 된다.

 

느슨한 비교는 두 값의 타입이 다르더라도 변환을 통해 같은 값으로 취급될 수 있다면 true로 처리하게 된다.

 

개발자 모드의 console을 이용해 JSON.stringfy({key:key}) 값을 JSON.stringfy({key:true}) 로 변경을 해준다.

그리고 아무 문자를 입력을 하면 해당 flag 값을 얻을 수 있다.