GDB를 사용하여 보안 클래스에 버퍼 오버 플로우가 발생하는 것을 배우고 있습니다.입력을 검사하는 gdb의 버퍼를 끌 수있는 방법이 있습니까?
sh myFile.txt | ./myProgram
가 지금은 GDB를 사용하여 무단 기능을 검사 할 : 나는 성공적으로이 같은 입력으로 공급하면 프로그램이 버퍼 오버 플로우를 작성하여 권한이없는 기능으로 이동됩니다 입력 파일이 있습니다. 그러나 어느 한쪽을 사용하여 GDB에 myFile을 입력 할 때 tty command or using < GDB는 20 바이트 버퍼를 채우기 위해 입력의 중간 20 바이트 만 가져옵니다. GDB가 입력 버퍼 크기를 "확인"하고있는 것처럼 보입니다.
- 무엇 GDB를하고있다인가요?
- 그렇다면 해제 할 방법이 있습니까?
C 코드는 다음과 같습니다
char one[20];
char two[20];
printf("..."); fflush(stdout);
gets(one); //only takes 20 bytes from the middle of printf "morethan20bytes..." from input file
printf("..."); fflush(stdout);
gets(two); //only takes 20 bytes from the middle of printf "morethan20bytes..." from input file
어떻게 그 행동을 결정합니까? –
@OliCharlesworth x 명령을 사용하여 버퍼 1과 2의 비트 수준 내용을 검사합니다. 나는 그 다음 16 진수를 ascii로 변환하고 그것이 입력의 중간에서 20 개의 문자만을 취하는 것이라고 말할 수있다. – bernie2436
메모리 내용을 덮어 썼을 수도 있지만, GDB는 배열 크기를 알고 있기 때문에 표시 할 것입니다. 범위를 벗어난 인덱스를 사용하여 배열 외부를 검사하거나 포인터로 캐스트하고 오프셋을 추가 할 수 있습니다. –