- Today
- Total
Phantom
이번 단계는 기본적인 BOF문제에 스택가드가 있다 스택가드란 우리가 레벨12에서와 같은 방법으로 버퍼오버플로우 시켜서 리턴주소를 변조하게 되면 당연히 스택가드 영역도 함께 다른 값으로 변조될 수밖에 없다 그러므로 스택가드에 저장돼있는 값이 바뀌었다는 것은 버퍼 오버플로우 공격이 일어났다는 것을 의미 하고 스택가드의 변경이 확인되면 프로세스 실행을 차단해서 공격을 방어할 수 있다 그러므로 우리는 스택가드의 영역을 건들이지 않고 공격을 해야한다 지금 우리가 푸는 문제는 아주 쉽지만 소스 없이 프로그램만으로 알아내기란 무척 어렵다는 것을 알아두자 자 그럼 이제 문제를 풀어보자 우선 스택을 살펴보자 Buf 1024, I 4 바이트 소스에는 1028바이트가 사용됐다 그리고 스택 프레임을 보면 0x418, 1048..
자 이번문제부터 본격적인 BOF문제이다 소스코드를 보니 버퍼는 256바이트이며 gets함수를 사용한다 gets함수도 strcpy와 같이 길이를 재지 않고 복사를한다 아 우선 BOF에 대해 설명하자면 BOF란 Buffer OverFlow의 약자로 버퍼가 넘치는 데이터를 집어 넣어 쉘을 얻는 공격기법중 하나이다 시스템 해킹 공격기법중의 기초라고도 할 수 있으며 BOF의 공격기법 또한 다양하다 우리는 가장 기초적인 BOF공격기법과 환경변수를 이용한 공격기법, 그리고 RTL이라는 공격기법을 통해 쉘을 얻을 것이다 아 참고로 기본적인 RET SFP이런것들은 알고 있다고 가정하고 설명하겠다 우선 스택을 파악해보자 우선 스택에 0x108, 즉 264가 할당이 됐다 버퍼가 256바이트인데 264가 할당이 됐다, 더미가..
이번 난이도부터는 attackme라는 파일과 힌트에는 소스코드가 주어진다 취약점을 보고 공격하란 뜻인 것 같다 소스코드를 보니 취약점이 2개가 있다 Strcpy(str, argv[1])에 BOF취약점 하나와 Printf(str)에 포맷 스트링 취약점 먼저 첫번째 BOF취약점은 strcpy함수가 문자열의 길이를 검사하지 않고 복사하는 것 때문에 오버플로우 취약점이 생긴 것이다 그리고 두번째 포맷스트링은 원래 기본적인 printf함수 라면 printf("%d",x) 나 printf("%s",str)이렇게 아니면 printf("hello world"); 처럼 인자가 정해져 있어야 한다 그런데 소스에는 printf함수 안에 배열 이름이 적혀져 있다 잘은 모르겠지만 실행해보면 출력이 된다 그러나 이렇게 사용하게 ..