House Of Force

这篇具有很好参考价值的文章主要介绍了House Of Force。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

House Of Force

首先介绍一下什么是House Of Force

House Of Force 是一种堆利用方法,但是并不是说 House Of Force 必须得基于堆漏洞来进行利用。如果一个堆 (heap based) 漏洞想要通过 House Of Force 方法进行利用,需要以下条件:

  • 能够以溢出等方式控制到 top chunk 的 size 域
  • 能够自由地控制堆分配尺寸的大小


一句话来说,如果我们可以控制top chunk的指针,那么我们就可以达到任意地址写,但是glibc对申请chunk进行了验证

// 获取当前的top chunk,并计算其对应的大小
victim = av->top;
size   = chunksize(victim);
// 如果在分割之后,其大小仍然满足 chunk 的最小大小,那么就可以直接进行分割。
if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE)) 
{
    remainder_size = size - nb;
    remainder      = chunk_at_offset(victim, nb);
    av->top        = remainder;
    set_head(victim, nb | PREV_INUSE |
            (av != &main_arena ? NON_MAIN_ARENA : 0));
    set_head(remainder, remainder_size | PREV_INUSE);
    check_malloced_chunk(av, victim, nb);
    void *p = chunk2mem(victim);
    alloc_perturb(p, bytes);
    return p;
}

但是当我们把size的值改成一个很大的值比如0xffffffffffffffff,那么就可以轻松绕过这个验证,一般的做法是把size改成-1,因为在进行比较时会把 size 转换成无符号数,因此 -1 也就是说 unsigned long 中最大的数,所以无论如何都可以通过验证。

remainder      = chunk_at_offset(victim, nb);
av->top        = remainder;

/* Treat space at ptr + offset as a chunk */
#define chunk_at_offset(p, s) ((mchunkptr)(((char *) (p)) + (s)))

之后会把top指针进行更新,然而size段也会更新更新方法如下

victim = av->top;
size   = chunksize(victim);
remainder_size = size - nb;
set_head(remainder, remainder_size | PREV_INUSE);

​ 所以,如果我们想要下次在指定位置分配大小为 x 的 chunk,我们需要确保 remainder_size 不小于 x+ MINSIZE。

题目链接:链接:https://pan.baidu.com/s/1lr2jAQwL9Ow5FVjzrSfbWA 提取码:tx88
查看保护,pie保护关闭

House Of Force

64位ida载入

House Of Force

首先发现了后门函数

House Of Force

House Of Force

add函数

House Of Force

edit函数

House Of Force

值得注意的是这个函数并没有对我们输入的新长度进行判断,那么我们就可以修改到top chunk的siez域,实现House Of Force

先贴一下wp我再详细解释

House Of Force

House Of Force

现在看看调试

House Of Force

House Of Force

House Of Force

-0x70怎么来的

前面我说了需要将top thunk指向我们想要的地方,那么0xf262a0-0xf26260=0x50,而0x10是因为chunk头部有0x10大小,因此我我们下次申请的chunk的起始地址是0xf26250 + 0x10 = 0xf26260,然后我们再修改地址为flag地址再进行调用就可以得到flag

以上均为本人理解,有任何错误烦请各位师傅即使指出
参考文章​ https://tty-flag.github.io/2021/04/20/House-Of-Force.html文章来源地址https://www.toymoban.com/news/detail-855770.html

到了这里,关于House Of Force的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pageInfo.of是什么方法介绍

    PageInfo 是 MyBatis 分页插件 PageHelper 中的一个类,它用于封装分页查询的相关信息,包括当前页码、每页记录数、总记录数、总页数、是否有前一页、是否有后一页等信息。 PageInfo.of 是 PageInfo 类中的一个静态方法,它用于将分页查询的结果封装成一个 PageInfo 对象。使用 PageI

    2024年04月26日
    浏览(25)
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能

    会话管理(Session Management):Shiro能够管理用户的会话状态,包括会话的创建、维护和销毁。它支持多种会话存储方式(如内存、数据库等),并提供了会话超时、会话失效等机制,以确保会话的安全性。 跨平台集成:Shiro不仅适用于Web应用程序,还可以轻松集成到桌面应用

    2024年04月13日
    浏览(60)
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?

    请简单介绍一下Shiro框架是什么? Shiro框架是一个强大且灵活的开源安全框架,为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能,可以轻松地集成到任何Java Web应用程序中,并提供了易于理解和使用的API,使开发人员能够快速实

    2024年04月11日
    浏览(58)
  • 【ARM 嵌入式 编译 Makefile 系列 16 - Makefile 伪目标.PHONY 与 FORCE 详细介绍】

    请阅读 【ARM GCC Makefile 编译专栏导读】 .PHONY 是GNU make的一个特殊目标,它用来指定那些不产生文件的目标。如果一个目标被声明为 .PHONY ,那么make命令会忽略这个目标的文件名,即使在文件系统中存在同名的文件,make命令也会每次都执行这个目标的命令 在 Makefile 中, 目标

    2024年02月12日
    浏览(42)
  • 记录一下Kotlin: Module was compiled with an incompatible version of Kotlin.的问题

    我遇到的整个报错是这样的: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 大概意思就是不匹配,但是我这是个不太能随便改代码的项目,而且我是突然出现的这个问题,原本是可以正常启动的,所以我就找只

    2024年02月15日
    浏览(47)
  • 客户端Unexpected end of file from server 和 服务端nginx 408 的一种解决方法

    https://www.jiweichengzhu.com/article/81044c11caf54753aeed94ef8fad1070 https://blog.csdn.net/chenz_yang/article/details/77238532 终端设备(Debian系统、戴尔服务器)通过HTTPS向云端上报数据时,有的数据如设备心跳能上报,有的数据如服务器配置信息上报时报错: Unexpected end of file from server “Unexpected en

    2024年02月15日
    浏览(60)
  • Vue 出现Syntax Error:TypeError: Cannot read property ‘vue‘ of undefined的一种解决办法

    出现如下情况 背景:首次克隆运行项目 技术背景:项目使用的前端框架和UI框架 :vue2+element-ui 然后npm install 安装依赖,得到node_modules包和package-lock.json文件,然后npm run dev启动报错。 排查原因: 首先看了package.json 文件的node版本和npm版本支持 当前的我的node和npm版本用的是:

    2024年02月13日
    浏览(41)
  • 介绍一下sourcemap

    Sourcemap(源代码映射)用于将生产环境中的压缩代码映射回原始的源代码。在前端开发过程中,JavaScript、CSS 和其他文件通常会被压缩和混淆,以减小文件大小和提高网站加载速度。然而,这会让调试和错误定位变得困难,因为生产环境中的代码难以阅读和理解。 Sourcemap 的作

    2023年04月10日
    浏览(30)
  • deque(简单介绍一下)

    deque的基本情况: 简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。 其底层实现相当复杂,而且效率并不高。大多数时候都不会使用。 deque诞生的原因是vector和list的优缺点不可分割。 正好复习一下vector和list的优缺点。 vector的优点:支持随机访问;尾插

    2024年02月08日
    浏览(55)
  • 介绍一下CDN

    CDN(内容分发网络,Content Delivery Network)是一个由多个服务器组成的分布式网络,它的目的是将内容高效地传送到用户。下面是CDN的工作原理及其主要特点: 内容分发 :当用户首次请求某一特定内容时(例如一个图片、视频或网页),这个请求会被路由到CDN的原始服务器。

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包