逆向PWN入门笔记1

PWN解题思路:
    1.确定防御机制
    2.确定溢出点,确认栈结构
    3.确定攻击方式,写shellcode

安全保护机制:
    1.ASLR(PIE)
        一般情况下NX(Windows平台上称其为DEP)和地址空间分布随机化(ASLR)会同时工作。内存地址随机化机制(address space layout randomization),有以下三种情况
        0 - 表示关闭进程地址空间随机化。
        1 - 表示将mmap的基址,stack和vdso页面随机化。
        2 - 表示在1的基础上增加栈(heap)的随机化。
         echo 0 > /proc/sys/kernel/randomize_va_space  //关闭ASLR
         可以防范基于Ret2libc方式的针对DEP的攻击。ASLR和DEP配合使用,能有效阻止攻击者在堆栈上运行恶意代码。
        Built as PIE:位置独立的可执行区域(position-independent executables)。这样使得在利用缓冲溢出和移动操作系统中存在的其他内存崩溃缺陷时采用面向返回的编程(return-oriented programming)方法变得难得多。

    2.Stack CANARY栈保护手段:栈保护功能
         gcc -g -fno-stack-protector vuln.c -o vuln
         //禁用栈保护
         gcc -fstack-protector -o test test.c   //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
        gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码
    3.FORTIFY
        fortify 技术是 gcc 在编译源码的时候会判断程序哪些buffer会存在 可能的溢出,在 buffer 大小已知的情况下,GCC 会把 strcpy,memcpy 这类函数自动替换成相应的 __strcpy_chk(dst, src, dstlen)等函数。GCC 在碰到以下四种情况的时候会采取不同的行为。
    4.NX(DEP)
        NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令
        gcc -zexecstack -o test test.c  //关闭NX
    5.RELRO:重定位只读
        设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少
        对GOT(Global Offset Table)攻击。RELRO为"PartialRELRO"说明我们对GOT表具有写权限。Full RELRO 拥有 Partial RELRO 的所有特性

1.RELRO
    RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
2.Stack
    如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
3.NX
    NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
4.PIE
    PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址 
5.FORTIFY
    FORTIFY_SOURCE机制对格式化字符串有两个限制
    (1)包含%n的格式化字符串不能位于程序内存中的可写地址。
    (2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。


挂载题目:
    socat tcp-l:4567,fork exec:/root/CTF/Pwn/pwn1

你可能感兴趣的:(攻防渗透)