워게임/CTFlearn

[CTFlearn] Accumulator - 포너블 / C / 정수 오버플로우

SecurityMan 2023. 9. 5. 11:00

 

간단하게 해결할 수 있는 포너블 문제

 

풀이수가 작은건 뒤쪽에 있어서 사람들이 많이 시도하지 않아 그런것 같다.

 

반응형

 

 

문제에선 원격으로 접속할 수 있는 주소와

 

task.c 라는 소스코드가 주어진다.

 

 

소스코드의 내용을 보면

 

int형인 acc 변수를 선언하고

 

while 내에서 사용자의 입력을 받아

 

입력한 값을 계속 더해 acc에 저장하는 코드이다.

 

acc 가 양수인 경우 계속 while 문이 진행되고,

 

그게 아닐 경우 You win! 과 함께 플래그가 출력된다.

 

뭔가를 계속 더하는데 

 

더한 결과 값이 음수가 되게 만들어야 한다는 뜻이다.

 

밑에 있는 조건문 때문에

 

입력값에 음수를 줄 수는 없는 상황이다.

 

 

한번 실행시켜 봤다.

 

1, 2, 3을 차례로 입력해봤든네

 

acc에는 1, 3, 6 이 저장되는 것을 볼 수 있다.

 

입력한 값이 계속 더해지고 있는 것이다.

 

 

이 문제는 아주 쉽게 해결할 수 있다.

 

int 형의 경우 표현할 수 있는 정수의 범위가 한정되어 있기 때문이다.

 

2,147,483,647 이 최대값이고,

 

여기에 1을 더하면 가장 낮은 값인 -2,147,483,648 이 되어버린다.

 

 

처음에 2,147,483,647 을 입력하고

 

1을 입력하면

 

더한 값이 음수가 되어 플래그가 출력되는것을 볼 수 있다.

 

 

어떤식으로든 2,147,483,648 보다 큰 숫자를 만들면 된다.

반응형