首页 > 其他分享 >[BJDCTF 2020]YDSneedGirlfriend

[BJDCTF 2020]YDSneedGirlfriend

时间:2024-04-23 22:59:14浏览次数:28  
标签:------------------------ name 堆块 YDSneedGirlfriend 链表 2020 BJDCTF girlfriend fas

[BJDCTF 2020]YDSneedGirlfriend

UAF|

所谓UAF漏洞是指程序在运行时通过悬空指针(悬空指针是指仍然指向已被释放内存空间的指针)访问已经被释放的内存.

bamuwe@bamuwe:~/YDSneedGirlfriend$ ldd girlfriend
        linux-vdso.so.1 (0x00007ffd09fec000)
        /home/bamuwe/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/libc.so.6 (0x00007f415da00000)
        /home/bamuwe/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so => /lib64/ld-linux-x86-64.so.2 (0x00007f415dfc3000)

image-20240423220900124

int backdoor()
{
  puts("YDS get N+ girlfriend!");
  return system("/bin/sh");
}

backdoor()函数

YDS need a grilfriend!,can u help him?
------------------------
 1. Add a girlfriend
 2. Delete a girlfriend
 3. show her name
 4. give up
------------------------
Your choice :1
Her name size is :10
Her name is :admin
Success !Wow YDS get a girlfriend!
------------------------
 1. Add a girlfriend
 2. Delete a girlfriend
 3. show her name
 4. give up
------------------------
Your choice :1
Her name size is :10
Her name is :bdmin
Success !Wow YDS get a girlfriend!
------------------------
 1. Add a girlfriend
 2. Delete a girlfriend
 3. show her name
 4. give up
------------------------
Your choice :2
Index :0
Success
------------------------
 1. Add a girlfriend
 2. Delete a girlfriend
 3. show her name
 4. give up
------------------------
Your choice :1
Her name size is :10
Her name is :cdmin
Success !Wow YDS get a girlfriend!
------------------------
 1. Add a girlfriend
 2. Delete a girlfriend
 3. show her name
 4. give up
------------------------
Your choice :3
Index :0
cdmin

先是申请了chunk0,chunk1,再delete chunk0,这时候chunk0进入fastbins,但指向chunk0的指针并没有被清空,仍然指向chunk0的内存地址,申请一个和chunk0同样大小的chunk3,通过fastbin的机制,就会把chunk0的内存地址分配给chunk3,此时有两个指针指向了同一块内存地址,也就是说,根据程序逻辑,既可以通过chunk3的指针向这块内存添加内容,又可以通过chunk0的指针读取内容,按照以上逻辑,向这块chunkfd位置写入backdoor()地址,再读取,就可以getshell

unsigned __int64 del_girlfriend()
{
  int v1; // [rsp+Ch] [rbp-14h]
  char buf[8]; // [rsp+10h] [rbp-10h] BYREF
  unsigned __int64 v3; // [rsp+18h] [rbp-8h]

  v3 = __readfsqword(0x28u);
  printf("Index :");
  read(0, buf, 4uLL);
  v1 = atoi(buf);
  if ( v1 >= 0 && v1 < count )
  {
    if ( *(&girlfriendlist + v1) )
    {
      free(*(*(&girlfriendlist + v1) + 1));
      free(*(&girlfriendlist + v1));
      puts("Success");
    }
  }
  else
  {
    puts("Out of bound!");
  }
  return __readfsqword(0x28u) ^ v3;
}

没有清除指针

image-20240423222752483

Fastbin是glibc堆管理中的一种技术,用于加速小块堆内存的分配和释放。它适用于小于等于64字节的大小的堆块。

基本原理如下:

  1. 分配阶段
    • 当程序请求小块内存时,glibc会先检查fastbin链表中是否存在合适大小的空闲堆块。
    • 如果存在,则直接将该空闲堆块分配给程序,并将链表中的对应节点移除。
    • 如果不存在,则将该请求大小的堆块从堆中分配出去。
  2. 释放阶段
    • 当程序释放小块内存时,glibc会将该堆块放入fastbin链表中,而不是立即释放到操作系统。
    • 如果释放的堆块大小与fastbin链表中的某个大小匹配,则将该堆块放入对应的fastbin链表中。
    • 如果释放的堆块大小与fastbin链表中的某个大小不匹配,则将该堆块直接释放到堆中,而不放入fastbin链表。
  3. 使用阶段
    • 下次程序再次请求合适大小的内存时,glibc会优先从fastbin链表中取出空闲堆块,而不是直接从堆中分配。
    • 如果fastbin链表中没有合适大小的空闲堆块,则从堆中分配。

Fastbin的使用可以减少频繁地向操作系统请求内存和释放内存的开销,提高内存分配和释放的效率。然而,由于fastbin链表中的堆块并没有被完全清空,因此也存在一定的安全风险,可能导致堆溢出等漏洞。因此,在编写安全性要求高的程序时,需要谨慎使用fastbin机制。

标签:------------------------,name,堆块,YDSneedGirlfriend,链表,2020,BJDCTF,girlfriend,fas
From: https://www.cnblogs.com/bamuwe/p/18153981

相关文章

  • 题解:CSP-S2020] 函数调用
    题解:CSP-S2020]函数调用一句话题意:给定一个有初始值的序列,支持如下三种操作:1、单点加2、全局乘3、递归某些操作1、2、3求最终的序列。标签:topsort,动态规划,转化贡献统计(集中贡献),主客翻转关于topsort:部分分里的树结构基本上直接暗示了正解要使用topsort,而且本来函......
  • MBR20200FCT-ASEMI肖特基二极管MBR20200FCT
    编辑:llMBR20200FCT-ASEMI肖特基二极管MBR20200FCT型号:MBR20200FCT品牌:ASEMI封装:TO-220最大平均正向电流(IF):20A最大循环峰值反向电压(VRRM):200V最大正向电压(VF):0.90V工作温度:-65°C~175°C反向恢复时间:5ns芯片个数:2芯片尺寸:130mil引脚数量:3正向浪涌电流(IFMS):200A包装方式:5......
  • 【CSP】202009-4 星际旅行 90%
    题目大意:n维空间内有一半径为r的球体,空间中球体之外有m个点,在不穿过球体的条件下求这m个点两两间的最短曲线距离。分析:显然有两种情况:1.两点连线不经过球体;2.两点连线穿过球体。第一种情况显然,考虑第二种情况:将球心、两点作为研究平面,可以发现最短曲线一定包括两条线段和一段......
  • P6594 [YsOI2020] 换寝室
    P6594[YsOI2020]换寝室树上差分+树形dp题意:给定一棵树,每条边有边权,割掉一些边,使得被割掉的边边权和不超过kk,最小化剩余连通块点权极差的最大值。看到最小化最大值,可以考虑二分。此时二分了\(x\),那么每个连通块的极差都不能超过\(x\)。考虑需要判断是否存在一个连通块的......
  • 【CSP】202012-4 食材运输 70% 一点思路
    对于K==M的情况,问题重点是:如何统计从某点出发,遍历需要某食材的所有酒店最小权重和。考虑到N规模很小,因此可以直接枚举从每个点出发的权重和,问题就转化为如何求从某点出发,遍历某食材的权重和。由于图为一棵树,所有该权重和是唯一的。有两个限制条件:如何知道某食材的全部酒店已经经......
  • P8725 [蓝桥杯 2020 省 AB3] 画中漂流
    题目:链接:https://www.luogu.com.cn/problem/P8725思路:dp[i][j]表示第i个时刻还有多少体力之前的错误思路:dp[i][j][k]表示第i个时刻,在j位置,有k个体力。但是注意:这三个变量并不是相互独立!!动规的一个取变量原则应该是相互独立确定某个状态。剩下k体力和i时刻可以推出位置!!site......
  • 转载 ebpf sockmap/redirection 提升 socket 性能(2020)
    利用ebpfsockmap/redirection提升socket性能(2020)转自:https://arthurchiao.art/blog/socket-acceleration-with-ebpf-zh/译者序本文翻译自2020年的一篇英文博客 HowtouseeBPFforacceleratingCloudNativeapplications。原文标题非常宽泛,但内容其实很技术:展示了......
  • [网鼎杯 2020 朱雀组]Nmap
    [网鼎杯2020朱雀组]Nmap类似Nmap的功能,一个输入命令行,提示输入ip地址,尝试输入正常内容:127.0.0.1nmap命令将扫描结果保存在文件里面:例如:将nmap127.0.0.1的结果保存在test.txt里面nmap127.0.0.1-oNtest.txtnmap其他写文件命令:-oN(标准输出)-oX(XML输出)-oS(ScR......
  • tomcat AJP 任意文件读取/包含漏洞(CVE-2020-1938)
    漏洞描述TomcatAJP协议中存在缺陷,攻击者可以读取或包含Tomcat的webapp目录中的任何文件。漏洞危害:读取webapp配置文件或源代码。如果攻击者读取配置文件得到敏感用户名和下面,tomcatWeb应用开放manager目录具有文件上传功能2.1可以直接上传shell获取控制权,2.2通过Gho......
  • 美国新冠疫情日数据正在更新中!可以下载「.xls」2020-2024年美国疫情大数据查询
    美国新冠疫情日数据,数据更新至2024/4/97:06:08美国新冠疫情昨日数据正在更新:新增是923例。再看一下各州吧:New-York新冠疫情昨日新增是:504发一个美国的新增总图:15个月的折线趋势图2020-2024年美国疫情大数据查询及下载EXCEL表:发一个20天的美国疫情数据表下......