14번 문제에요.
배점은 293점, 이름은 php? c? 네요.
php? c?
do you know "integer type" of 32bit application?
입력칸이 두개 있어요.
소스를 보면 1번 입력을 /tmp/p7 의 인자에 넘겨주고
/tmp/p7 의 출력이 1이 아니고 2번 입력값과 같으면 문제가 풀리네요.
그러니 저기에 적혀있는 ./p7.c 파일에 접근해보면?
파일이 다운로드되요.
소스를 보죠.
첫번째 인자에서 값을 읽어와서, 값이 음수면 1을 띄워요.
그리고 그 값에 5를 더한 뒤, 4보다 크면 1을 띄우고,
5보다 작으면 i 를 출력하고 끝나네요.
일단 컴파일부터 하고...
위에서 말했던 32비트 어플리케이션의 정수형은 이렇게 생겼어요.
0000 0000 0000 0000 0000 0000 0000 0000
부호비트
가장 첫번째 비트가 부호비트이니 INT_MAX 즉 2147483647 을 집어넣으면
0111 1111 1111 1111 1111 1111 1111 1111
이 되겠죠.
그리고 거기에 + 5 를 하니
1000 0000 0000 0000 0000 0000 0000 0100
부호비트가 1이 되서 음수로 바뀌게 되요.
당연히 -2147483644 는 4보다 크지 않으니 10번라인을 통과할수 있고,
5보다도 작으니 11번 라인도 통과할수 있어요.
그러니 1번 입력창의 글자수 제한을 풀어버리고
2147483647 / -2147483644
를 집어넣으면?
36fc3053f368d3886c0ed30a054b847e9c31139e
빠밤!
키가 나왔네요.
'연구글 > wargame.kr' 카테고리의 다른 글
wargame.kr 17 / pyc decompile (0) | 2020.11.03 |
---|---|
wargame.kr 16 / web chatting (0) | 2020.11.02 |
wargame.kr 13 / img recovery (0) | 2020.10.26 |
wargame.kr 12 / type confusion (0) | 2020.10.23 |
wargame.kr 11 / tmitter (0) | 2020.10.22 |