首页
社区
课程
招聘
[原创] 看雪ctf 秋季赛 第四题 club_pwn
发表于: 2017-10-31 17:20 6303

[原创] 看雪ctf 秋季赛 第四题 club_pwn

aqs 活跃值
5
2017-10-31 17:20
6303

64位程序,除了 relro 其他的保护全开了,那么可能可以写 got
再看看程序有什么功能

程序提供了 6个功能,测试如下

那这就很有可能是道堆题了

手动fuzz一下, 漏洞发现如下

总之get一个box 然后 delete 一下看看效果先
操作如下

off by one 的验证就构造一个 0x18 0x28 什么大小的size 然后输入一堆字符串就可以看到了.操作如下

结果如下

overwrite 之后

okay ,基本上就是这样了,接下来就看一下代码的逻辑,看看可以怎么样对漏洞进行利用

首先定一下目标

main 函数首先 将 seed 的地址 作为srand的种子

guess seed 很简单,输入的 随机数对了,就把seed的地址给你,因为开启了aslr,加上程序是 x64 的,很难利用伪随机

get box 会对输入的 size进行验证, 传入的size需要
0x8=<little < small < normal < big < huge <0x1000
并且创建完之后还会做一个 mark, 也就是说,一个box 只能 get 一次

那么每次malloc 返回的chunk的 size 不能相同
fastbin attack 有点难搞,再看看其他的

destory box 实现定义好了,只有 small 和normal box 可以进行 destory, 其他的只能 get,不能 destory

exit函数 要求输入一个 字符串, 然后 malloc strcpy一下,没有溢出

okay 程序分析基本上就是到了这里了,接下来就是怎么样进行利用的问题
具体操作如下

okay 现在地址什么都是有的了,问题就是要怎么控制程序执行流了,这里使用的是 unsorted bin attack 的办法

因为 上面 leak 的时候已经得到了一个 unsorted bin,所以直接用这个 来搞事情,因为 libc版本是 2.23, 所以按照常规 unsorted bin attack 的思路构造 exp 即可getshell, 基本操作如下

因为这里 exp 是写了一个 模板来进行生成的,平时方便查看, 所以会有一些冗余信息,自动忽略啦

 
❯ checksec club 
[*] '/home/aqs/2-contest/pediy2017/4-club-pwn/club'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
Welcome to my club!
====================
You have 6 operation :
1) get a box
2) destory a box
3) leave me a message in box
4) show message in box
5) guess a random number
6) exit
getbox(2)# smallbox
leave_msg(2,'aaaabbbb')
destory_box(2)
show_msg(2) # 可以正常显示 aaaabbbb,说明有 uaf

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
2
分析的不错  精华鼓励!
2017-10-31 22:29
0
雪    币: 870
活跃值: (2264)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
写的很好!
2018-7-22 22:54
0
雪    币: 379
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了
2018-9-14 10:54
0
游客
登录 | 注册 方可回帖
返回
//