pwn43 ELF x64 - Stack buffer overflow - PIE 64bit bof문제인데 PIE 보호기법이 걸려 있는거 같다. PIE가 걸려 있어 메모리 영역이 랜덤으로 매핑이 되서 주소가 일정하지 않을 것이고 NX enable로 인해 실행 권한이 없고 ASLR이 걸려있다. 소스 코드 #include #include // Instructions // // gcc -o chall chall.c -Wl,-z,norelro -fno-stack-protector (on the app-systeme-ch61 server for instance, but the goal is to enable NX and PIE) void Winner() { printf("Access granted!\n"); FILE *fp; int c; fp = fopen(".passwd", "r"); if .. 2021. 3. 28. ELF x86 - Stack buffer overflow basic 3 ELFx86 BOF 문제이다. GOT Overwrite 가능하고 실행 권한이 없다. 소스 코드 #include #include #include #include #include void shell(void); int main() { char buffer[64]; int check; int i = 0; int count = 0; printf("Enter your name: "); fflush(stdout); while(1) { if(count >= 64) printf("Oh no...Sorry !\n"); if(check == 0xbffffabc) shell(); else { read(fileno(stdin),&i,1); switch(i) { case '\n': printf("\a"); break; case.. 2021. 3. 28. ELF x64 - Stack buffer overflow - basic 64bit BOF 문제이다. Mitigation은 Full RELRO NX enabled ASLR ON이다. GOT Overwrite는 불가능 하다. 소스 코드를 보면 256 바이트 만큼 선언되어있고 scanf로부터 입력을 받는데 길이에 대한 검증이 없어서 여기서 BOF가 일어난다. 일반적인 BOF이기 때문에 리턴 주소를 callMeMaybe로 조작하면 된다. 64bit는 32bit와 다르게 8 바이트기 때문이에 이점을 유의하자. buffer의 길이는 rbp - 0x110 = 272이다. payload는 dummy(272) + sfp(8) + ret으로 구성하면 된다. callMeMaybe의 주소이다. exploit from pwn import * user = 'app-systeme-ch35' host .. 2021. 3. 28. [Toddler's Bottle] - random 이번 문제는 랜덤 값을 구하는 문제인거 같다. 소스 코드를 보면 rand함수로 random값을 부여해주는데 여기서 취약점이 생긴다. 같은 값만 생성하지 않기 위해선 srand(time(NULL))을 해줘야 매번 랜덤 값을 생성 할 때 마다 다른 값이 생성 된다. 아래쪽에선 key를 입력받고 random값과 key 값을 xor 연산을 하는데 그 값이 0xdeabeef와 같으면 if문을 통과하게 된다. random 값이 항상 일정하니 gdb로 확인 해보자. 생성된 random 값을 보면 0x6b8b4567 정수로 1804289383이다. key 값과 xor 연산을해서 0xdeadbeef와 같으려면 반대로 key = random ^ 0xdeadbeef 값이 된다. exploit from pwn import *.. 2021. 3. 28. 이전 1 ··· 3 4 5 6 7 8 9 ··· 11 다음