checksec

Author Avatar
Aryb1n 4月 29, 2017

???

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是系统的功能