码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • BUUCTF-babyheap_0ctf_2017


    checksec 

    标准堆菜单

    IDA

    Allocate

    1. void __fastcall sub_D48(__int64 a1)
    2. {
    3. int i; // [rsp+10h] [rbp-10h]
    4. int v2; // [rsp+14h] [rbp-Ch]
    5. void *v3; // [rsp+18h] [rbp-8h]
    6. for ( i = 0; i <= 15; ++i )
    7. {
    8. if ( !*(_DWORD *)(24LL * i + a1) )
    9. {
    10. printf("Size: ");
    11. v2 = sub_138C();
    12. if ( v2 > 0 )
    13. {
    14. if ( v2 > 4096 )
    15. v2 = 4096;
    16. v3 = calloc(v2, 1uLL);
    17. if ( !v3 )
    18. exit(-1);
    19. *(_DWORD *)(24LL * i + a1) = 1;
    20. *(_QWORD *)(a1 + 24LL * i + 8) = v2;
    21. *(_QWORD *)(a1 + 24LL * i + 16) = v3;
    22. printf("Allocate Index %d\n", (unsigned int)i);
    23. }
    24. return;
    25. }
    26. }
    27. }

    分配内存,没有什么异样 

    Fill

    1. __int64 __fastcall sub_E7F(__int64 a1)
    2. {
    3. __int64 result; // rax
    4. int v2; // [rsp+18h] [rbp-8h]
    5. int v3; // [rsp+1Ch] [rbp-4h]
    6. printf("Index: ");
    7. result = sub_138C();
    8. v2 = result;
    9. if ( (int)result >= 0 && (int)result <= 15 )
    10. {
    11. result = *(unsigned int *)(24LL * (int)result + a1);
    12. if ( (_DWORD)result == 1 )
    13. {
    14. printf("Size: ");
    15. result = sub_138C();
    16. v3 = result;
    17. if ( (int)result > 0 )
    18. {
    19. printf("Content: ");
    20. return sub_11B2(*(_QWORD *)(24LL * v2 + a1 + 16), v3);
    21. }
    22. }
    23. }
    24. return result;
    25. }

    进行填充 ,阅读代码看到fill对我们的输入没有限制,可以利用,填充过多数据造成堆溢出

    Free

    1. __int64 __fastcall sub_F50(__int64 a1)
    2. {
    3. __int64 result; // rax
    4. int v2; // [rsp+1Ch] [rbp-4h]
    5. printf("Index: ");
    6. result = sub_138C();
    7. v2 = result;
    8. if ( (int)result >= 0 && (int)result <= 15 )
    9. {
    10. result = *(unsigned int *)(24LL * (int)result + a1);
    11. if ( (_DWORD)result == 1 )
    12. {
    13. *(_DWORD *)(24LL * v2 + a1) = 0;
    14. *(_QWORD *)(24LL * v2 + a1 + 8) = 0LL;
    15. free(*(void **)(24LL * v2 + a1 + 16));
    16. result = 24LL * v2 + a1;
    17. *(_QWORD *)(result + 16) = 0LL;
    18. }
    19. }
    20. return result;
    21. }

    free一般出现漏洞的概率很大,在free之后没有进行置0就会出现一系列漏洞利用

    但是本题进行了置0,没有利用的 

    Dump

    1. int __fastcall sub_1051(__int64 a1)
    2. {
    3. int result; // eax
    4. int v2; // [rsp+1Ch] [rbp-4h]
    5. printf("Index: ");
    6. result = sub_138C();
    7. v2 = result;
    8. if ( result >= 0 && result <= 15 )
    9. {
    10. result = *(_DWORD *)(24LL * result + a1);
    11. if ( result == 1 )
    12. {
    13. puts("Content: ");
    14. sub_130F(*(_QWORD *)(24LL * v2 + a1 + 16), *(_QWORD *)(24LL * v2 + a1 + 8));
    15. return puts(byte_14F1);
    16. }
    17. }
    18. return result;
    19. }

     利用思路

    泄露libc基址,通过伪造fake_chunk来向hook附近通过Fill函数填充溢出覆盖

    malloc_hook 是一个libc上的函数指针,调用malloc时如果该指针不为空则执行它指向的函数,可以通过写malloc_hook来getshell,修改malloc_hook为某个one_gadget

    这道题查阅了好多师傅们的博客

    泄露libc的方法有两种

    1.利用fastbin double free

    babyheap_0ctf_2017——堆入门1 - PYozo_free - 博客园 (cnblogs.com)

    2.利用unsorted bin

    堆学习:babyheap_0ctf_2017——经典fastbin attack - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 

    EXP

    目前的脚本还没有打通远程

    这篇博客讲述了buuctf上打不通的原因,而且师傅具体分析的也很细致,推荐学习

    [FastBinAttack实战]babyheap_0ctf_2017 – TokameinE

  • 相关阅读:
    大新闻!【比特熊故事汇】升级2.0
    springboot大学生拼车管理系统毕业设计源码201507
    CFDer工资待遇好吗?我爬取了某招聘网站之后
    2024年 Openai的API相关全部概论汇总(通用版)
    UWB承启定位基站
    智能合约提款和转账错误
    HTML+CSS+JS静态网页设计【二十四节气】期末课程大作业
    电力系统优化:数字孪生的革新方法
    字符串在JVM中的内存分配
    js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值
  • 原文地址:https://blog.csdn.net/arraylocalhost/article/details/128055145
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号