NX防护机制以及最基本shellcode

本文介绍了NX(No eXecute)防护机制的基本原理,通过一个实验展示了在NX关闭的情况下如何利用栈溢出来执行自定义系统调用。文章详细讲解了利用过程,包括观察程序行为、确认栈溢出、编写脚本写入汇编代码,并最终实现系统调用。同时,文章提供了学习网络安全的全面学习路径。
摘要由CSDN通过智能技术生成

NX 基本介绍

No- eXecuteNX的基本原理是将数据所在内存页(用户栈中)标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令.

微信截图_20221014115435.png

如图所示,该程序的栈空间没有可执行x权限,所以无法执行任何代码。

道理我们都懂,那么如果我们 关闭了NX到底可以干什么呢,该如何利用呢?下面通过一个实验来说明。

实验基本信息

本次虽提供了源码,但在我们利用NX防护关闭这个漏洞时, 是在不知道源代码,编译时没有附带-g无法gdb直接进行调试的基础上进行的。

源代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void init()
{
    setvbuf(stdin,0,_IONBF,0);
    setvbuf(stdout,0,_IONBF,0);
}

int main()
{

    char buf[100] = {0};

    init();
    printf("[DEBUGING] buf: %p\n",buf);
    printf("Hello,What's Your name?\n");

    read(0,buf,0x100);
    printf("I don't know you,so bye ;)\n");

    return 0;
}

makefile文件

提供makefile方便可以快速编译改代码

OBJS=pwn_2.c
CC=gcc
CFLAGS+=-fno-stack-protector -no-pie -z execstack # 关闭NX

pwn_2:$(OBJS)
        $(CC) $^ $(CFLAGS) -o $@

clean:
        $(RM) *.o # 可省略

checksec信息

WeChat
Screenshot_20221011233837.png

如图所示NX disabled NX防护已关闭

WeChat
Screenshot_20221011233940.png

确定栈段具有可执行权限

提示

进行编译的时候,gcc 会提示:

‘read’ writing 256 bytes into a region of size 100 overflows the destination [-Wstringop-overflow=]

不用理会, 因为本身我们验证的就是栈溢出,所以此处提示数据会溢出是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值