wargame/dreamhack

[시스템 해킹] basic_exploitation_000 문제 풀이

seungwon9201 2024. 10. 31. 17:29

 

다운로드 받은 문제의 소스코드를 확인해 보자. 

앞선 문제와 동일하게 buf와 입력값을 출력하는 scanf의 크기가 서로 다른 것을 확인할 수 있다.  또한 scanf가 null바이트를 만나면 종료한다는 것도 알 수 있다. 

 

그럼 gdb로 확인해보자.

앞선 문제에선 아키텍처가 64비트 기반이었기 때문에 push rbp 값이 8바이트였다. 하지만 이번엔 32비트 기반이라고 했으니 push ebp값은 4바이트가 된다. 

버퍼는 128바이트이니까 128 + 4 = 132 즉, 132바이트를 채워야 프로그램의 흐름을 바꿀 수 있다. 

 

이전 문제에서 했던 것처럼 동일하게 작성하면

아래가 최종 코드다.

2, 3번째 줄로 buf의 주소를 서버로부터 받아오자. 

 

쉘 코드의 바이트를 26바이트로 설정하자.(scanf가 null값을 받을 때 종료하는 것을 회피하기 위해)

이렇게 되면 A글자 106바이트와 쉘 코드 26바이트 총 132바이트가 된다. 

이러면 버퍼 오버플로우를 성공적으로 실행시킬 수 있게 된다. 

 

이렇게 flag값을 얻을 수 있다.