White Security
[wargame.kr] php? c? 문제풀이 본문
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를 얻었습니다.
'Wargame Writeups > wargame.kr' 카테고리의 다른 글
[wargame.kr] pyc decompiler 문제풀이 (0) | 2019.01.23 |
---|---|
[wargame.kr] web chatting 문제풀이 (0) | 2019.01.23 |
[wargame.kr] img recovery 문제풀이 (0) | 2019.01.22 |
[wargame.kr] type confusion 문제풀이 (0) | 2019.01.22 |
[wargame.kr] tmitter 문제풀이 (1) | 2019.01.22 |
Comments