[BUUCTF]zctf2016_note2

本文介绍了一道经典的堆溢出题目,通过伪造空闲chunk并利用unlink攻击指针数组来实现对got表的篡改,最终获得shell。文章详细解释了如何利用整数溢出漏洞,以及如何通过精心构造的数据覆盖原有内容,实现对内存布局的控制。

 一道伪造空闲chunk,利用unlink攻击指针数组的题,算是比较典型。

先checksec,堆题不开PIE,八成是打堆块指针数组,然后劫持指针指向got表附近,通过覆写got表拿到shell。

程序有四个功能。前面输入name和Addr都没啥用。

 审计代码,Add,Del,Show都是很简单的,可以得知申请的堆块地址和申请的空间的大小是由两个数组管理的。Del里面没有UAF漏洞。Add中申请0x80可以得到unsorted bin chunk

在读取字符串的函数中,存在一个整数溢出漏洞。这里在for循环的判断条件中,本意是让i在0~size-1的范围内,即输入size个字符。但是这里size-1为有符号数,i为无符号数,比较时会把size-1变为无符号数。而申请堆块时,malloc(0)会返回一个0x20大小的堆块。而size为0时,size-1为0xff ff ff ff ff ff ff ff,这里几乎可以无限制地溢出

Edit函数可以覆盖原本的内容,也可以在后面续写。

<think>好的,我现在需要回答用户关于在Ubuntu 24.04上检查GCC版本的问题。首先,我应该回忆一下常用的Linux命令。用户提到的是gcc version,所以直接使用gcc --version应该就能显示版本信息。这是最直接的方法,可能用户只需要这个命令。 不过,可能用户对系统其他信息也感兴趣,比如是否安装了多个版本的GCC或者如何切换版本。但根据问题,用户明确询问的是当前系统的GCC版本,所以先给出最简洁的答案比较好。此外,Ubuntu 24.04默认的GCC版本可能较新,比如GCC 13或更高,但具体需要实际查看。 另外,可能需要提到其他相关命令,比如使用dpkg来查询安装的软件包版本,或者查看/usr/bin/gcc的符号链接。但为了不过于复杂,先提供主要的方法,再在相关问题中扩展。 用户提供的引用中有关于Ubuntu安装CUDA和配置的内容,虽然与GCC版本无直接关联,但可能用户的环境涉及开发工具链,因此可以建议检查开发工具是否完整安装,比如build-essential包。不过这可能超出当前问题范围,但作为相关问题可以提到。 最后,生成的相关问题需要围绕GCC版本管理、安装其他版本、切换版本以及编译依赖等。确保问题有针对性,帮助用户进一步探索。</think>### 检查Ubuntu 24.04的GCC版本 #### 方法1:直接查看版本 在终端执行以下命令,可直接显示当前默认GCC版本: ```bash gcc --version ``` 输出示例: ``` gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0 Copyright (C) 2023 Free Software Foundation, Inc. ``` 此命令会显示GCC的主版本号(如13.2.0)和编译时间戳[^1]。 --- #### 方法2:查询软件包状态 通过`dpkg`工具查看已安装的GCC软件包详细信息: ```bash dpkg -l gcc ``` 输出示例: ``` ||/ 名称 版本 架构 描述 +++-==============-============-======-================================= ii gcc 4:13.2.0-1 amd64 GNU C编译器 ``` --- #### 方法3:检查符号链接 查看`/usr/bin/gcc`指向的实际二进制文件: ```bash ls -l /usr/bin/gcc ``` 输出示例: ``` lrwxrwxrwx 1 root root 5 Mar 30 14:22 /usr/bin/gcc -> gcc-13 ``` 此结果显示默认GCC指向`gcc-13`,即版本号为13[^2]。 --- #### 系统开发环境建议 如果输出提示`command not found`,说明未安装GCC。可通过以下命令安装: ```bash sudo apt update && sudo apt install build-essential ``` 该命令会安装GCC、G++、make等基础开发工具链[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值