PWN基础
GCC编译
gcc 文件
文件的后缀名为".c".
运行二进制文件
./文件
编译汇编程序(.asm
)为可执行文件
1 | nasm -f elf example.asm -o example.o |
编译后,example即为可执行文件.
编译汇编语言源文件(.s
)为可执行文件
1 | gcc -o example example.s |
编译后,example即为可执行文件.
输出流被关闭
1 | exec 命令 1>&0 |
.got节与.got.plt节
1 | [*]使用 checksec 文件 //查看文件的RELRO |
shellcraft
NX保护关闭时,可以直接发送shellcode. 1
payload = asm(shellcraft.sh()) # 使用 pwntools 的 shellcraft 模块生成一个 shellcode,并使用 asm 函数将其汇编成二进制指令
ASLR相关
ASLR(Address Space Layout Randomization)是一种操作系统级别的安全功能,它通过在每次程序运行时随机化内存地址的布局,使得攻击者更难以利用内存地址的固定位置进行攻击.
可以将该文件的值设置为以下几个选项之一来控制 ASLR 的行为: - 0:关闭 ASLR,内存布局不随机化。 - 1:启用 ASLR,但只有堆和栈是随机化的。 - 2:启用完整的 ASLR,所有内存段(包括堆、栈、共享库等)都是随机化的。
1 | echo "0" > /proc/sys/kernel/randomize_va_space |
Fortify相关
FORTIFY_SOURCE是 Linux 系统中的一个环境变量,用于禁用 Fortify Source
功能,Fortify Source 是 GCC 编译器提供的一种安全增强功能,当
FORTIFY_SOURCE 设置为 0
时,编译器将禁用这一安全功能,不再对代码进行缓冲区溢出检查.
1
2
3[-]FORTIFY_SOURCE=0:禁用 Fortify 功能。 不会进行任何额外的安全检查。 可能导致潜在的安全漏洞。
[-]FORTIFY_SOURCE=1:启用 Fortify 功能的基本级别。 在编译时进行一些安全检查,如缓冲区边界检查、格式化字符串检查等。 在运行时进行某些检查,如检测函数返回值和大小的一致性。 如果检测到潜在的安全问题,会触发运行时错误,并终止程序执行。
[-]FORTIFY_SOURCE=2:启用 Fortify 功能的高级级别。 包括基本级别的安全检查,并添加了更多的检查。 在编译时进行更严格的检查,如更精确的缓冲区边界检查。 提供更丰富的编译器警告和错误信息。
argc
在 C 语言中,argc 是 main() 函数的参数,用于表示程序运行时命令行参数的数量(argument count)。其中,argc 是一个整数值,表示命令行参数的数量,包括程序名称本身。