-
[Stack 4]System/Protostar 2018. 2. 2. 23:44
[Stack 4 Code]
[Stack 4 실행]
코드는 buffer를 입력받고 끝난다.
BOF를 일으켜 win()를 실행시키면 되는 문제같다.
우선, A를 65개 넣어봤지만 아무 반응이 없다.
gdb로 열어봐야겠다.
==========================================================
문제를 풀기 위해선 EIP레지스터를 알아야 했다.
EIP란
Instruction Pointer로
다음 실행될 함수의 주소값을 가지고 있는 레지스터다.
따라서, EIP공간까지 BOF를 일으켜서
win()의 시작 주소값을 넣어주면 되는 문제다.
[Stack4 main]
gets함수가 호출되는 부분에 BP를 걸고 실행을 시킨 후
AAAA를 입력해봤다.
보면 buffer의 주소값이 0xbffff760임을 알 수 있다.
그럼 이제 EIP의 주소값을 알아보자
EIP = 0Xbffff7ac
EIP[0xbffff7ac] - ESP[0xbffff760] = 76
따라서, ESP에서 EIP까지의 offset은 76이다.
이제 win함수 주소값만 알아내면 된다.
win()의 주소값은 0x080483f4다.
080483f4를 [ESP+76] 다음에 넣어주면 win()가 실행될거다.
win()함수가 실행돼 code flow successfully changed가 실행된 것을 볼 수 있다.
댓글