checksec
???
gcc -m32 -fno-stack-protector -z execstack -o level1 level1.c
checksec 一下
[*] '/home/haibin/ctf/pwn/rop/level1'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x8048000)
RWX: Has RWX segments
-m32是要生成32位程序
checksec结果里的Arch: i386-32-little代表 32位-fno-stack-protector禁用了stack-protector栈溢出保护机制- 看到
Stack: Canary xxx,传说中的Canary金丝雀,如果有的话可以用来防御栈溢出-z execstack开启栈上可执行 - 看结果里有
RWX: Has RWX segments而且NX: NX disabled
直接生成的,不关闭保护措施的
gcc -m32 -o level1-plus-32 level1.c
checksec一下
[*] '/home/haibin/ctf/pwn/rop/level1-plus-32'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x8048000)
NX/DEP 可以让堆栈标记为不可执行,这里NX enabled了,所以没有发现RWX segmentCanary 金丝雀,堆栈的局部变量和返回地址之间保存的一个随机值(感觉像是Cookie一样)
关闭ASLR
haibin$: sudo -s
root\#: echo 0 > /proc/sys/kernel/randomize_va_space
root\#: exit
这个和checksec没什么关系, ASLR是系统的功能