ii4gsp
Exploit Exercises [Protostar - Heap0] 본문
시스템 해킹/Exploit Exercises - Protostar
Exploit Exercises [Protostar - Heap0]
ii4gsp 2020. 1. 18. 14:26#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
struct data {
char name[64];
};
struct fp {
int (*fp)();
};
void winner()
{
printf("level passed\n");
}
void nowinner()
{
printf("level has not been passed\n");
}
int main(int argc, char **argv)
{
struct data *d;
struct fp *f;
d = malloc(sizeof(struct data));
f = malloc(sizeof(struct fp));
f->fp = nowinner;
printf("data is at %p, fp is at %p\n", d, f);
strcpy(d->name, argv[1]);
f->fp();
}
strcpy()함수에서 name배열에 argv[1]의 값을 복사하는데 힙 오버플로우가 발생한다.
winner() 함수의 주소는 0x08048464 이고, nowinner의 주소는 0x08048478 이다.
data는 0x804a008주소에 할당되고 fp는 0x804a050주소에 할당되었다.
구조체 포인터 data와 fp의 거리는 0x48 즉, 72만큼 차이가 난다.
0x804a050의 메모리에는 0x08048478 즉, nowinner의 주소가 있다.
data와 fd의 거리는 72임으로 페이로드는 dummy[72] + winner() 함수 주소
winner()함수가 호출되어 "level passed"이라는 문자가 출력되었다.
'시스템 해킹 > Exploit Exercises - Protostar' 카테고리의 다른 글
Exploit Exercises [Protostar - Heap2] (0) | 2020.01.18 |
---|---|
Exploit Exercises [Protostar - Heap1] (0) | 2020.01.18 |
Exploit Exercises [Protostar - Format4] (0) | 2020.01.17 |
Exploit Exercises [Protostar - Format3] (0) | 2020.01.17 |
Exploit Exercises [Protostar - Format2] (0) | 2020.01.17 |
Comments