GCC编译

gcc 文件 文件的后缀名为".c".

运行二进制文件

./文件

编译汇编程序(.asm)为可执行文件

1
2
nasm -f elf example.asm -o example.o
ld -m elf_i386 example.o -o example

编译后,example即为可执行文件.

编译汇编语言源文件(.s)为可执行文件

1
gcc -o example example.s

编译后,example即为可执行文件.

输出流被关闭

1
2
3
4
5
exec 命令 1>&0

例:
exec ls 1>&0
exec cat flag 1>&0

.got节与.got.plt节

1
2
3
4
5
6
[*]使用 checksec 文件     //查看文件的RELRO
[-]当RELRO为Partial RELRO时,表示.got不可写而.got.plt可写。
[-]当RELRO为FullRELRO时,表示.got不可写.got.plt也不可写。
[-]当RELRO为No RELRO时,表示.got与.got.plt都可写。

[*]readelf -S 文件 //查看文件所有节的地址

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
2
3
4
5
6
echo "0" > /proc/sys/kernel/randomize_va_space
[!]"0"可换为"1"或"2"
[!]此命令设置的是你当前使用系统的ASLR!

[*]需要root权限
su root

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 是一个整数值,表示命令行参数的数量,包括程序名称本身。