初识Linux栈溢出攻击

本文介绍了在Ubuntu环境下,如何关闭ASLR、堆栈段不可执行和GS校验等安全机制,以便于理解Linux栈溢出攻击。通过示例程序和shellcode,解释了程序运行栈的结构,并说明了在main函数执行过程中,如何利用栈溢出覆盖eip寄存器的值,从而实现攻击。
摘要由CSDN通过智能技术生成

初识Linux栈溢出攻击

0x00 限定条件

1、关闭aslr(Address Space Layout Randomization)
  开启aslr后,应用程序或动态链接库装载时,系统会随机设定其装载基址。这样就避免了攻击者事先预知特定函数的入口地址。ubuntu下的关闭命令为echo 0 >/proc/sys/kernel/randomize_va_space,该命令需要事先通过su提升到root权限。
2、关闭堆栈段不可执行机制
  如果堆栈段被标记为不可执行,那么覆盖程序栈的shellcode就无法执行。关闭堆栈段不可执行机制的gcc编译命令为-z execstack
3、关闭gs校验机制
  gs校验机制的原理是,进入函数前向程序栈中压入一个随机数,函数返回后检查这个随机数,如果被改写了,就报段错误,结束程序。关闭gs校验机制的gcc编译命令为-fno-stack-protector
测试平台为Ubuntu 15.04 64位,测试代码如下

#include<stdio.h>
#include<string.h>
char s[]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x48\x31\xc0\x48\x83\xc0\x3b\x48\x31\xff\x57\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x48\x8d
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值