Advertisement

我的CTF刷题笔记和心得总结

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:DOCX


简介:
我的CTF刷题笔记和心得总结记录了作者在网络安全竞赛中的学习历程与实战经验,涵盖各类解题技巧、策略分析及团队合作等多方面内容。 ### CTF刷题WP笔记解析 #### 1. SWPUCTF 2021 新生赛 —— whitegive_pwnV1 本题目聚焦于一个典型的CTF比赛中的二进制漏洞利用挑战,名为“whitegive_pwnV1”。通过对题目描述的解读,我们可以深入分析其中涉及的重要概念和技术细节。 ##### 一、背景介绍 - **题目概述**:“whitegive_pwnV1”是SWPUCTF 2021新生赛的一个二进制漏洞利用题目。题目给出的二进制程序大小为0x10+0x8,旨在覆盖rbp(基址指针),然后寻找返回地址来定位一个可利用的漏洞。 - **关键概念**: - **rBP**: 在函数调用过程中用于标记栈帧的顶部,是栈帧边界的一个标志。 - **返回地址**: 函数调用后返回的地址,通常位于函数调用现场保存的栈中。 - **GOT表**: Global Offset Table(全局偏移表),在ELF格式的程序中用于存储外部函数和变量的地址,以便于动态链接时进行重定位。 - **PLT表**: Procedure Linkage Table(过程链接表),包含了一些特殊的指令,用于实现动态链接过程中的跳转。 ##### 二、技术细节解析 - **公共漏洞**:“public vuln”在这里指的是公开的漏洞,即程序中存在的已知安全缺陷,这些缺陷可能被攻击者利用来进行未授权访问或数据破坏。 - **GOT表泄露攻击原理**: - **动态链接原理**: 在程序运行时,对于外部调用如`printf`等函数,编译时不知道具体的地址,只知道其在`.plt`表中的位置。当第一次调用这些函数时,程序会通过`.plt`表跳转到`.got.plt`中存储的地址,并完成重定位。 - **攻击思路**: 攻击者可以通过控制输入使返回地址被覆盖指向`.plt`中的某个条目,从而控制程序流并利用泄露的信息。 ##### 三、具体技术应用 - **泄露GOT表**:通过某种方式修改程序的返回地址使其指向前述位置以达到泄露目的。 - **重定位机制**: 在加载时,`.got`中存放的是需要进行重定位的地址信息。对于外部函数调用,除了`.got`外还需要通过`.plt`条目完成跳转。 - **利用LibcSearcher库**:为了确定libc版本及其基址,攻击者会使用该库搜索并匹配libc中的函数地址以计算出其在内存中的基地址。 ##### 四、示例代码解析 - **pwntools函数**: `recvuntil`用于接收socket数据直到遇到特定字符串。例如`data.recvuntil(bx7f)`表示从`data`接收数据直至遇到字节`x7f` - **数据处理**: 从接收到的数据中提取最后六个字节,并将其左对齐扩展至8字节,不足部分用0填充。 - `[-6:]`: 获取最后六个字节 - `.ljust(8, bx00)`: 将字符串左对齐并扩展为8个字节 “whitegive_pwnV1”题目不仅考察参赛者的二进制漏洞利用能力,还要求他们掌握GOT表泄露、动态链接和pwntools等关键技术。通过上述知识点的了解,参赛者可以更好地理解和解决此类问题。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • CTF
    优质
    我的CTF刷题笔记和心得总结记录了作者在网络安全竞赛中的学习历程与实战经验,涵盖各类解题技巧、策略分析及团队合作等多方面内容。 ### CTF刷题WP笔记解析 #### 1. SWPUCTF 2021 新生赛 —— whitegive_pwnV1 本题目聚焦于一个典型的CTF比赛中的二进制漏洞利用挑战,名为“whitegive_pwnV1”。通过对题目描述的解读,我们可以深入分析其中涉及的重要概念和技术细节。 ##### 一、背景介绍 - **题目概述**:“whitegive_pwnV1”是SWPUCTF 2021新生赛的一个二进制漏洞利用题目。题目给出的二进制程序大小为0x10+0x8,旨在覆盖rbp(基址指针),然后寻找返回地址来定位一个可利用的漏洞。 - **关键概念**: - **rBP**: 在函数调用过程中用于标记栈帧的顶部,是栈帧边界的一个标志。 - **返回地址**: 函数调用后返回的地址,通常位于函数调用现场保存的栈中。 - **GOT表**: Global Offset Table(全局偏移表),在ELF格式的程序中用于存储外部函数和变量的地址,以便于动态链接时进行重定位。 - **PLT表**: Procedure Linkage Table(过程链接表),包含了一些特殊的指令,用于实现动态链接过程中的跳转。 ##### 二、技术细节解析 - **公共漏洞**:“public vuln”在这里指的是公开的漏洞,即程序中存在的已知安全缺陷,这些缺陷可能被攻击者利用来进行未授权访问或数据破坏。 - **GOT表泄露攻击原理**: - **动态链接原理**: 在程序运行时,对于外部调用如`printf`等函数,编译时不知道具体的地址,只知道其在`.plt`表中的位置。当第一次调用这些函数时,程序会通过`.plt`表跳转到`.got.plt`中存储的地址,并完成重定位。 - **攻击思路**: 攻击者可以通过控制输入使返回地址被覆盖指向`.plt`中的某个条目,从而控制程序流并利用泄露的信息。 ##### 三、具体技术应用 - **泄露GOT表**:通过某种方式修改程序的返回地址使其指向前述位置以达到泄露目的。 - **重定位机制**: 在加载时,`.got`中存放的是需要进行重定位的地址信息。对于外部函数调用,除了`.got`外还需要通过`.plt`条目完成跳转。 - **利用LibcSearcher库**:为了确定libc版本及其基址,攻击者会使用该库搜索并匹配libc中的函数地址以计算出其在内存中的基地址。 ##### 四、示例代码解析 - **pwntools函数**: `recvuntil`用于接收socket数据直到遇到特定字符串。例如`data.recvuntil(bx7f)`表示从`data`接收数据直至遇到字节`x7f` - **数据处理**: 从接收到的数据中提取最后六个字节,并将其左对齐扩展至8字节,不足部分用0填充。 - `[-6:]`: 获取最后六个字节 - `.ljust(8, bx00)`: 将字符串左对齐并扩展为8个字节 “whitegive_pwnV1”题目不仅考察参赛者的二进制漏洞利用能力,还要求他们掌握GOT表泄露、动态链接和pwntools等关键技术。通过上述知识点的了解,参赛者可以更好地理解和解决此类问题。
  • 牛客.docx
    优质
    该文档详细记录了作者在牛客网进行编程练习的心得体会和解题技巧,涵盖算法优化、代码效率提升等多个方面,旨在帮助读者提高编程能力和面试水平。 牛客刷题总结 本资源主要涵盖了 Java 语言的基础知识点、设计模式以及事务处理的介绍。 一、Java 基础知识: 1. 在一个 Java 源程序中只能存在一个公共类,且该类名需与文件名称一致。这是因为 Java 程序从 main 方法开始执行,public 类为加载器提供入口点并找到其中的主方法来运行代码。如果源码中有多个 public 类,则编译器将无法确定应从哪个类启动程序。 2. 内部类可以被声明为公共(public),因为它们是外部类的一部分成员。 3. Math.floor() 方法返回小于参数的最大整数,例如 Math.floor(-4.2) 的结果为 -5.0。 4. 使用 Math.ceil() 可以得到大于给定数值的最小整数。如:Math.ceil(5.6) 等于 6.0。 5. 利用 Math.round() 方法可以实现对小数进行四舍五入,例如 Math.round(-4.6) 的结果为 -5。 6. Java 中数组被视为对象而非基本数据类型,它们占用连续的内存空间,并且一旦创建其大小便不可更改。因此,若要调整数组长度,则需要重新定义一个新数组并复制原数组内容至新的位置。 二、设计模式: 1. MVC(模型-视图-控制器)是一种软件架构样式,它将应用程序划分为三个主要部分:业务逻辑处理的模型层;数据展示与用户交互的视图层;以及负责协调两者之间的控制层。这种结构使得界面和用户体验可以独立于业务规则进行修改而不必重新编写后端代码。 三、重载和重写: 1. 重载指的是在一个类中定义多个具有相同名称但参数列表不同的方法,这些方法可以通过传递给它们的参数类型或数量来区分使用哪一个。这体现了多态性。 2. 当子类覆盖父类的方法时(即两者名字、返回值及输入参数一致),称为重写。此外,在实现此功能的过程中必须保持或者增加原有访问控制权限。 四、多态: 1. 多态是指不同对象接收相同的调用却能执行不同的操作,通过继承和方法的重新定义来达成。 2. 当我们对同一指令(即同名函数)实施时,根据被引用的对象类型决定具体行为方式。 3. 实现这一特性的条件包括:必须存在类之间的继承关系;子类需重写父类的方法以提供不同的实现。 五、事务处理: 1. 传播行为定义了方法调用的上下文环境中的事务边界。一共有七种这样的策略,如:PROPAGATION_MANDATORY, PROPAGATION_NESTED, PROPAGATION_NEVER等。 2. 隔离级别影响着数据库操作期间可能出现的问题类型,包括脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻象数据(Phantom Reads)。
  • KDB-Q KDB Q 学习
    优质
    这段笔记汇集了作者在学习KDB和Q语言过程中的心得体会与实践经验,旨在为同样致力于掌握这一高效数据处理工具的技术爱好者提供参考和启示。 关于学习KDB和Q的笔记可以参考《Q for Mortals》这本书。 下载Kdb+后,在Linux上可以在终端运行`~/q/l32/q`来打开q控制台;在Windows上则运行`\q\w32\q`。要退出控制台,请在终端中输入0。
  • HTMLCSS学习
    优质
    本资源汇集了关于HTML和CSS的学习心得与笔记,旨在帮助初学者快速掌握这两种网页制作的基础技术。 本资源主要是我业余学习Html与CSS的全面资料,记录了最完整的HTML学习经验,并包含了一些个人制作的小练习。
  • 自己写CCP学习
    优质
    本文为作者个人的学习心得体会,主要围绕CCP(可能指的是中国共产党)相关知识进行总结和反思,分享了学习过程中的收获与感悟。 自己写的CCP标定协议学习总结,希望能对大家有所帮助。
  • ES6核语法
    优质
    《ES6核心语法总结笔记》是一份全面概述ECMAScript 6关键特性和语法规则的学习资料,旨在帮助开发者快速掌握现代JavaScript编程技巧。 这段文字主要总结了ES6的核心语法,并整理成一个思维导图,有助于快速复习和回顾。
  • NiFi使用
    优质
    本笔记详细记录了作者在使用Apache NiFi过程中的经验和技巧,涵盖配置、优化及常见问题解决等内容,旨在帮助初学者快速上手和进阶用户提升效率。 NiFi管理员或数据流管理器(DFM)可能会遇到在单个服务器上运行一个实例的NiFi不足以处理其拥有的大量数据的情况。因此,一种解决方案是跨多个NiFi服务器部署相同的数据流程。然而,这种方法会导致管理和维护上的挑战:每当DFM需要修改或更新数据流程时,必须分别在每个服务器上执行这些操作,并且还需单独监控各个节点的状态。 通过将NiFi集群化,则能够同时提升处理能力和简化管理任务。具体而言,在一个统一的接口下进行配置变更可以自动分发到整个集群中的所有成员,而无需手工逐个实施更改;此外,该集中式控制面板还支持对全网健康状况和运行状态的一体化监控。 综上所述,通过集群方式部署NiFi有助于DFM实现更高效的系统管理和优化的数据流操作。
  • MATHCAD学习
    优质
    《MATHCAD学习心得笔记》是一份详细记录使用MATHCAD软件进行数学计算和工程设计过程中的技巧、方法及心得体会的学习资料。 工程数学软件实用入门资料非常直观易懂,无需专门学习编程语言即可上手。
  • PostgreSQL学习
    优质
    本笔记汇集了个人在学习和使用PostgreSQL过程中的心得体会与技巧总结,旨在为数据库爱好者和技术人员提供参考。 PostgreSQL学习笔记非常有价值,凝聚了本人的心血与经验。
  • YOLOv5训练
    优质
    本文记录了作者在使用YOLOv5进行目标检测模型训练过程中的经验和技巧,分享了优化策略、调试方法等内容。 自己练习的笔记,记录一下学习过程。