首页
社区
课程
招聘
[原创]2018科来杯PWN复现
发表于: 2020-11-1 10:08 7168

[原创]2018科来杯PWN复现

2020-11-1 10:08
7168

32 位的程序,存在很明显的格式化字符串漏洞

image.png

数一下偏移,第四个

image.png

有个 cat flag 的后门 0x8048616,但是有一个 number 限制,nubmer 要等于 8216 才行,可以直接让他执行 0x8048638 那一块,那就覆写 puts 函数的 got 表把

image.png

image.png


程序的逻辑挺简单的,free 之后没有置为 NULL

另外还提供了 system 的地址,可以直接拿来算 libc 的基址了

image.png

首先 malloc 一个,free 之后再去编辑,编辑成 malloc_hook(tcache 不会对 size 进行检查,所以可以直接申请到 malloc_hook 这里)

然后 malloc 两次就申请到了 malloc_hook 那里了,再去编辑就可以把 malloc_hook 改为 one_gadget 的地址,这样去 malloc 的时候就可以拿到 shell

image.png

啊啊啊,好简单的说

官方 writeup 说是:cve-2018-6789

要先了解一下 base64 编码的 C 语言实现,可以参考:https://bbs.pediy.com/thread-253433.htm

image.png

程序自己会申请 0x30 大小的 chunk(malloc(0x28) 但是要对齐所以 0x30)用来直接存放 name、base64 解码后的 password 的指针以及 content 的指针,同时申请的这个会被放到 bss 段的 ptr 数组上面,后面就把这个用户申请的 chunk 成为 note_header

image.png

说一下漏洞点:

在涉及 password 的时候会 malloc 相应的 size,通过对 base64 编码的了解,我们已经知道了 base64 编码后应该都是 4 的倍数,它将会被解码为 3 的倍数的长度,然后下面的代码中给了 3n + 1 的空间,是没有问题的

image.png

但是如果构造一个 4n+3 的 base64 编码去让他解码用到的就是 3n+2 就 off by one 了

例如:123 经过 base64 编码之后是:MTIz,在末尾加上两个字符:'MTI',去解码的时候会解码为 12312

本来是 4*1,加上两个之后就是 4*1+3 然后解码出来是 3*1+2

image

同时会在 *(_DWORD *)(note_header + 36) = 1 标注是否设置了 password

image.png


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//