pwnable(23)
-
sint 풀이
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shell); printf("Size: "); scanf("%d", &size); if (size > 256 || s..
2022.05.31 -
You are silver 풀이
이번 문제는 실행하자마자 세그먼트 폴트가 떴습니다. 우선 코드 분석부터 하겠습니다. 처음 main() 함수에서 fgets() 함수로 46 길이의 문자열을 입력받습니다. 그리고 printf(&s)로 입력받은 문자열을 출력하는데, 이 부분에서 FSB가 발생한다는 걸 알 수 있습니다. 그리고 get_tier() 함수에 인자로 v6의 초기값인 50을 넣어주고, 그 반환 값을 v5에 저장합니다. get_tier() 함수는 조건 분기문으로 사용자의 티어를 판별해주는 함수입니다. 인자가 50으로 들어왔으니 "You are silver"를 출력하게 되고, 1을 리턴해줍니다. 다시 main() 함수로 돌아오면 v5의 값(1)을 주소로 하는 값을 출력하도록 되어있습니다. 그렇기에 이 부분에서 세그먼트 폴트가 발생하게 되고..
2021.11.22 -
basic_exploitation_003 풀이
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char *heap_buf = (char *)malloc(0x80); char stack_buf[0x90] = {}; initialize(); read(0, heap_buf, 0x80..
2021.08.04 -
FSB 문제 풀이 (2)
- 소스코드 분석 0x20 크기의 char형 배열 format이 선언되어있습니다. 이 배열에 길이 10만큼 입력을 받고, printf() 함수로 출력합니다. 그런데, 여기서 printf() 함수에 format string이 없으니 FSB 취약점이 발생합니다. 그리고 read() 함수로 다시 입력을 받습니다. 소스코드 분석은 이 정도면 된 것 같습니다. 이번 문제는 저번 문제와는 다르게 Stack Canary 보호 기법이 걸려있습니다. 이에 초점을 맞춰서 아이디어를 짜보겠습니다. - RSI, RDX, RCX, R8, R9 5개 + ret 1개 + sfp 직전 (0x20/8) + sfp 1개 = 11개 -> return address값 leak - RSI, RDX, RCX, R8, R9 5개 + Canary..
2021.08.03 -
basic_heap_overflow 풀이
#include #include #include #include #include struct over { void (*table)(); }; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void table_func() { printf("overwrite_me!"); } int main() { char *ptr = malloc(0x20); struct o..
2021.08.03 -
basic_exploitation_002 풀이
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0); } https://dreamhack.io/learn/2..
2021.08.02