专栏首页逢魔安全实验室铁人三项2018 pwn [heapmain] Writeup

铁人三项2018 pwn [heapmain] Writeup

这个题目的原题是RHME3,直接拿来二进制修改,去掉网络函数,使用socat部署。这波操作可还行

分析

废话不多说,题目漏洞比较明显,在于使用函数delete_player后没有置空selected导致UAF。那么,我们能用这个UAF干什么呢?

程序中player的数据结构是这样的

struct player{
    int32 attack;
    int32 defense;
    int32 speed;
    int32 precision;
    char* name;
}

这块就有个关键点edit_player中的set_name函数,用来修改name字段的时候用到了realloc函数。这个函数比较特殊,可以在制定地址上重新分配一个堆,即可以对给定的指针所指的空间进行扩大或者缩小 。当然,扩大的时候会破坏其他内存则类似malloc重新分配一个指针指向的内存空间。

泄露堆地址(貌似没啥用)

首先,我们可以通过以下方法泄露堆的地址:

1.分配一个player 1,name的长度为23,则name会分配24字节。

2.选中这个player 1

3.释放这个player 1

4.显示这个player 1,这时候1->name中的fd指向player 1的地址。打印name的时候就会把player的地址打印出来。

泄露libc地址

接着,我们可以通过以下方法泄露libc的地址:

1.分配一个player 1,name的长度为23,则name会分配24字节。

2.选中这个player 1

3.释放这个player 1

4.分配一个player 2,这块内存其实是1->name。2->name长度为23,这块内存为1->player。

5.编辑player 1,1->name长度扩展为0x90。

6.再创建一个player 3(作用是隔开0x90的内存和top chunk,防止free后合并到top chunk)

7.然后释放palyer 2,也就是把1->name的内存释放,此时这块内存被放入unsorted bin里,link到main_arena上

8.show player1 会泄露出libc上的main_arena的地址,就可以计算出libc的基址,由于给了libc就可以求出system的地址

GOT劫持

接下来是控制执行流程(realloc分配内存到got上,覆盖aoit的got为system):

1.分配player 1,name长度80

2.分配player 2,name长度80

3.选中1

4.释放player 1,释放player 2

5.分配一个player 3,name的长度为23,内容为'a'*16 + atoi_got。此时player3 的内存为player2,player3->name为player1。

6.修改player->name为system,此时会将atoi_got分配给我们,然后system的地址会填入atoi。

7.最后输入sh即可

EXPLOIT

最后的利用脚本点击https://blog.formsec.cn/2018/06/05/%E9%93%81%E4%BA%BA%E4%B8%89%E9%A1%B92018-pwn-heapmain-Writeup/

查看

往期精彩回顾

DedeCMS任意用户密码重置漏洞

从CPU漏洞Meltdown&Spectre看侧信道攻击

渗透技巧 | Windows上传并执行恶意代码的N种姿势

本文分享自微信公众号 - 逢魔安全实验室(FormSec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 隐藏在Chrome插件商店中的恶魔——恶意插件User-Agent Swither分析

    ? ? 0x00 插件背景 — User-Agent Swither 是一款Chrome插件,用户切换访问web时候的User-Agent的,这个插件有51万...

    xfkxfk
  • 渗透技巧 | Windows上传并执行恶意代码的N种姿势

    ? 简介 在各种钓鱼、挖矿、勒索、组建僵尸网络、基础渗透、后渗透过程当中,攻击者都会通过一些方法去下载执行恶意代码并执行完成攻击操作,比如前段时间通过Off...

    xfkxfk
  • 微软公式编辑器系列漏洞分析(一):CVE-2017-11882

    ? 0x00 简介 CVE-2017-11882为Office内存破坏漏洞。攻击者可以利用漏洞以当前登录的用户的身份执行任意命令。所影响的组件是Office...

    xfkxfk
  • 基于J2EE的网站后台建设项目定做

    我们的团队所有工作人员均为软件开发人员,信誉保证,有着多年毕业设计经验,我们在多年的一线开发岗位上积累了丰富的经验,保证服务的水平与专业性,拥有多年工作经验,能...

    JAVA毕设代做
  • sql语句中(+)的作用

    说明:以下示例中,表a是员工表,有a,b,c,d四个员工,性别都是男性m。表b是工资表,有a,b,d四个员工,工资对应的是1000,2000,4000。然后分别...

    职场亮哥
  • duilib的xml预览工具duilibpreview

    大菊观
  • TypeScript学习第四篇 - 类与继承

    (1). public 公有。在类里面、子类里面、类外面都可以访问。属性如果不加修饰符,默认就是公有。

    越陌度阡
  • javaweb基础概念

    听着music睡
  • Cloud Torrent 使用教程(老司机专用软件)

    刺_猬
  • ISUX走进纽约与台北高校

    今年4月,腾讯ISUX两位资深设计师,分别前往纽约和台北,进行暑期实习生招聘宣讲。让我们看看他们都有哪些见闻和感受吧。

    腾讯ISUX

扫码关注云+社区

领取腾讯云代金券