前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >堆溢出 —— unlink | PWN

堆溢出 —— unlink | PWN

作者头像
意大利的猫
发布2022-08-31 10:16:20
8840
发布2022-08-31 10:16:20
举报
文章被收录于专栏:漫流砂漫流砂

前几天,我们发了一篇 Ubuntu 16.04 配置 pwn 环境的文章,遭到了部分朋友的反感,他们认为我们不应该写这么基础的东西,甚至有几个朋友怒而取关了 其实那篇文章就是为了这个视频来做铺垫的,免得一些兄弟原理懂了,实践不了 所以,如果这个视频有帮助到各位,帮我们转发转发,告知一下取关的几位朋友,都是误会嗷

【B站在线观看】

https://www.bilibili.com/video/BV1uF41177YY?share_source=copy_web

【视频、图示以及文档下载地址】

https://pan.baidu.com/s/1Ps2uKajjLP6s6rqzepZEXw 提取码: 1udc

下面是视频中的 markdown 文档,方便大家学习和复制

unlink 漏洞

堆基础知识

  • Linux堆内存管理深入分析上 https://introspelliam.github.io/2017/09/10/pwn/Linux%E5%A0%86%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90%E4%B8%8A/
  • Linux堆内存管理深入分析下 https://introspelliam.github.io/2017/09/15/pwn/Linux%E5%A0%86%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90%E4%B8%8B/

unlink 知识

  • wooyun-drops_Linux堆溢出漏洞利用之unlink https://wooyun.js.org/drops/Linux%E5%A0%86%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%E4%B9%8Bunlink.html
  • wooyun-drops_堆溢出的unlink利用方法 https://wooyun.js.org/drops/%E5%A0%86%E6%BA%A2%E5%87%BA%E7%9A%84unlink%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95.html
  • ctf-wiki_unlink https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/implementation/basic/?h=unlink#unlink
  • [Unlink] 2014-HITCON-stkof | LiuLian http://liul14n.top/2020/02/03/Unlink-2014-HITCON-stkof/

内存分布图

系统内存分布图

malloc & mmap

free

chunk 的结构

  • allocated chunk;

img

  • free chunk;

img

bins

  • fastbins 0x10-0x80
  • bins
    • unsorted bins
    • small bins
    • large bins

img

感受 bins

magicheap https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_magicheap

  • fastbins 范围
  • small bins
  • large bins
  • free_unlink
  • unsortedbins
  • fd
  • bk
  • top_chunk

unlink

代码语言:javascript
复制
/*unlink操作的实质就是:将P所指向的chunk从双向链表中移除,这里BK与FD用作临时变量*/
#define unlink(P, BK, FD) {                                            \
    B = P->fd;                                   \
    A = P->bk;                                   \
    B->bk = A;                                  \
    A->fd = B;                                  \
    ...
}

img

unlink 问题分析

glibc 无法识别 chunk 结构

代码语言:javascript
复制
B->bk != P || A->fd != P
  
P -> fd = *P - 0x18
P -> bk = *P - 0x10

B -> bk = *P - 0x18 + 0x18 = *P
A -> fd = *P - 0x10 + 0x10 = *P
  
B = P->fd;                                   \
A = P->bk;    

B->bk = A;                                  \
*P = *P - 0x10 

A->fd = B;
*P = *P - 0x18

unlink 漏洞结果

我们可以向某一个内存地址写入一些内容

解决一些问题

  • 伪造fd, bk
  • *P 0x6020c8
  • system() 的地址 通过show函数来获取

例题

hitconTraining_unlink——bamboobox https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_unlink

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • unlink 漏洞
    • 内存分布图
      • malloc & mmap
        • free
          • chunk 的结构
            • bins
              • 感受 bins
                • unlink
                  • unlink 问题分析
                    • unlink 漏洞结果
                      • 解决一些问题
                        • 例题
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档