아래 프로그램은 허점이 많지만, uaf/fsb/bof 를 공부하시는 분들에게 도움이 될까 해서 올렸어요.
기능은..
malloc -> 숫자를 입력하면 그만큼 힙에 메모리를 할당한다.
free -> 주소를 10진수 또는 16진수(앞에 0x 붙여야함) 의 숫자로 입력하면 그 주소를 free 함수로 메모리 할당 해제시켜준다.
exit -> return해준다.
fsb -> 입력한 문자의 형식 문자대로 printf해주고 한 줄을 띄워준다.
컴파일 옵션은 -fno-stack-protection 이면 될것 같아요.
실행할 때는 환경변수
MALLOC_CHECK_
를 0으로 설정하고 실행하시면 좋아요. :) 해킹 재밌게 하세요.
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
int main() {
char buf[256];
int v;
while(1) {
memset(buf, 0, 256);
printf("command >>");
gets(buf);
if(!strcmp(buf, "malloc")) {
printf("size >>");
scanf("%d", &v);
printf("malloc: %p\n", malloc(v));
}
if(!strcmp(buf, "free")) {
memset(buf, 0, 256);
printf("address >> ");
gets(buf);
if(buf[0] == '0' && buf[1] == 'x') {
sscanf(buf+2, "%x", &v);
}
else v = atoi(buf);
free(v);
printf("free: %p\n", v);
}
if(!strcmp(buf, "exit")) {
return 0;
}
if(!strcmp(buf, "printf")) {
scanf("%s", buf);
printf(buf);
puts(""); // for line-break
}
}
return 0;
}