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 segment
Canary
金丝雀,堆栈的局部变量和返回地址之间保存的一个随机值(感觉像是Cookie一样)
关闭ASLR
haibin$: sudo -s
root\#: echo 0 > /proc/sys/kernel/randomize_va_space
root\#: exit
这个和checksec没什么关系, ASLR是系统的功能