常见linux攻击技术之绕过NX实现栈溢出攻击

Linux缓冲区保护机制 前言 为了更好地对缓冲区进行利用,十分有必要了解一下checksec所检查出的漏洞缓解措施都意味着什么 如图上所示,RELRO、Stack、NX、PIE四种保护机制,下方介绍时,括号里的是在Windows系统中的名称 以下主要来源于《从0到1CTFer成长之路》 一、NX(DEP) NX即是No-execute,不可执行。原理是通过现代操作系统的内存保护单元机制(MPU)对程序内存按页的粒度进行权限设置,其基本规则为可写权限与可执行权限互斥。因此开启了NX的程序代表着堆栈上写入的代码数据将不可被执行,也就 阅读详情

0x00 前言

众所周知,linux下开启了NX的以及windows下开启了DEP的程序堆栈是不可执行的,linux下的程序默认编译时是开启了NX的,故很久以前采用的通过jmp esp或者jmp rsp跳板技术跳转到栈中的shellcode执行的栈溢出攻击方式基本上已经失效。

除了NX,还有ASLR,PIE,CANARY,FORTIFY,RELRO等各类保护手段五花八门,大大的提高了linux下软件的安全,同时也增加了二进制攻击的门槛。

针对这些情况,我们会用一系列文章去逐一讨论,这里先不考虑其它的保护手段,着重讨论下通过ROP(return-orient-Programming)以及ret2libc来绕过开启了NX保护但是存在缓冲区溢出点的程序,实现攻击。

0x01 环境

系统:Ubuntu 14.04.3 LTS 64位

工具:PEDA  

           Ropper

存在漏洞的演示程序vuln:

#include <stdio.h>
#include <unistd.h>
int vuln() {
 char buf[80];
 int r;
 r = read(0, buf, 400);
 printf("\nRead %d bytes. buf is %s\n", r, buf);
 puts("No shell for you :(");
 return 0;
}
int main(int argc, char *argv[]) {
 printf("Try to exec /bin/sh");
 vuln();
 return 0;
}
为了便于我们先关闭ASLR
# echo 0 > /proc/sys/kerne/randomize_va_space

然后还需要编译时关闭程序的stack CANARY栈保护手段

gcc -g -fno-stack-protector vuln.c -o vuln

0x02 分析

未完待续。http://bluereader.org/article/44353367


Ret2libc技术详解:绕过NX保护实现栈溢出攻击 在计算机安全领域,内存保护机制是防止恶意代码执行的重要防线。其中,NX(No-eXecute)保护机制通过将内存区域划分为可执行和不可执行两部分,有效阻止了攻击者在栈或堆等数据区域直接执行恶意代码。其原理是通过CPU的内存管理单元对内存页设置执行权限位,当程序尝试在不可执行区域执行指令时,会触发硬件异常。这项技术的价值在于显著提高了缓冲区溢出攻击的难度,是现代操作系统安全的基础组件之一。在实际应用场景中,NX保护广泛应用于操作系统内核、浏览器沙箱和服务器软件等关键系统。为了绕过这种保护,安全研究人员开发了R 阅读详情

相关推荐

栈溢出防护绕过:3 种现代 Linux 环境下 NX/ASLR 攻击技术对比

本文深度解析了现代Linux环境下NX/ASLR防护机制的绕过技术,重点对比了ROP、JOP等攻击方法在栈溢出和数组越界漏洞中的实际应用。通过详细的技术分析和实战案例,揭示了在NX+ASLR防护组合下如何利用信息泄露构建有效攻击链,为二进制安全研究提供了重要参考。

weixin_34101914的博客 335

nx在linux系统使用说明,linux系统vim使用方法介绍

vim介绍vim是vi的升级版本vim是带有颜色显示的系统默认没安装vim命令,安装命令为:yum install -y vim-enhanced一般模式、编辑模式、命令模式vi打开/etc/passwd vim 打开/ect/passwd vim一般模式下移动光标按键 作用h或者向左的方向键 ...

weixin_35077079的博客 519

从栈溢出到ret2libc:绕过NX保护的漏洞利用技术详解

栈溢出是二进制安全领域的经典漏洞类型,其原理在于程序向栈缓冲区写入数据时缺乏边界检查,导致关键数据被覆盖。随着操作系统安全机制的演进,NX(No-eXecute)保护技术被广泛应用,它将栈和堆等数据区域标记为不可执行,从而有效阻止了传统的shellcode注入攻击。为了绕过这一防护,安全研究人员发展出了代码复用(Code Reuse)技术,其核心思想是利用程序自身已有的合法代码片段来构建攻击链。ret2libc正是这一范式的典型代表,它通过劫持程序控制流,使其跳转到C标准库中的system函数,并传递/bi

weixin_30471561的博客 451

nx在linux系统使用说明,如何在两个Linux系统之间设置Nomachine NX | MOS86

有多种方法可以登录到一台计算机上,从另一台900Mh1112 ssh运行软件,用于纯粹的命令行工作,X11转发,用于在远程机器上启动GUI应用程序,VNC用于远程查看桌面,RDP如果您Nomachine以其NX系统而闻名,它会压缩其发送和接收的数据,从而适合较慢的网络连接。Nomachine提供a安装Server第一件事你即服务器机器)。在Ubuntu中,您可以使用以下命令安装(或从您最喜欢的软件...

weixin_35678674的博客 386

Linux_x86栈溢出攻击实验——写在前面的话

师父说,要想在安全这个行业走得远,首先要看兴趣。其实我有些怀疑自己的兴趣,不过干一行爱一行。 最近由于某种原因开始接触二进制漏洞,特别小白那种,虽然漏洞原理两三句话说得清清楚楚,但要实际操作起来真的不知如何下手。因此将自己的从0到1的经历写出来分享跟我一样的小白,尽可能做到超级详细通俗易懂,一方面记录自己的学习过程以及踩过的坑,另一方面希望能坚持更新博客也给自己坚持学习的动力,希望在这个过程中培养...

zd454909951的博客 561

Ret2Libc攻击实战:绕过NX保护获取Shell的完整指南

栈溢出是一种常见的内存安全漏洞,攻击者通过覆盖函数返回地址,可以劫持程序执行流程。当现代操作系统启用NX(No-eXecute)保护时,栈内存被标记为不可执行,传统的Shellcode注入攻击将失效。此时,Ret2Libc(Return-to-libc)技术应运而生,其核心原理是复用程序已加载的合法库函数代码片段,通过精心构造的栈布局,将执行流导向libc库中的system等函数,并为其传递所需参数(如"/bin/sh"),从而在无法执行自定义代码的限制下实现命令执行。这种技术不仅绕过了NX保护,还衍生出更

weixin_38166557的博客 444

NX绕过教程:在不可执行的内存中“借风行舟“

摘要:NX(No-eXecute)保护机制通过禁止数据内存执行来防御代码注入攻击,但ROP(Return-Oriented Programming)技术通过重用程序已有代码片段绕过NX限制。文章详细解析NX机制及其绕过技术,包括ROP、JIT Spraying和return-to-libc等,并探讨现实中的防御策略与未来趋势。安全是攻防博弈的持续过程,多层防护和硬件协同是未来方向。本文仅供学习,严禁非法使用。

fearhacker的专栏 1178

浅谈向量检索

文章目录浅谈向量检索背景什么是向量什么是向量检索距离度量检索方法ANN的基本思路举个容易理解栗子举个正常的例子具体算法树方法KD-TreeAnnoyHash方法LSH 算法矢量量化方法乘积量化码本的建立码字搜索算法倒排乘积量化临近图方法HNSW 算法朴素想法Delaunay算法NSW 主要思想NSW构图NSW查找参考 浅谈向量检索 背景 索引一直被认为是检索引擎最重要的组成部分,之所以数据库能够快速的查询出来结果。系统设计中很多常见的多种数据结构都是为了快速命中索引设计的, 比如 红黑树、跳跃表、倒排索引、

qq_42828391的博客 6553

栈溢出攻击

《目录》 栈的初始大小及修改 栈溢出攻击原理 判断栈的增长方向 栈溢出攻击实例 换算公式 栈,是一种数据结构(后进先出)。 程序的运行都需要用到栈,图中的 FP 是栈帧,通过栈帧的指引可以实现函...

Debroon 2745

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4235

嵌入式设备系统日志记录及调试技巧_嵌入式日志系统(1),如何成为杰出的程序员

这里面我使用的芯片为哈弗体系,全局常量存储编译器默认分配在flash,需要注意如果使用片内flash时,注意存储调试等级的flash块不要与代码区重合,要不然修改调试等级擦除flash块同时PC指针指向当前块的代码区,会导致仪器死机;这个也是之前用的比较多的,以上代码是模仿linux 内核的写法,可以比较好的做到日志信息分层,编译时相加对应的编译开关即可。但有个弊端就是,切换debug等级时,需要重新编译且需更新固件,而嵌入式设备出现异常后更新固件往往复位后,故障有时很难复现,调试起来比较浪费时间。

2401_84240431的博客 1294

Kernel Stack栈溢出攻击及保护绕过

本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。

2401_84466325的博客 1170

VMware vSphere运维管理手册

ESXi 7.0 引入了一种系统存储布局,可对大型模块和第三方组件进行灵活的分区管理和支持,同时简化了调试操作。ESXi 7.0 系统存储更改在 ESXi 7.0 之前,分区大小固定不变,除 /scratch 分区和可选 VMFS 数据存储之外,且分区号是静态的,这些限制了分区管理。在 ESXi 7.0 中,分区整合为更少且更大的可扩展分区,具体取决于所使用的引导介质及其容量。ESXi 7.0 系统存储布局包含四个分区:分区适用情况类型系统引导存储引导加载程序和 EFI 模块。FAT16。

Avenjan优快云博客 3625

栈溢出入门03 ret2syscall ROP NX绕过

ret2syscall 函数栈动态变化

砖家 1414

王道考研计算机网络课件全解析:从零搭建你的知识框架(附B站视频+PPT下载)

本文全面解析王道考研计算机网络课程的核心知识体系,从OSI七层模型到TCP/IP四层架构,详细讲解物理层、数据链路层、网络层、传输层和应用层的关键技术。提供高效学习路径、实战案例和常见误区警示,帮助考生系统构建计算机网络知识框架,适合计算机考研备考者参考学习。

leaf8的博客 564

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

|~~~热爱生活、努力学习的小伙汁~~~| 1万+

CTF-PWN笔记(一)-- 栈溢出 之 基础ROP

文章目录栈linux内存布局原理文件保护机制CanaryNXPIE(ASLR)RELRO简单的栈溢出(ret2txt)ret2shellcode 栈 栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。 高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存

CK_0ff的博客 6202

基于 MATLAB 的 FastICA 算法实现语音信号盲分离

FastICA 算法通过最大化信号的非高斯性,找到独立成分,从而实现信号的分离。这些混合的信号被称为盲源信号,我们希望通过分析混合信号,将它们分离出来以便进行进一步的处理和分析。FastICA 是一种常用的盲源信号分离算法,它基于统计学原理,通过寻找独立成分来实现信号的分离。FastICA(独立成分分析)是一种常用的盲源信号分离算法,在语音和图像处理领域都有广泛的应用。本文将介绍如何使用 MATLAB 实现 FastICA 算法来实现语音信号的盲分离,并提供相应的源代码。FastICA 算法原理。

学习使你进步。 2025

NX,Canary,RELRO,PIE,Linux的4种保护机制讲解

NX(DEP):数据执行防护  Canary(FS):栈溢出保护  RELRO(ASLR):(地址随机化)  PIE(代码地址随机化) NX: 栈上的数据没有执行权限 防止攻击手段:栈溢出 + 跳到栈上执行shellcode CANARY: 在函数开始时就随机产生一个值,将这个值CANARY 放到栈上紧挨ebp的上一个位置,当攻击者想通过缓冲 区溢出覆盖ebp或者ebp下方的返回地址时,一定会覆 盖掉CANARY的值;当程序结束时,程序会检查 CANARY这个值和之前的是否一致,如果不一致,则

半岛铁盒的博客 6309

GEE初学:谷歌地球引擎GEE入门指南(最新注册全流程)

本教程详细介绍了谷歌地球引擎(GEE)的注册与基础操作流程。主要内容包括:1)非商业账号注册步骤,需提供学术机构凭证和研究目的;2)Google Cloud项目创建与API激活;3)Shapefile文件上传方法及资源ID获取;4)JavaScript脚本编写与地图可视化实现。教程通过代码示例展示了两种多边形显示方式(填充和轮廓模式),并强调了GEE的云端处理优势,包括免费访问40多年卫星数据、无需本地高性能硬件等特点。整个流程从账号注册到首个地图可视化完成约需10-15分钟,适合遥感分析初学者快速入门。

此星光明博客 2143

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

栈溢出攻击技术:从基础到高级ROP实战

栈溢出是二进制安全领域的核心漏洞类型,通过覆盖函数返回地址劫持程序控制流。其技术演进从基础的ret2text、ret2shellcode发展到对抗现代防护的ret2libc和ROP链构造。理解栈帧结构、内存布局和调用约定是掌握这些技术的前提。在工程实践中,pwntools、gdb等工具链配合使用可高效完成地址泄漏、payload构造和漏洞利用。这些技术不仅应用于CTF竞赛,也是真实漏洞挖掘中的关键技能,特别在IoT设备固件分析和漏洞利用中具有重要价值。通过Nebula、Protostar等经典靶场系统训练,

weixin_29323365的博客 236

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

linux pwn栈溢出漏洞原理

学习栈溢出首先了解一下linux pwn常见的保护 》RELRO 部分RELRO: 将.got段映射为只读(但.got.plt还是可以写) 重新排列各个段来减少全局变量溢出导致覆盖代码段的可能性. 完全RELRO: 执行部分RELRO的所有操作. 让链接器在链接期间(执行程序之前)解析所有的符号, 然后去除.got的写权限. 将.got.plt合并到.got段中, 所以.got.plt将不复存在....

weixin_45948183的博客 713

ssm框架搭建

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

checksec检查后RELRO、Stack、NX、PIE的各个意思

保护机制核心对抗目标RELROGOT 覆写、重定位劫持Stack栈缓冲区溢出NXshellcode 注入PIE内存地址预测。

2301_80936918的博客 1811

栈溢出知识讲解

栈溢出是一种内存漏洞,当程序向栈中写入的数据超过栈帧分配的空间时,多余的数据会覆盖栈上其他重要数据(如返回地址、局部变量等),从而可能劫持程序控制流。

2401_89161017的博客 907

64位Linux下Ret2Libc攻击:绕过NX保护获取Shell的实战指南

在计算机安全领域,内存保护机制是防止漏洞利用的关键防线。NX(No-eXecute)保护通过将数据区域标记为不可执行,有效阻止了攻击者直接执行注入的恶意代码。其原理是通过硬件和操作系统协作,对内存页设置执行权限位。这一机制的技术价值在于显著提升了缓冲区溢出等漏洞的利用门槛,迫使攻击者转向更复杂的技术。在应用场景上,现代操作系统和编译器普遍默认启用NX保护,尤其在CTF竞赛和二进制安全研究中,绕过NX成为必备技能。其中,Ret2Libc(Return-to-Libc)攻击通过复用已加载的合法库函数代码(如sy

weixin_33946020的博客 335
上一篇: (CVE-2016-0728)Linux Keyring refcount 内核提权漏洞
下一篇: 为beaglebone black编译安装BBBAndroid
autohacker
博客等级 码龄12年 66粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值