모의해킹/Dreamhack
type confusion [WEB LEVEL1]
철민1234
2023. 5. 15. 21:07
728x90
type confusion 취약점은 객체의 인스턴스가 타입을 혼동하여 생기는 취약점이다.
문제의 소스코드를 확인해 보자.
json_decode($POST ['json'] 은 POST 방식으로 json 데이터를 받아서 저장한다.
php소스에서 == 가 같은 비교문은 느슨한 비교를 한다.
개발자 모드를 통해 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 값을 얻을 수 있다.