美文网首页
pwn笔记之Modern Binary Exploitation

pwn笔记之Modern Binary Exploitation

作者: 苏州暮雨 | 来源:发表于2017-10-31 19:41 被阅读0次

    附:gcc -O0 -fno-stack-protector lab2B.c -o lab2B

    编译的时候开启栈保护,即栈不可执行(NX)


    ./lab2C:

    查看源码,可以发现是一个很简单的堆栈溢出,我们在进行调试的时候可以发现set_me与buf的局部变量地址时连续的,由于在strcpy函数复制的时候没有进行边界分析,导致可以通过给buf赋值的时候,覆盖set_me的值。

    由于是一个需要设置程序运行参数,所以需要在gdb中设置参数:

    set args 可指定运行时参数。(如:set args 10 20 30 40 50)                                                 show args 命令可以查看设置好的运行参数。

    其中注意在字符填充时候是小端的方式,在内存之中set_me的位置在buf的位置之上,将buf覆盖之后将吧set_me的值给覆盖。

    有一个小技巧:可以使用linux下的xargs命令,使用前一个命令的输出作为参数:


    ./lab2B:

    查看源码,发现一个没有使用的system与字符串“/bin/sh”,观察源码分析后得到思路:我们可以使用覆盖的方式,将strcpy的返回地址给覆盖,也就是返回时到达system的函数中,并且调用字符串:

    为了确定使用正确的对策,需要分析一下程序的安全防护情况(使用工具checksec),在栈执行保护(NX)或地址随机化(canary)时,采用的方式是不一样的,可以发现程序开启了栈不可执行的保护:

    查看合适的字符串(searchmem  /bin/sh):

    ./lab2A的安全防护设置与B一致

    进行比较源码与汇编指令可以发现[ebp-0x18]里存的是locals.cat_pointer(也就是cat_buf的起始位置),[ebp-0x28]里存的是输入的字符的首地址,对于buf的大小为12,但是读入的时候可以读取0x10(即16个字节),刚好可以覆盖到locals.cat_pointer

    相关文章

      网友评论

          本文标题:pwn笔记之Modern Binary Exploitation

          本文链接:https://www.haomeiwen.com/subject/gtgxpxtx.html