pwn学习(一)

news2024/11/27 0:40:09

pwn:二进制漏洞挖掘与利用(程序里面的漏洞)

CTF中的Pwn是仅保留漏洞代码和基本逻辑的二进制程序,选手通过自身对漏洞的熟悉程度来快速的在逆向分析中找到漏洞点,并且结合自身对漏洞利用的熟悉程度来编写EXP脚本,从而获得目标机器Shell拿到Flag。

作用

1.)破解,利用成功(程序的二进制漏洞)

2.)攻破(设备,服务器)

3.)控制(设备,服务器)

 拿到 进制漏洞 用file命令查看文件

常用语句

exploit(用于攻击的脚本与方案)

payload(攻击载荷,给服务器发送恶意数据使其目标进程被劫持的数据,)

shellcode(调用攻击目标的shell代码)

shell(kali linux里面提供用户与操作系统交互的命令行接口,提供了一个文本接口)

pwn的几大主流漏洞

  • 栈溢出
  • 堆溢出
  • ROP
  • 格式化字符串漏洞
  • 其余漏洞

首先是栈,它是一种后进先出(LIFO)的数据结构,在计算机中具有重要的作用。程序在运行时,会将栈用来存储函数的调用栈、内存的分配操作、表达式求值的临时变量以及与程序中的控制流相关的数据。

每当程序执行函数调用、变量声明或其他类型的操作时,都会在栈中添加一个栈帧(Stack Frame),也即是称为堆栈帧,用于存储函数的执行环境。
 

栈溢出

1. 定义

栈溢出是缓冲区溢出的一种,当缓冲区数据大于缓冲区大小时,缓冲区之外的有用数据就会被多出去的缓冲区数据覆盖改写,从而可能导致程序崩溃。

    缓冲区:程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。

2. 原理

栈溢出漏洞在ctf题中常被用来覆盖程序的返回地址,以达到某函数返回(return)时,不再是返回原先的返回函数地址,而是返回到我们为其指定地址的地方。

举个简单的例子就是我们向桌面上的水杯中倒入大量的水,水杯中的水一定会溢出来,并且覆盖到桌面上。水杯就是我们所说的栈缓冲区,水就是我们输入的数据,桌面就是整个栈空间。所以栈溢出漏洞的本质在于对栈缓冲区写入数据的长度没有做校验,可以使得写入长度是任意值,当写入超过缓冲区自身长度的数据后会覆盖其后面的栈空间数据。

完全二叉树

1.)只允许最后一行不为满

2.)最后一行必须从左往右排序

3.)最后一行元素之间不可以有间隔

堆的第二性质:堆序性

据此分为大根堆(每个父节点都大于它的子节点) 小根堆(每个父节点都小于它的子节点)

堆的储存

先按照层序遍历的顺序来给结点编号(从上到下 从左到右)把编号对应到数组的下标,然后把数的元素存入相应的下标里,因为是完全二叉树,所以每个下标和树的位置都是一一对应的,一个堆可以用一个一维数组来表述

堆内存是一种允许程序在运行过程中动态分配内存和使用的区域。和栈的主要不同在于动态分配,堆的内存区域是程序运行时申请和释放的。

堆溢出

堆溢出是指程序向某堆块(chunk)中写入的字节数超过了堆块本身可使用的字节数,因而导致了数据溢出,并覆盖到物理地址相邻的高地址的下一个堆块。这里之所以是可使用而不是用户申请的字节数,是因为堆管理器会对用户所申请的字节数进行调整,这也导致可利用的字节数大于等于用户申请的字节数。

ptmalloc 分配出来的大小是对齐的。这个长度一般是字长的 2 倍,比如 32 位系统是 8 个字节,64 位系统是 16 个字节。但是对于不大于 2 倍字长的请求,malloc 会直接返回 2 倍字长的块也就是最小 chunk,比如 64 位系统执行malloc(0)会返回用户区域为 16 字节的块。

因此,要利用堆溢出要满足两个前提

1)程序向堆上写数据;
2)写入的数据大小没有被控制;
 

对于堆和栈的理解

堆和栈是在程序运行中用于存储数据和指令的两种不同的内存空间,它们都是程序中重要的组成部分。

本质上讲没什么差别 都是内存的一块区域 区别在于用法

栈区

连续内存

变量的使用仅仅局限于函数的内部即这个函数运行完成之后,此变量占用的内存就可以销毁了,这种变量即为局限变量        其占据的内存十分好管理,内存的分配和释放仅仅需要移动一个指针(寄存器)而已。   栈区的内存管理无需程序员担心,因为栈区的内存申请和释放很有规律,遵循先来的后释放(栈的顺序)。

堆区

一个变量的生命周期超越了函数 函数运行完之后 变量占据的内存是不可以被回收的 其内存的生命周期受程序员控制。          堆区中的内存需要精心标记 ,由于进程中的所有线程共享一个堆区 ,堆区内存分配器必须处理好线程安全问题       所以性能比栈区差             

成员变量和局部变量

局部变量,如果是基本数据类型,那么就直接存在栈中,如果是引用数据类型(类、接口、数组),比如String str = new String(“12”);,会把对象存在堆中,对象的引用(指针)存在栈中,

成员变量,类的成员在不同对象中各不相同(属性和方法),基本数据类型和引用数据类型都存储在这个对象中,作为一个整体存储在堆中。而类的方法是所有的对象共享的,方法是存在方法区的,只用当调用的时候才会被压栈,不用的时候是占内存的。

区别


(1)在类中的位置不同
成员变量:类中方法外
局部变量:方法定义中或者方法声明上
(2)在内存中的位置不同
成员变量:在堆中
局部变量:在栈中
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
(4)初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须定义,赋值,然后才能使用

局部变量基本上是方法的参数。

参考资料:

https://blog.csdn.net/Morphy_Amo/article/details/122323280

https://www.zhihu.com/question/464671097/answer/2816873492

https://blog.csdn.net/m0_49768044/article/details/131391832

https://blog.csdn.net/weixin_45197447/article/details/107390320

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pxe远程安装

PXE 规模化:可以同时装配多台服务器 自动化:自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境,再操作系统之前运行 实验: 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

Linux学习之路 -- 文件 -- 文件描述符

前面介绍了与文件相关的各种操作&#xff0c;其中的各个接口都离不开一个整数&#xff0c;那就是文件描述符&#xff0c;本文将介绍文件描述符的一些相关知识。 目录 <1>现象 <2>原理 文件fd的分配规则和利用规则实现重定向 <1>现象 我们可以先通过prin…

搭建父模块和工具子模块

第一章 项目父模块搭建 1.1 nancal-idsa 作为所有工程的父工程&#xff0c;用于管理项目的所有依赖版本。 1.2 指定 pom 类型模块&#xff0c;删除 src 目录&#xff0c;点击Reload project 1.3 添加依赖 pom.xml <parent> <groupId>org.springframework.…

纯干货,源代码防泄露的有效方法

随着云计算、移动互联、物联网等新技术的发展&#xff0c;传统的安全边界变得越来越模糊&#xff0c;访问控制模式局限性也越来越明显。企业需满足员工在任意时间、地点对企业内部进行访问的需求&#xff1b;服务器之间各自为界、相互独立&#xff0c;缺乏统一的安全管理标准&a…

DeepSeek发布全新开源大模型,GPT-4级别能力 价格仅百分之一

最新国产开源MoE大模型&#xff0c;刚刚亮相就火了。 DeepSeek-V2性能达GPT-4级别&#xff0c;但开源、可免费商用、API价格仅为GPT-4-Turbo的百分之一。 因此一经发布&#xff0c;立马引发不小讨论。 从公布的性能指标来看&#xff0c;DeepSeek-V2的中文综合能力超越一众开源…

第六代移动通信介绍、无线网络类型、白皮书

关于6G 即第六代移动通信的介绍&#xff0c; 图解通信原理与案例分析-30&#xff1a;6G-天地互联、陆海空一体、全空间覆盖的超宽带移动通信系统_6g原理-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞34次&#xff0c;收藏165次。6G 即第六代移动通信&#xff0c;6G 将在5G 的基…

初识Node.js-认识node(安装Node.js环境配置)

目录 一、node介绍 1.概念和特点 2.核心功能 3.应用场景 二、Node初使用 1.安装node配置 windows上安Node.js 1.windows安装包&#xff08;.msi&#xff09; 2、Windows 二进制文件 (.exe)安装 Linux 上安装 Node.js 直接使用已编译好的包 Ubuntu 源码安装 Node.js …

Linux进程地址空间第三讲

至今为止&#xff0c; 我们所学到的大多数的知识&#xff0c; 包括语言&#xff0c; 数据结构&#xff0c; 动静态库等等的 都是在下面这3G&#xff0c; 也就是用户空间里的(进程等待&#xff0c; 信号之类的与内核有关的是在上面那1G里的) 所以对于我们来说&#xff0c; 我们…

避雷!5.3分,新增1区被标记On Hold,共12本SCI/SSCI慎投!

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…

贪吃蛇游戏(C语言实现)

目录 游戏效果展示文件代码的展示test.cSnake.cSnake.h 下一个坐标不是食物 游戏效果展示 QQ录屏20240507163633 文件 代码的展示 test.c #define _CRT_SECURE_NO_WARNINGS#include<locale.h> //设置本地化 #include"Snake.h"//游戏的测试逻辑 void test() {…

免单狂欢模式:电商销售的新风潮

免单狂欢模式&#xff0c;是电商行业里一股新兴的销售力量。它以其独特的激励机制、社交属性与合规运营&#xff0c;迅速吸引了众多消费者的目光&#xff0c;成为推动销售业绩飙升的强大动力。 一、合规运营&#xff0c;稳健发展 在免单狂欢模式中&#xff0c;我们严格遵守法律…

搭建Harbor仓库

文章目录 Harbor仓库搭建Harbor仓库安装 docker 服务修改配置文件 Harbor仓库 搭建Harbor仓库 下载 Harbor 仓库 安装 docker 服务 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-m…

NFCP502-W05 电流数据是多少安培?

YOKOGAWA NFCP502-W05 是一款由横河电机&#xff08;Yokogawa Electric Corporation&#xff09;生产的微型断路器&#xff08;Microcircuit Breaker&#xff0c;简称 MCB&#xff09;。 横河电机是一家日本的跨国公司&#xff0c;专注于自动化和控制系统、仪器和其他相关设备…

sh包装脚本

两个脚本,运行的时间间隔分别是一分钟和五分钟,放入到sh文件中,挂在后代,脚本里面的路径最好是绝对路径。 新建sh文件 新建 run_test.sh 文件,使其可以运行两个不同的 Python 脚本,一个每分钟运行一次,另一个每五分钟运行一次。下面是修改后的 run_test.sh 文件的示例:…

学QT的第二天~

小黑子鉴别界面 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { qDebug()<< "你好&#xff0c;真爱粉"; this->close(); } else { speecher->sa…

EMAIL-PHP功能齐全的发送邮件类可以发送HTML和附件

EMAIL-PHP功能齐全的发送邮件类可以发送HTML和附件 <?php class Email { //---设置全局变量 var $mailTo ""; // 收件人 var $mailCC ""; // 抄送 var $mailBCC ""; // 秘密抄送 var $mailFrom ""; // 发件人 var $mailSubje…

PyQt6--Python桌面开发(1.安装配置环境)

一.PyQt6简介 PyQt&#xff1a;PyQt是一个功能强大且成熟的GUI框架&#xff0c;基于Qt库。它提供了丰富的组件、布局和主题选项&#xff0c;以及强大的功能和灵活性。PyQt的优点是它具有现代化的外观和丰富的功能&#xff0c;适用于复杂的GUI应用程序。然而&#xff0c;由于Py…

Cobalt Strike DNS Beacon使用

0. 前言 1. 实验运行流程 2. 环境搭建 2.1.1 安装虚拟机软件VMware……大家应该都有装吧&#xff0c;这里就不教了 2.1.2 Windows 10虚拟机&#xff08;受害机&#xff09; 2.1.3 Ubuntu虚拟机&#xff08;攻击机&#xff09; 2.1 安装虚拟机 2.2 安装Java 2.3 安装Dock…

通过管理系统进行升级怎么选?

现在通过系统来做办公效率提升的又很多&#xff0c;但怎么选&#xff0c;确实很关键。 我们是在去年年初的时候进行企业系统化的。当时刚摘下口罩&#xff0c;领导也是意识到团队办公的不便&#xff0c;数据管理的混乱&#xff0c;业务流转的低效等原因&#xff0c;开始寻找各…

数据结构——链表专题3

文章目录 一、判断链表是否有环二、返回入环的第一个节点三、随机链表的复制 一、判断链表是否有环 原题链接&#xff1a;判断链表是否有环 这道题可以使用快慢指针&#xff0c;fast一次走两步&#xff0c;slow一次走一步&#xff0c;如果有环&#xff0c;它们在环里面必定会…