system hacking61 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 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. [Toddler's Bottle] - passcode 문제 설명에서 암호기반의 로그인 시스템을 만들었는데 컴파일은 에러없이 됬지만 컴파일러의 경고가 있었다고한다. 어떤 에러인지 한번 확인해보자. main 함수에서 welcome()함수와 login()함수를 호출하고 리턴한다. welcome함수에서는 name[100] 만큼 선언해주고 입력을 받는다. 이제 login 함수를 보면 passcode1, passcode2를 검증하는데 검증이 성공하면 flag를 보여준다. 일단 문제를 실행시켜 보자. 실행시켜보면 passcode1을 입력하면 Segmentation fault가 출력되고 종료한다. 다시 위의 소스 코드의 longin 함수를 잘보면 scanf() 부분에서 &지정자가 빠져있다. 예를 들어 passcode1=0xbffff123 이면 0xbffff123의 주소에.. 2021. 3. 28. 이전 1 ··· 8 9 10 11 12 13 14 ··· 16 다음