1. 개요
자바스크립트 부동 소수점 문제
2. 분석
1) 확인
숫자 2개의 곱이 22952152323332505688670761214671498225451684330137990990356473040741684014997701799009910066964917896400501477
이 되어야 한다고 합니다.
2) 부동 소수점
자바스크립트에서는 모든 숫자가 실수이며, Double-precision floating-point format 을 사용합니다.
이에 따라 표현 가능한 범위는 -(2^53 - 1) ~ 2^53 -1
53 비트를 넘어가면 모두 0으로 표시됩니다.
이 범위를 넘어가는 수는 모두 2의 배수로 표현됩니다. 따라서 홀수도 짝수로 표현됩니다.
3. exploit
문제에서 주어진 숫자 22952152323332505688670761214671498225451684330137990990356473040741684014997701799009910066964917896400501477 는 2^53 - 1을 넘어간 수이며 2의 배수로 표현가능합니다.
따라서, a = n / 2, b = 2를 넣으면 통과 가능합니다.
참고
BigInt 사용해도 안된다.
'CTF' 카테고리의 다른 글
[Square CTF 2017] little-doggy-tables (0) | 2022.06.12 |
---|---|
[Square CTF 2017] Password checker (0) | 2022.06.12 |
[Grey Cat The Flag 2022] Too Fast (0) | 2022.06.11 |
[HSCTF 9] vending-machine (0) | 2022.06.11 |
[HSCTF 9] squeal (0) | 2022.06.10 |