Hackerschool/Lord Of BOF 3

[*] cobolt - small buffer + stdin

처음 소스를 보시면 gremlin과 상당히 유사함을 볼수 있습니다. 16바이트 배열선언 배열에 문자열을 받고 출력. 하지만 파라미터값을 strcpy로 배열에 저장했던 gremlin과는 달리 이 문제는 gets를 통해서 프로그램 실행중 직접 입력을 받습니다. 그럼 내부를 분석해 볼게요. - 스택에 16바이트의 공간을 할당하고 - eax에 배열의 시작주소를 복사하여 - gets함수로 입력을 받고 - 출력 네. gremlin과 매우! 비슷합니다. 게다가 gremlin때와 같은 환경이기 때문에 libc의 주소도 같습니다. payload를 짤 필요도 없게 되는군요. 그럼 여기서 고민해야 될건 어떻게 gets함수에 stdin을 넘겨주냐가 되겠군요. 사실 BOF원정대를 풀기 시작하신분은 이미 다 알고계신 내용이겠지만..

[*] gremlin - small buffer

처음 파일목록을 보면 gate와 마찬가지로 프로그램과 소스파일이 있습니다. 소스를 확인해 보면 먼저 힌트를 보면 - small buffer라는 군요. 소스를 확인해 보니 배열 buffer의 크기가 16바이트로 매우 작다는것을 확인할수 있습니다. 다음은 소스를 분석해 보겠습니다. - 먼저 16바이트의 배열 buffer를 선언합니다. - 다음은 gate와 마찬가지로 파라미터의 갯수를 확인하고 - strcpy를 실행시키고 - buffer를 출력합니다. 이번에는 배열의 크기가 작기 때문에 쉘코드를 이용한 단순 BOF공격이 아닌 다른 방법을 생각해 봐야겠습니다. 작은 버퍼의 크기에서도 충분히 할수 있을만한 공격을 생각하다보니 저는 RTL방법을 사용하도록 하겠습니다. 그럼 이제 공격 방법을 설계해보도록 하겠습니다...

[*] gate - simple BOF

처음 gate로 접속을 하면 gremlin이라는 프로그램과 그 소스파일이 있는것을 확인할수 있습니다. 소스를 확인해 보면, 먼저 힌트를 분석해 볼게요.- simple BOF간단한 BOF공격을 하면 되나봅니다. 소스를 분석해 볼게요. - buffer라는 256바이트의 배열을 선언을 한다음 - 파라미터의 갯수가 1개이면 프로그램을 종료 - 2개 이상일시 2번째 파라미터를 buffer에 저장 - buffer를 출력 여기서 BOF공격을 시도하기 위해선 strcpy함수의 취약점을 공격하면 될거같습니다. * strcpy의 취약점 - 이 함수는 문자열의 길이를 제한하지 않아 입력받는 모든 문자열을 변수에 저장하게 됩니다. - 이는 선언된 변수의 크기보다 큰 문자열이 입력될 경우 Overflow현상을 일으키게 됩니다...