Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

White Security

[wargame.kr] php? c? 문제풀이 본문

Wargame Writeups/wargame.kr

[wargame.kr] php? c? 문제풀이

POSIX 2019. 1. 22. 14:17

wargame.kr 사이트의 14번째 문제입니다.



"32비트 응용프로그램의 정수 타입에 대해 알고있니?"


링크에 접속하니 D1, D2 이름으로

두개의 값을 입력할 수 있도록 되어 있습니다.


먼저 소스를 살펴 보겠습니다. 



d1과 d2를 모두 int타입으로 캐스팅하여 $input1, $input2에 저장하였습니다.

그리고 p7.c라는 c언어 소스를 기반으로 컴파일 하였습니다.

$input1을 인자로 컴파일 된 프로그램을 실행했군요.

결과값은 1이 되어서는 안됩니다.

그 값이 $input2와 비교하여 같으면 Flag를 출력하도록 되어 있습니다.



http://wargame.kr:8080/php_c/p7.c

처음에 헤매었던 부분인데 /tmp/p7.c에 있어야 할 프로그램 소스가

웹 서버에도 존재하고 있습니다.


소스를 살펴보니 인자로 들어오는 $input1 (d1)값의 조건이 있습니다.

0 이상이어야 하고

5를 더했을때 4를 넘어서는 안됩니다.


하지만, 수학적으로 0 또는 양수에 5를 더하게 되면

4를 넘을 수 밖에 없습니다.


이를 넘기려면 32비트 자료형의 최대 값을 넘겨

오버플로우 시켜야 하겠군요.


부호있는 32비트 정수형이 표시 가능한 최대 값은 2^31 - 1 입니다.

2^31 - 1을 입력하여 주니

예상대로 오버플로가 일어나게 되었습니다.



본래 폼에는 d1를 최대 9자리 밖에 입력할 수 없도록 되어있습니다.

따라서 수정해 준 후에 2147483647을 대입하여 주었습니다.


Key를 얻었습니다.

Comments