본문 바로가기

CTF/Pwnable.xyz

Pwnable.xyz pwnable_misailgnment Write up

약간 전에 문제랑 비슷한 형태이다.

근데 이건 약간에 메모리에 대한 이해가 필요하다.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [rsp+10h] [rbp-A0h]
  _QWORD v5[3]; // [rsp+18h] [rbp-98h]
  __int64 v6; // [rsp+30h] [rbp-80h]
  __int64 v7; // [rsp+38h] [rbp-78h]
  __int64 v8; // [rsp+40h] [rbp-70h]
  unsigned __int64 v9; // [rsp+A8h] [rbp-8h]

  v9 = __readfsqword(0x28u);
  setup(*&argc, argv, envp);
  memset(&s, 0, 152uLL);
  *(v5 + 7) = 0xDEADBEEFLL;
  while ( _isoc99_scanf("%ld %ld %ld", &v6, &v7, &v8) == 3 && v8 <= 9 && v8 >= -7 )
  {
    v5[v8 + 6] = v6 + v7;
    printf("Result: %ld\n", v5[v8 + 6]);
  }
  if ( *(v5 + 7) == 0xB000000B5LL )
    win();
  return 0;
}

일단 코드를 보면 딱봐도 v5에 배열을 우리가 조정이 가능하다.

우리는 v5+7에 값을 0xB000000005 로 바꿔야된다.

 

그럼 우리는 배열에 맞게 값을 넣어주면 되겠다.

그넫 여기서 리틀엔데언떄문에 고민을좀 해야한다.

 

리틀엔디언떄문에 처음에 맨 뒤에 숫자인 B5를 넣어줘야된다.

 

-5404319552844595200 0 -6

요런식으로해서 첫번쨰 배열에 넣어주도록하자.

 

그다음으로 배열 두번쨰에 b000000을 넣어서 마무리를 짓도록 하자.

184549376 0 -5

 

이런식으로 진행하게되면 메모리에 잘 넣어지는것을 확인할수있다.

 

'CTF > Pwnable.xyz' 카테고리의 다른 글

Pwnable.xyz pwnable_GrownUpRedist Write up  (0) 2019.11.17
Pwnable.xyz pwnable_xor Write up  (0) 2019.11.17
Pwnable.xyz pwnable_add Write up  (0) 2019.11.09
Pwnable.xyz pwnable_sub Write up  (0) 2019.11.09
Pwnable.xyz pwnable_welcome Write up  (0) 2019.11.09