본문 바로가기

LOB 3번 (cobolt → goblin) cat goblin.cgets 함수는 입력받는 크기에 제한이 없다. 메모리구조 LOW | buffer(16byte) | SFP(4byte) | RET(4byte) | HIGH gets 함수가 끝나는 지점까지 브레이크포인트 SFP, RET, buffer의 주소 찾기0xbffffb29 buffer 시작주소0xbffffb38 SFP 시작주소0xbffffb3d RET 시작주소0xbffffb41 D가 전달해줄 쉘코드 시작주소 공격 성공 더보기
LOB 2번 (gremlin → cobolt) cat cobolt.c1번을 환경변수를 이용한 방법을 통해 풀었으니 2번에서는 argv로 받는 문자열 개수에 제한이 없다는 것을 이용하여 argv[2]를 인자로 전달한 후에 argv[2]의 주소를 찾아 RET의 주소를 덮는 방법을 이용한다. main+3에서 0x10의 메모리를 확보한다. argv인자는 프로그램 시작과 동시에 전달이 된다. 이렇게 argv[2]의 시작주소를 찾으면 0xbffffb0이므로 넉넉히 0xbffffbb8로 공격한다. 더보기
LOB 1번 (gate → gremlin) vi gremlin.c BOF가 가능한 대표적인 함수 strcpy disas main 어떻게 문제를 풀어갈까? 0x8048433 : sub $0x100,%esp → 256byte메모리구조 LOW | buffer(256byte) | SFP(4byte) | RET(4byte) | HIGHT 환경변수에 쉘을 등록 → 환경변수의 주소를 불러옴 → gremlin 실행 시 글자를 260byte 만큼 넣어줌 strcpy 함수에 들어갈 두 인수를 불러오고 함수 strcpy함수 다음에 브레이크포인트? → 브레이크포인트 건 곳 전까지 실행 'hack'이란 이름의 환경변수를 만들 것인데 환경변수의 주소를 찾는 코드 환경변수 'hack'을 만들고 확인 후 주소를 찾음 계획대로라면 gremlin으로 넘어가야 되는데 왜 argv.. 더보기