프로세스 공간에 코드를 어떻게 삽입합니까?
이것은 매우 진술/질문입니다. 프로세스 공간에서 코드의 '악용 가능한'영역이 필요합니다. 예를 들어, Windows는 현재 가능한 경우 strncpy()에 대부분의 strcpy()를 다시 쓰고 있습니다. 나는 strcpy를를 사용하는 코드의 모든 영역이 성공적를 strncpy을 통해 변경 될 수 없습니다 때문에
가능하면 말한다. 왜? 그렇기 때문에 아래의 차이점에서이 핵심의 @ ~;
strcpy($buffer, $copied);
또는
strncpy($buffer, $copied, sizeof($copied));
이 실제 시나리오에서 구현하기 strncpy
그렇게 어려운 만드는 것입니다. 대부분의 strncpy
작업에는 '마법 번호'가 설치되어야합니다 (sizeof() 연산자는이 마법 번호를 만듭니다)
코더의 코드 값은 char buffer[1024];
과 같은 엄격한 준수를 사용하여 가르칩니다. 코딩 연습.
비교에서 - buffer[]="";
또는 buffer[1024]="";
을 사용하는 것이 착취의 핵심입니다.
int size = 1024;
char buffer[size];
char copied[size];
strncpy(buffer,copied, size);
이 오버 플로우를 중지하지만 악용 지역을 소개합니다 : 예를 들어 우리는 후자에이 코드를 변경하는 경우에는, 우리는 또 다른 ... 시스템에
char * buffer;
char * copied;
strcpy(buffer, copied);//overflow this right here...
또는이 도입 악용 얻을 1024 블록의 코드/데이터로 예측 가능하고 구조화 된 크기로 인해 RAM에 저장됩니다.
따라서 원래의 포스터는 프로그램의 주소 공간에서 strcpy를 찾으면 strcpy가있는 경우 프로그램을 악용 가능하게 만듭니다.
strncpy
이상의 프로그래머가 strcpy를 선호하는 데는 여러 가지 이유가 있습니다. 매직 번호, 변수 입력/출력 데이터의 크기 ... 프로그래밍 스타일 ... 등 ... 내 코드에서 나 자신을 어떻게 찾을 수 있습니까
나는 알고 있습니다. 힙 오버 플로우의 경우에 셸 코드 주소를 찾기 위해 예를 들어 주시겠습니까? – Michael
아니요, 저는 바이러스를 만드는 습관이 아니므로 신경 쓰지 않았습니다. –
온라인으로 나열된 방법이 많이 있습니다. 을 예로들 수 있습니다. 때로는 전자 메일이가는 위치를 정확하게 제어 할 수 없기 때문에 많은 사람들이 메모리를 무작위로 전환 할 때 냅스터 썰매를 아래쪽으로 쳤을 것이라는 희망으로 많은 양의 메모리를 덮어 쓰는 "썰매"를 사용합니다. 익스플로잇. 때로 힙 공격 (오버플로뿐만 아니라)은 임의의 4 바이트를 쓸 수 있습니다. 스택 주소를 알고 있으면 반환 된 eip를 덮어 쓸 수 있습니다. 힙 공격은 버퍼 오버 플로우에 비해 익스플로잇과 관련이 있습니다. – Dan