본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-

Study80

LOB level 4 (goblin -> orc) LOB level 4 LOB (goblin -> orc) 1. 첫 번째로 cat 명령어를 사용하여 orc파일의 코드를 확인합니다. 2. 코드 분석1) char형 buffer[40]을 생성 2) 전달 받는 인자의 수가 2개 미만이면 프로그램 종료 3) strcpy argv[1]을 buffer에 복사한다.여기서 argv[0]은 프로그램을 실행시키는 명령어 입니다. 예를 들어 ./cobolt 여기서는 이것이 argv[0]이 되겠습니다. 4) egghunter 바로 환경변수를 사용하지 못하게 막는 것입니다. c언어 함수 memset은 원하는 부분을 초기화 시켜주는 함수입니다. 5) argv[1][47] 이 부분은 argv[1]에서 47번째가 "bf"와 같아야 한다. 라는 의미 입니다. (이것을 쉽게 해석하면 환.. 2016. 8. 1.
LOB level 3 (cobolt -> goblin) LOB level 3 LOB (cobolt -> goblin) 1. 첫 번째로 cat 명령어를 사용하여 goblin파일의 코드를 확인합니다. 2. 코드 분석1) char형 buffer[16]을 생성 2) gets함수는 scanf 함수와 동일한 기능을 하는 함수입니다.어떤 값을 입력받는 함수입니다.buffer에 입력값을 저장 3. gdb 를 사용하여 인자값들의 주솟값을 확인하기 위해 cp 명령어를 사용해 /tmp로 복사시켜줍니다. $ cp goblin /tmp/goblin ( gdb 권한 문제) (tmp위치에서 gdb goblin을 한 후) gdb를 이용해 스텍의 크기는 16 이라는 것을 알 수 있습니다.16byte+main함수의 ebp(4byte)=20byte 를 채운 후 return address (4.. 2016. 8. 1.
LOB level 2 (gremlin -> cobolt) LOB level 2 LOB (gremlin -> cobolt) 1. 첫 번째로 cat 명령어를 사용하여 cobolt파일의 코드를 확인합니다. 2. 코드 분석1. char형 buffer[16]을 생성2. 전달 받는 인자의 수가 2개 미만이면 프로그램 종료3.strcpy argv[1]을 buffer에 복사한다. 여기서 argv[0]은 프로그램을 실행시키는 명령어 입니다. 예를 들어 ./cobolt 여기서는 이것이 argv[0]이 되겠습니다. 3. gdb 를 사용하여 인자값들의 주솟값을 확인하기 위해 cp 명령어를 사용해 /tmp로 복사시켜줍니다. $ cp cobolt /tmp/cobolt ( gdb 권한 문제) (tmp위치에서 gdb cobolt을 한 후) gdb를 이용해 스텍의 크기는 16 이라는 것을 .. 2016. 8. 1.
LOB level1 (gate->gremlin) LOB level 1 LOB (gate -> gremlin) 1. 첫 번째로 cat 명령어를 사용하여 gremlin파일의 코드를 확인합니다. 2. 코드 분석1. char형 buffer[256]을 생성2. 전달 받는 인자의 수가 2개 미만이면 프로그램 종료3.strcpy argv[1]을 buffer에 복사한다. 여기서 argv[0]은 프로그램을 실행시키는 명령어 입니다. 예를 들어 ./gremlin gdb 를 사용하여 인자값들의 주솟값을 확인하기 위해 cp 명령어를 사용해tmp로 복사시켜줍니다.( gdb 권한 문제) gdb를 이용해 스텍의 크기는 0x100=256byte라는 것을 알 수 있습니다. b * 는 breakpoint를 말합니다.disas main에서 프로그램을 멈출 지점을 정해주는 것 입니다.(.. 2016. 7. 13.
FTZ level17 FTZ (Free Training Zone) level17 1. 환경 : window102. VM, Red Hat Linux 9.0, putty id : level17pw : king poetic 1. cat hint를 사용하여 코드를 확인합니다. 분석을 해보면 16번과 동일한 방법이지만 16번은 쉘코드를 실행시키는 함수가 있고 그 함수의 주솟값을 스텍에 넣어주어 권한을 얻었지만 17번은 환경변수를 만들어 그 주솟값을 넣어주면 됩니다. 16번과 동일한 스텍구조이기 때문에 56-16=40 까지의 값을 채우고 환경변수가 있는 주솟값을 넣어주면 프로그램이 실행 되고 call포인터에 환경변수의 주솟값이 저장되어 마지막 코드에서 call를 호출할 때 환경변수를 호출하게 되어 권한을 획득할 수 있습니다. 이런 방식.. 2016. 7. 13.
FTZ level16 FTZ (Free Training Zone) level16 1. 환경 : window102. VM, Red Hat Linux 9.0, putty id : level16pw : about to cause mass 1. Cat hint를 사용하여 코드를 본다. 2. 코드를 분석한다. Int crap 은 crap이라는 이름의 변수 [4byte]를 만든다. Void(*call)()=printit; call이라는 포인터 함수에 printit의 주소를 넣는다 Char [20] char의 변수명에 20의 버퍼 공간을 만든다. Feget 함수를 이용하여 입력받는다 (stdin은 키보드 같은 표준입력 장치에서 입력을 받는 것 ) Call() 함수를 호출 한다. 3. 분석 Call이라는 함수 호출 이전에 printit의 .. 2016. 7. 12.