# 10.06 SUS 培训

# 基本知识点

1. 程序在 32 位中传递参数为 栈传递,在 64 位中通过寄存器传递

2. 变量存储

  • 未初始化的全局变量 存放在 BSS 段
  • 初始化的全局变量存放在 Data 段
  • 函数存放在 Text 段
  • 局部变量存放在栈段
  • 主动申请的内存在堆部分
  • read 函数等存放在 shared libraries

# 简单栈溢出

image-20231006153909131

image-20231006154804670

# ret2text

image-20231006155442449

print name0x100 的数据拷贝到 只有 15 个字节的 buf 中,就会溢出。读入超过 15 字节的数据,就会将下面的内容覆盖,把返回地址的值覆盖为 shell() 函数的地址,就可以跳转到 shell 完成攻击。

一般的,先使用 checksec 查看保护机制:

image-20231006155901627

NX 有效防止 shellcode注入 攻击。 PIE 地址随机化的保护。

攻击代码如下:

image-20231006160640430

至少 15 个字节将 buf 覆盖掉,再写 8 个字节将 ebp 覆盖掉,最后再覆盖返回地址,覆盖为后门函数的返回值。但是这样会导致栈没有对齐,从而报错。于是利用查看 ret 的地址:

image-20231006161404605

将 ret 填充到 8 结尾的内容中,这样 shell 会以 0 结尾开始运行从而对其 16 字节不报错。pwn 的解法很多,这只是本题其中一个解法。

# ret2shellcode

image-20231006161936187

本题目没有后门函数,需要自行编写 shellcode

image-20231006162147718

题目会将 buf 在栈上的地址告诉你,我们将 buf 的返回地址改为 buf 在栈上的开始地址:

image-20231006162512175

image-20231006162919424

shellcode 可以用系统自动生成的,也可以用自己写的,编译 shellcode 的能力还是很重要的。可以在 shellcodes databsase 网站中学习。

# ret2libc

image-20231006163151506

该题开启了 NX 并且没有后门函数。使用 ldd,查看动态库发现有 libc,于是该题从 libc 中开始找。libc 的地址是随机的,但是 write 函数的地址在 libc 中是相对的,知道了就可以获得 libc 的地址。

image-20231006164647386

# 学习资源

image-20231006164824858

更新于

请我喝[茶]~( ̄▽ ̄)~*

Yanagi-Kon 微信支付

微信支付

Yanagi-Kon 支付宝

支付宝

Yanagi-Kon 贝宝

贝宝