PWN保护机制以及编译方法

pwn-canary绕过和PIE(未完待续) 看见了fork函数,那就通过爆破得出canary对于 Canary,但是同一个进程中的不同线程的 Canary 是相同的,并且通过 fork 函数创建的子进程的 Canary 也是相同的,因为 fork 函数会直接拷贝父进程的内存。我们可以利用这样的特点,彻底逐个字节将 Canary 爆破出来。 打开sub_128A函数 明显的溢出发现后门函数 开始计算溢出大小0x70-0x80=104①先逐字爆破出canary的值②直接溢出到返回地址,覆盖为后门函数的地址。但这道题开了PIE保护,而PIE是代码段,数据段 阅读详情

0x00 声明

以下内容,来自先知社区的作者逆向萌新原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

0x01前言

Ctf中的pwn题,在利用gcc编译的时候,保护是如何开启的,如何编译出来的,保护都有什么由于在ctf中,大部分都是linux pwn,Windows pwn很少见,所以我这里以linux pwn来举例。

0x02 PWN的保护

在pwn里,保护一共是四种分别是RELRO、Stack、NX、PIE。

1.RELRO(ReLocation Read-Only):分为两种情况,第一种情况是Partial RELRO,这种情况是部分开启堆栈地址随机化,got表可写,第二种,Full RELRO是全部开启,got表不可写,Got表是全局偏移表,里面包含的是外部定义的符号相应的条目的数据段中,PLT表,是过程链接表/内部函数表,linux延迟绑定,但是最后还是要连接到Got,PLT表只是为一个过渡的作用。

2.Stack(canary):这个保护其实就是在你调用的函数的时候,在栈帧中插入一个随机数,在函数执行完成返回之前,来校验随机数是否被改变,来判断是否被栈溢出,这个我们也俗称为canary(金丝雀),栈保护技术。

3.NX(no execute):为栈不可知性,也就是栈上的数据不可以当作代码区执行的作用。

4.PIE(Position Independent Executable):PIE的中文叫做,地址无关可执行文件,是针对.text(代码段),.data(数据段),.bss(未初始化全局变量段)来做的保护,正常每一次加载程序,加载地址是固定的,但是PIE保护开启,每次程序启动的时候都会变换加载地址。

0x03 编译

在gcc中,利用默认参数进行生成,默认生成的是RELRO、PIE、NX保护是全开的情况,但是有一些题,会针对题型的不同,来更变所开启的保护机制。

从头开始,关闭所有的保护开始关闭所有保护开始gcc -z execstack -fno-stack-protector -no-pie -z norelro -o 输出文件名 c语言文件名,来编译一个linux可执行文件,关闭所有的保护,之后再生成一个保护全开的一个文件,在相同的c语言源文件下进行生成利用命令gcc -fstack-protector-all  -o b.out lk.c,生成了一个保护全开的一个文件,进行对比分析。

两个文件,一个是保护全开,一个是全关。

这是checksec之后的结果,来看内部的不同,有一些是可以半开,半关的,那些最后说。

NX:在没有开启的时候在利用readelf-l 文件中,发现了对于栈的一个区别,在这里叫做GNU_STACK。

没有开启保护:

GNU_STACK      0x0000000000000000 0x0000000000000000 0x00000000000000000x0000000000000000 0x0000000000000000  RWE    0x10

开启NX保护:​​​​​​​

GNU_STACK      0x0000000000000000 0x0000000000000000 0x00000000000000000x0000000000000000 0x0000000000000000  RW     0x10

开启保护之后,GNU_STACK从RWE变成了RW,栈只能进行读写,而不可以执行

RELRO:还是进行readelf -l进行查看,发现正常,没有开启RELRO中,缺少了GNU_RELRO类型,而且全部开启,只有读的权限,没有写入和执行的权限,这是RELRO全开的情。

RELRO全开:​​​​​​​

GNU_RELRO      0x0000000000002db0 0x0000000000003db0 0x0000000000003db00x0000000000000250 0x0000000000000250  R      0x1

RELRO半开: ​​​​​​​

GNU_RELRO      0x0000000000002de8 0x0000000000003de8 0x0000000000003de80x0000000000000218 0x0000000000000218  R      0x1

RELRO关闭:却是GNU_RELRO类型。

STACK(canary):这个是无法看出的,这个的作用在函数运行之前,插入一个cookie信息,如果你溢出的时候,往往会直接把插入的cookie覆盖掉,从而来保证,缓冲区是否被溢出区别动调的时候会额外到一个地方来确认,是否被覆盖。

左边是未开启canary的状态,是一直直接往下,返回退出,但是右边是开启canary的状态,存在一个je跳转来验证,确定这个函数的栈没有问题的情况下,才会跳转到正常退出这个函数的位置,否则就进入异常处理阶段,报错退出。

PIE:在PIE未开始和开启的话,能在debug调试器中进行分析是否开始,就是多开几个窗口,看看咱们去对这个main函数进行下断电,如果下断点的时候,main函数的地址变了,那么就是说明,这个开启了pie,如果一直不变,那么就是没有开启pie,这是本质的一个区别。

未开启pie:

0x04总结

PWN的保护其实很重要,知道了保护机制,就很可能推出这道题想要考你什么点比如NX没开,可能要考你ret2shellcode,PIE没开,RELRO半开,NX开启,金丝雀未开,可能要考你ret2text,根据这些可以大概的推算出,想要考你什么点,对于做题会有很大的帮助。

2019.11.6 unctf 的pwn题——简单绕过pie 这篇安全客关于pie和bapass绕过写的蛮好的! 看到函数最后返回到v1(),而且上一个函数的开辟的空间比后一个函数开辟的函数大,我们想到可以在前一个函数中提早将后门函数布置好,因为弹栈并不会是栈中的数据变化,除非往栈中写数据。 我们现在就通过gdb我们需要往栈的拿个位置写后门函数。 我们可以看见第一个数组的位置和后面 的v2()之间隔了0xc个字节。还有需要注意的是程序是将一个函数... 阅读详情

相关推荐

CTFshow PWN入门实战:手把手教你用pwntools搞定pwn24(含shellcraft模块详解)

本文详细介绍了如何利用pwntools和shellcraft模块攻破CTFshow的pwn24题目,适合PWN入门者学习。从程序分析、漏洞利用思路到编写完整exp脚本,手把手教你如何通过缓冲区溢出漏洞获取shell并拿到flag。特别适合刚接触CTF PWN题的新手学习实战技巧。

weixin_33646989的博客 247

基础知识——程序保护

关于程序的保护机制,虽然网上容易找到大量的资料,但是相对比较全面而又易懂的介绍却不多,本人对网上的资料进行了收集整理,也会加入一些自己的理解与实践。对程序的保护机制种类很多,也会随着本人的了解,陆续加入。但是作者本人作为初学者,能力有限,知识体系也不是很完善,如有出错的地方,烦请批评指正。 我们先来看一个实例,使用pwntools的checksec对一个程序进行检测 RELRO(Relocation Read-Only): 设置符号重定位表格为只读或在程序启动时就解析并绑定所有动态符号,从而减

qq_17512883的博客 1708

CTF Pwn入门:栈溢出与格式化字符串漏洞原理与实践

在计算机安全领域,理解程序在内存中的运行机制是基础。栈溢出和格式化字符串漏洞是两类经典的软件漏洞,其原理源于程序对内存边界和输入验证的疏忽。栈溢出通过覆盖关键内存地址(如返回地址)来劫持控制流,而格式化字符串漏洞则利用格式化函数(如printf)的特性实现信息泄露或内存篡改。这些漏洞的利用价值在于,攻击者可以借此执行任意代码、获取敏感数据或提升权限,在CTF竞赛和真实安全测试中极为常见。本文以babygame靶场为例,结合pwntools和GDB等工具,详细演示了从环境搭建、漏洞分析到利用脚本编写的完整流程

diaomeijiao3430的博客 481

CTFpwn常见保护及绕过:pie,canary

这道题没有后门,我们还需要libc去做,这样我们需要泄露出一个正常的函数地址,来计算出libc_base,但是我们发现泄露的地址没有函数,libc_start_call_main(下称libc_call),这个函数我们不可以使用,因为找不到它的偏移(这里是因为虚拟机版本问题,一般libc_start_main(下称libc_main)可以被泄露出来)跟libc利用很像。之后跟进ctfshow函数,进行代码审计,第一个while循环没什么用,我们随便发送个数据就可以绕过,重点!

2302_79813730的博客 4915

逆向工程实战:用IDA Pro破解BUUCTF的test_your_nc(含PWN工具包配置)

本文详细介绍了如何使用IDA Pro逆向分析BUUCTF平台上的test_your_nc题目,包括PWN工具包配置和实战技巧。通过静态分析和动态调试,结合pwntools等工具,展示了从环境准备到漏洞利用的全过程,适合CTF新手和逆向工程爱好者学习。

weixin_42531925的博客 385

网络攻防快速入门笔记pwn|01 Pwn栈溢出基础

⚫ 定义:根据程序漏洞,编写利用脚本破解漏洞,获得系统权限,从而获得flag。⚫ 一般解题思路:①出题人给出自己服务器的IP和端口,并在端口上运行一个进程② 出题人再给出一个二进制文件,这个二进制文件刚好就是这个进程运行的文件③我们通过找出出题人提供的二进制文件的漏洞;④ 利用漏洞获取出题人服务器的最高权限;

qq_41040989的博客 1036

静态编译PWN题完整攻略:从识别到利用的实战指南

二进制漏洞利用是CTF竞赛与安全研究中的核心方向,而程序编译链接方式直接决定了攻击面的形态。静态链接将系统库代码打包进ELF文件,使其脱离动态加载器独立运行,这一特性改变了漏洞利用的思路:无需泄露libc基址,可直寻system、execve等关键符号,同时也让GOT劫持、ret2syscall、SROP等技术成为主流。对于初学者而言,从file、checksec等基础命令入手,理解静态链接带来的内存布局差异,再结合格式化字符串漏洞实施任意地址写入,是掌握这类题目的高效路径。本文覆盖静态编译PWN题的识别方

weixin_42530732的博客 353

CTFshow-pwn入门-栈溢出pwn49(静态链接pwn-mprotect函数的应用)

ctfshow-pwn入门-栈溢出pwn49-mprotect函数静态链接pwn的应用

你们de4月天的博客 2586

CTFshow_Pwn知识精炼 (长期更新)

本博文为CTFshow中Pwn系列的知识总结,用于记录小登摸索[ 二进制世界 ] 的历程;

A_Cleaner的博客 578

服务器测试之intel E8102CQDA2

网卡性能 iperf E810

qq_41897488的博客 2509

手把手教你用Vivado的STARTUPE3原语驱动S25FL256S Flash(附完整Verilog代码)

本文详细介绍了如何利用Xilinx UltraScale+系列FPGA的STARTUPE3原语驱动S25FL256S SPI Flash,包括原语配置、SPI协议实现、状态机设计及调试技巧。通过完整的Verilog代码示例和性能优化建议,帮助开发者高效完成Flash通信解决方案的开发与集成。

weixin_30660027的博客 460

Exploit利器——Pwntools

Exploit利器——Pwntools

qq_30445397的博客 283

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2768

ret2stack

#include<stdio.h> int main(){ setbuf(stdin,0); setbuf(stdout,0); char str[100]; printf("%p",&str); gets(str); return 0; } 查看权限 gcc -fno-stack-protector -z execstack -no-pie -o debug debug.c 思路 由于NX关闭,所以可以构造shellcode ...

qq_41560595的博客 363

基于PINN的一个简单的求解偏微分方程实例

本人是做化工模拟的一名学生,最近在学习PINN(Physics-Informed Neural Networks,物理信息神经网络)对管道动力学进行建模研究,PINN由于其对机理与数据的良好兼顾性非常热门,本文是作者对PINN入门研究过程的一个练手小题目,main code也是作者代码是基于pytorch2.6.0写的,发上来供各位参考,欢迎研究管道动力学和PINN的小伙伴一起讨论~

weixin_64491760的博客 1742

SAP BTP开发入门:从PaaS到CAP/UI5的30天学习路线

在云计算与数字化转型的大背景下,企业系统集成与云端扩展需求激增,传统的单点开发模式正面临深刻变革。PaaS(平台即服务)作为云原生的核心概念,将基础设施、开发环境与应用服务统一封装,为企业提供了灵活的扩展能力。SAP BTP正是SAP生态中的PaaS平台,它承载着系统集成、低代码开发、AI服务与数据管理,成为连接S/4HANA等核心业务系统与创新应用的桥梁。对于ABAP开发者而言,掌握BTP不仅是技能升级,更是应对从传统部署向云端订阅模式转型的必由之路。本文从平台基础出发,梳理BTP的核心服务与开发模型(如

weixin_31766003的博客 285

栈溢出漏洞原理与实践:从内存结构到漏洞利用的完整指南

栈溢出是计算机安全领域中一种经典的内存破坏漏洞,其核心原理在于程序向栈上的缓冲区写入超出其容量的数据,导致相邻的关键数据被覆盖。这种漏洞源于C语言等底层编程中缺乏边界检查的函数,如strcpy、gets等。从技术价值看,理解栈溢出不仅是学习二进制安全的基础,也是掌握现代系统保护机制(如ASLR、栈保护金丝雀)的前提。在应用场景上,栈溢出分析广泛应用于CTF竞赛、安全研究入门和代码审计加固。通过GDB调试和pwntools等工具,安全研究人员可以复现漏洞、分析栈内存布局,并编写Exploit脚本实现控制流劫持

weixin_29327525的博客 368

使用 MATLAB/Simulink + Communications Toolbox + 5G Toolbox,构建一个2×2 MIMO-OFDM通信系统

本文通过Simulink+CommunicationsToolbox构建2×2 MIMO-OFDM通信系统,重点实现信道均衡滤波器(ZF与MMSE)的设计与应用。详细介绍了系统架构、建模步骤(包括信道估计、均衡器实现)和仿真场景设计,通过BER、星座图和EVM对比分析验证了MMSE均衡器在抑制噪声和信号恢复方面的优势。文章总结了MIMO均衡的核心原理与实践经验,并提出了扩展至大规模MIMO、深度学习均衡器等优化方向,为无线通信系统设计提供实用指导。

amy_mhd的博客 127

PWN——从入门到入土

就CTF比赛这几个大类来看,pwn无疑是入门门槛最高的一个方向。代码审计能力对整体程序流的认知与把握发掘程序中的漏洞点善用所有可利用的漏洞点来发起攻击。

Pr0b1em的博客 1884

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

WW、forever的博客 197

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 127

星灿的pwn随笔——Linux保护机制与基本环境搭建

NX意思就是Not Executable,开启这个保护后,程序中的堆、栈、bss段等等可写的段就不可以执行也就是对一些可输入,可能出现错误的地方都给禁止在我们编写ROP或者shellcode时,有一个问题是绕不开的,那就是找到函数地址PIE指的就是程序内存加载基地址随机化,意味着我们不能一下子确定程序的基地址ASLR与其大同小异,ASLR是程序运行动态链接库、栈等地址随机化。两者之间的关系类似于之前 写过的got表和plt表,两者之间有关系但是绝对不是一个东西。

G38324hno3的博客 910

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【PWN学习】ELF保护机制

文章目录NX防御机制绕过方法编译参数Canary防御机制绕过方法编译参数RELRO防御机制ASLR防御机制绕过方法PIE防御机制绕过方法Reference NX 防御机制 NX在windows中称为DEP。开启NX保护的程序中不能直接使用shellcode执行任意任意代码。 栈溢出的核心在于修改了EIP的值,是程序跳转到shellcode上,从而远程执行命令。在利用的时候需要先写入一段获取shell的代码,然后在执行这一段代码,这就要求存储shellcode的内存区域需要同时拥有写入和执行的权限。而NX的保

Morphy_Amo的博客 3843

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ctfshow pwn入门 pwn53

ctfshow pwn入门的pwn53,爆破canary的值,写栈溢出exp求解flag

yyh3155518319的博客 1758

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[buuctf pwn]rip

同时,栈是从高地址向低地址进行的,从栈底到栈顶这部分空间,可以用于存储函数内使用的数据在内存中,因为栈是从高地址向低地址,所以栈底指针的位置值是要大于等于栈顶指针的。

qq_72564509的博客 1029
上一篇: 红队视角下Java内存马的应用
下一篇: jpress代码审计分享
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值