func() 함수에서 gets 함수를 통해 입력을 받는데, 입력 크기를 지정하지 않아 버퍼의 크기인 32 byte 보다 더 입력을 받아 overflow가 발생하는 모습이다.
오버 플로우를 통해 key 값을 0xcafebabe로 바꿔주면 쉘을 실행할 수 있을 것이다.
그렇다면 offset을 구해보도록하자.
func() 함수에서 두번째 call 하는 부분이 gets 함수가 실행되는 부분이다.
이때, overflowme를 인자값으로 주기 때문에 코드 위쪽을 보면 overflowme의 주소를 알 수 있다.
ebp - 0x2c로 ebp로부터 44만큼 떨어져 있다. 따라서 offset은 44 + 4(SFP) + 4(RET) = 52이다.
따라서 payload는 다음과 같을 것이다.
"A"*52 + "\xbe\xba\xfe\xca"
성공적으로 쉘을 획득하였다!!
'Wargame > Pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] 6번 random (0) | 2021.04.08 |
---|---|
[Pwnable.kr] 5번 passcode (0) | 2021.04.08 |
[Pwnable.kr] 4번 flag (0) | 2021.04.08 |
[Pwnable.kr] 2번 collision (0) | 2021.04.01 |
[Pwnable.kr] 1번 fd (0) | 2021.04.01 |