본문 바로가기

wargame.kr 14 / php? c?

2020. 10. 27. 13:46

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
댓글