美文网首页
picoctf-2018 | pwn wp

picoctf-2018 | pwn wp

作者: fantasy_learner | 来源:发表于2019-01-13 15:25 被阅读0次

    bufferoverflow0

    • 功能分析 :
      • 绑定 11 信号为 错误函数(输出 flag)。
    • 利用过程:
      • 输入长度 超过 0x1c ,会破坏 ret。
      • 从而 触发 11 信号的绑定函数.
      • tip : 因为 flag 在 bss段 , 还可以 栈溢出 , 设置 为 puts(&flag)
        exp

    bufferoverflow1

    • 漏洞点 : 输入长度不限制,造成栈溢出
    • 利用 : 覆盖 ret 为 win 函数
      exp

    bufferoverflow2

    • 漏洞点 : 输入长度不限制 , 造成栈溢出
    • 利用 : 与 bufferoverflow1 相比, 需要利用栈溢出 , 调用传参函数 win(0xdeadbeef , 0xdeadc0de)

    exp


    bufferoverflow3

    • 功能分析:
        1. 读入 canary.txt , 取出前 4 个字符为 canary
        1. 根据输入指定 输入长度 | 栈溢出
        1. 对 栈上地址 进行指定长度的输入
        1. 判断 canary 是否被改变 , 没有被改变过,就ret
    • 利用过程:
      • 因为 canary 是从文件中的读取的4字节,所以不会变化,可以爆破获得
        • tip: 应该 利用 read 的特点(不会为输入的尾部加上 \x00),逐个字符进行爆破,从而降低爆破的难度 (全部字符直接进行爆破 , 难度 256 ^ 4 , 逐个字符爆破 , 难度 256 * 4)

    exp


    can-you-gets-me

    • x86 elf | 静态链接
    • 漏洞点:
      • gets 输入造成栈溢出
    • 利用过程:
      • ret2syscall (execve("/bin/sh\x00" , null , null))
          1. 将 /bin/sh 输入到 bss段 (利用 pop ecx 和 pop [ecx])
          1. eax , 0xb
          1. ebx , bss
          1. ecx , 0 (null)
          1. edx , 0 (null)
          1. int 0x80 | 执行函数

    exp


    echoo

    • 漏洞点:格式化字符串
    • 流程分析 :
        1. 读入 flag 在栈中
        1. 循环 读入和输入 格式化字符串
    • 利用 :
      • %8$s ,该格式化字符串,可以输出栈中的flag

    exp


    got-2-learn-libc

    • 流程分析:
      • 输出 puts 等函数的地址和 /bin/sh 的字符串地址
      • gets读入字符串,造成栈溢出
    • 利用过程:
        1. 获取 puts 函数地址 和 /bin/sh 地址
        1. 利用 LibcSearcher 根据 puts 地址 获取 system 地址
        1. 栈溢出 调用 system("/bin/sh\x00")

    exp


    got-shell

    • 流程分析 :
      • 输入 地址
      • 输入 值
      • 综合 : *地址 = 值
    • 利用点:
      • 根据 got 机制, 修改 exit@got 的 值 为win , 从而在 exit 时调用 win

    exp


    shellcode

    • 流程分析 :
    • 用户 输入 一段 shellcode
    • 执行 shellcode
    • 利用过程
        1. 使用 shellcraft 生成一段 shelllcode
        1. 输入 ,getshell

    exp


    gps

    • 流程分析:
        1. 输出一个栈地址( 根据 rand() 的结果 做了一定处理 )
        1. 在栈中 $rbp - 0x1010 输入 0x1000 个字符
        1. 输入一个地址 , 并且 跳转到该地址
    • 考察点:
        1. 抗随机化 的 shellcode
        • 1.1 随机化的点 :输出的栈地址 被 随机数处理过,从而无法根据它找到 shellcode的具体输入地址 , 变化范围 ([- 0x29c , 0x29c])
        • 1.2 抗随机化的 解决方法: nop 指令
    • 利用过程
    1. 获取栈地址 并加上 0x29c , 确保 >= $rbp - 0x1010
    2. 利用 shellcraft.amd64.linux.sh() 生成 shellcode
    3. 利用 nop 对 shellcode 的 前部进行填充
    4. 输入 shellcode , 跳转 栈地址 执行

    exp


    leak-me

    • 流程分析:
        1. 输入 name <= 0x100
        1. 在 name 的输入之后,填入 28 个字符的字符串
        1. 输入 密码 进行 与 password.txt 的内容 进行比较判断
    • 利用过程:
        1. 填充 name , 从而 leak password
        1. 读取泄露的 password , 从而输入password , 通过判断

    exp


    ropchain

    • 流程分析:
      • gets 造成 栈溢出
    • 利用过程:
        1. 调用 win_function1 ,设置 win1 = 1
        1. 调用 win_function2(0xBAAAAAAD) , 设置 win2 = 1
        1. 调用 flag

    exp

    相关文章

      网友评论

          本文标题:picoctf-2018 | pwn wp

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