다운로드 받은 문제의 소스코드를 확인해 보자.
앞선 문제와 동일하게 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값을 얻을 수 있다.
'wargame > dreamhack' 카테고리의 다른 글
[시스템 해킹] basic_exploitation_001 문제 풀이 (1) | 2024.10.31 |
---|---|
[시스템 해킹] Return Address Overwrite 문제 풀이 (0) | 2024.10.31 |
[시스템해킹]shell_basic 문제 풀이 (1) | 2024.09.26 |