리버싱 썸네일형 리스트형 범용 쉘코드(Universal Shellcode) (2) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 이전 포스팅범용 쉘코드(Universal Shellcode) (1) 보러가기 이전 포스팅에서는 범용 쉘코드의 필요성에 대하여 포스팅하였다. 그렇다면 ASLR기술이 적용된 시스템에서는 어떠한 과정을 통해 실질적으로 우리가 필요로 하는 함수를 구할 수 있을지 학습하여 보겠다. 프로세스에서 함수의 주소값을 구하기 위해서는 함수가 저장되어져있는 dll의 시작 주소값과 dll 시작 주소부터 함수까지의 offset을 알아야한다. ① dll의 시작 주소값 구하기 대체적인 주소값 계산의 흐름은 위와 같다. FS레지스터에는 TEB의 주소가 저장되어 있다. TEB란 현재 실행되고 있는 쓰레드에 대한 정보를 담고 있는 .. 더보기 범용 쉘코드(Universal Shellcode) (1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 현 포스팅[범용 쉘코드(Universal Shellcode)]을 읽기에 앞서 제시된 포스팅을 읽고 오시는 것을 추천드립니다. 이전 포스팅쉘코드(Shellcode) 기초(1)쉘코드(Shellcode) 기초(2) 범용 쉘코드(Universal Shellcode)의 필요성 이전 포스팅[ 쉘코드(Shellcode) 기초(1) ]에서 작성한 쉘코드를 컴퓨터를 재부팅한 후 실행하면 어떻게 될까? 다음과 같은 에러 메세지를 확인할 수 있다. 그렇다면 다음과 같이 재부팅전에 정상작동하던 쉘코드가 어떠한 부분에서 문제가 발생하며 어떠한 이유로 정상적으로 실행이 되지 않는 것인지 짚고 넘어가야 한다. 위의 작성한 쉘코.. 더보기 쉘코드(Shellcode) 기초(2) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 이전 포스팅쉘코드(Shellcode) 기초(1) 보러가기 쉘코드(Shellcode) 기초(1)에서의 문제점 이전 포스팅[쉘코드(Shellcode) 기초(1)]에서 작성한 쉘 바이트 코드에서는 널바이트('0x00')을 포함한다는 문제점을 지니고 있었다. 바이트 코드에서 널바이트('0x00')를 포함할 시에 문자열 복사 계열 취약점에서 발생하는 부분에서는 바이트 코드로 사용할 수 없다는 문제점(범용성)과 이로인해 널바이트 코드 이후에 쉘 바이트 코드를 복사하지않아 정상적으로 작동하지 않는다는 문제점(신뢰성)을 지니고 있다. 결론적으로 공격자(해커)는 쉘바이트 코드에서 널바이트만을 제거하여 같은 동작을 하.. 더보기 쉘코드(Shellcode) 기초(1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 쉘코드(Shellcode) 쉘코드란 보안 취약점이 있는(실행흐름을 악의적으로 조작할 수 있는) 프로그램에서 실행 시킬 실질적인 실행 코드를 말한다.예를들어 이는 포트를 여는 것 일 수도 있고, 악의적인 서버에 본인의 개인정보 파일을 업로드하게 하는 것 일 수 도있으며,해커가 원하는 실질적인 모든 행동을 수행하는 코드를 말한다. 보안 취약점이 있는 프로그램의 공격에 성공하여 실행흐름을 조작하여 공격자가 원하는 특정주소를 실행시킬 수 있는 데 이때 CPU는 흐름이 바뀐 메모리에서 직접 코드를 읽기에 CPU가 해석할 수 있는 기계어 코드로 이뤄져야한다. 좋은 쉘코드의 조건신뢰성 - 공격자가 원하는 행위를 .. 더보기 메모리의 동적 할당 ◇ 메모리의 동적 할당 함수의 반환형은 void형 포인터고 인자는 정수가 들어간다. 예시로 int main(void){void * ptr1 = malloc(4); // 4바이트가 힙 영역에 할당void * ptr2 = malloc(12); // 12바이트가 힙 영역에 할당 . . . . free(ptr1); // ptr1이 가리키는 4바이트 메모리 공간 해제free(ptr2); // ptr2이 가리키는 4바이트 메모리 공간 해제 . . . . } 다음과 같은 소스코드에서 malloc함수의 활용을 확인해보자. malloc(4);malloc(12); 함수는 힙 영역위의 메모리 공간에 4바이트 만큼의 공간을 확보하고 확보된 메모리 공간의 주소값을 반환한다. 힙 영역위의 메모리 공간에 12바이트 만큼의 공간을 .. 더보기 컴퓨터 프로그래밍 설계 과제#3_HW03 #include #include #include int main(void) { float f_num = 0.0f; int arr[4]; int binary_arr[32] = {0,}; //배열을 0으로 초기화한다. int test_num = 0; unsigned char *ucp; int iCnt; int i=0; int j=0; while(1) { for(i=0 ; i 더보기 컴퓨터 프로그래밍 설계 과제#3_HW02 #include #include int main(void){ int sign = 0; double decimal_num = 0.0; double abs_decimal_num = 0.0; while(1){ //printf("Enter a fixed-point decimal number (0 for exit) : "); scanf("%lf", &decimal_num); fflush(stdin); //버퍼 비우기 sign = (decimal_num >= 0.0 ? 0 : 1); //0이면 양수, 1이면 음수 abs_decimal_num = (decimal_num > 0.0 ? decimal_num : -decimal_num); if(decimal_num==0.0){ break; } if( abs_decimal.. 더보기 컴퓨터 프로그래밍 설계 과제#3_HW01 #include #include #include double getAngle(int hour, int min); void getStraightTime(int hour); int main(void){ int hour = 0, minute = 0; while(1){ printf("Enter two integer numbers (hour[0~11] & minute[0~59]): "); scanf("%d %d", &hour, &minute); fflush(stdin); //버퍼 비우기 if( hour==0 && minute==0){ break; } if( !((0 더보기 이전 1 2 3 다음