블로그 이전했습니다. https://jeongzero.oopy.io/
[pwnable.xyz] Dirty Turtle
본문 바로가기
워게임/pwnable.xyz

[pwnable.xyz] Dirty Turtle

728x90

 

1. 문제


1) mitigation 확인 

PIE와 RELRO가 안걸려있다. 

 

 

2) 문제 확인 

뭔 주소를 받는다. 뭐지? 모르겠다. 코드를 봐보자 

 

 

3) 코드 확인 

  • main() 함수
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char *s; // [rsp+0h] [rbp-10h]
  unsigned __int64 v5; // [rsp+8h] [rbp-8h]

  setup(argc, argv, envp);
  puts("Dirty Turtle Off-RoadS");
  printf("Addr: ");
  s = (char *)get_val();
  printf("Value: ");
  v5 = get_val();
  if ( v5 )
    *(_QWORD *)s = v5;
  else
    puts(s);
  return 0;
}

get_val() 함수를 호출해서 반환값을 s에 저장한다. 그다음 한번더 호출해서 v5에 저장하고, v5가 값을 가지고 있으면 해당 값을 s에 넣는다. 그게 아니면, puts(s) 를 호출하고 종료가 된다 

 

 

  • get_val() 함수
unsigned __int64 get_val()
{
  __int64 buf; // [rsp+0h] [rbp-30h]
  __int64 v2; // [rsp+8h] [rbp-28h]
  __int64 v3; // [rsp+10h] [rbp-20h]
  __int64 v4; // [rsp+18h] [rbp-18h]
  unsigned __int64 v5; // [rsp+28h] [rbp-8h]

  v5 = __readfsqword(0x28u);
  buf = 0LL;
  v2 = 0LL;
  v3 = 0LL;
  v4 = 0LL;
  read(0, &buf, 0x20uLL);
  return strtoull((const char *)&buf, 0LL, 0);
}

rws 였나 그 문제와 동일하게 strtoull 함수를 사용하는 것을 볼 수 있다. 

 

 

2. 접근방법


이 문제는 알아야 하는 개념이 있다 

main 함수가 호출, 종료되는 과정
elf 파일을 보통 디버깅 할때 main문 부터 확인했었다. 하지만 문제를 풀다가 main함수가 호출되기 까지, 종료된 후 의 과정을 알아야 할 필요가 생겨서 간단하게 정리하고자 한다. 우선 readelf -h 명령어로 현재 challenge 라는 바이너리를 확인한 결과이다. 엔트리 포인트 주소를 보면 0x4006c0 을 가리키고 있는데 해당 주소가 무엇인지 아이다로 확인해보자. 해당 주소는 _start 함수이다.
https://wogh8732.tistory.com/228

 

get_val() 함수로 원하는 위치에 win함수 주소를 넣을수 있다. no PIE이므로 got overwrite를 하면 되지만, overwrite할 함수가 없다;;. 따라서 main 함수가 종료되고 소멸자가 동작하는 루틴을 이용하여 특정 함수 부분을 win함수로 변경하면 된다. 

 

자세한 내용은 위 내용을 참조하면 된다. 결국 우리는 fini_array주소를 s에 저장하고 해당 주소에 win함수를 밖으면 끝이다. 

 

 

3. 풀이


 

 

 

4. 몰랐던 개념


  • 전에 드림핵 시스템 해킹 강의를 쫌보다가 init_array, fini_array 부분을 봤었는데 그때는 넘겼다. 하지만 이번 문제에서 해당 개념을 알아야 할 필요가 있어서 다시 가서 봤다. 그때는 이해가 안됬는데 지금 다시보니 이해가 됬다. 굳
728x90

'워게임 > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] notebook  (0) 2020.05.17
[pwnable.xyz] nin  (0) 2020.05.16
[pwnable.xyz] Hero Factory  (0) 2020.05.13
[pwnable.xyz] note v2  (0) 2020.05.13
[pwnable.xyz] badayum  (0) 2020.05.12