분류 전체보기 (1196) 썸네일형 리스트형 [systemhacking] ELF 동적 디버깅 보호되어 있는 글입니다. [systemhacking] logical bugs race condition #include #include #include #include #include int len; void giveshell() { system("/bin/sh"); } void * t_function() { int i = 0; while (i "); scanf(".. [systemhacking] Uninitialized value #include class S { int c; public: int f(int i) const { return i + c; } }; int f() { S s; return s.f(10); } int main(void) { int val = f(); std::cout 0){ this->mem = new char[mem_size]; } } char *mem; int mem_size; }; int main(void){ S s(-1); std::cout [systemhacking] Buffer overflow c++ string은 cin의 입력사이즈에 맞게 메모리 할당 -> 버퍼오버플로우 발생 x #include #include #include void f(const std::vector &src) { std::vector dest(5); std::copy(src.begin(), src.end(), dest.begin()); } int main(void){ int size = 0;; std::vector v; std::cin >> size; v.resize(size); v.assign(size, 0x41414141); f(v); } 5 size보다 큰 src size가 입력되면 버퍼 오버플로우 발생. #include #include #include void f(const std::vector &src) { std::.. [systemhacking] Integer Issues 32비트 운영체제에서 size_t는 unsigned int long은 int 64비트 운영체제에서 size_t는 unsigned long long은 long long size_t는 객체의 최대 사이즈이기 때문에 항상 unsigned 32bit 에서는 int가 최대 자료형, 64bit에서는 long long이 최대 묵시적 형 변환에 따른 취약점 대입연산 : 작은 정수 자료형에 큰 정수를 저장하는 경우, 작은 정수의 크기에 맞춰서 상위 바이트가 소멸됨. 정수승격 : char short 같은 자료형이 연산될 때 발생 . char형과 char형의 덧셈의 경우 1byte가 아닌 4byte의 결과 출력 컴퓨터가 int형을 기반으로 연산하기 때문에 발생. 피연산자가 불일치할 경우 형 변환 : int와 double 더.. [systemhacking] Memory corruption 해제된 메모리에 접근하거나 메모리를 할당하고 해제하지 않아 메모리 릭이 발생하는 경우 #include #include int main(void) { char* a = (char *)malloc(100); char *b = (char *)malloc(100); memset(a, 0, 100); strcpy(a, "Hello World!"); memset(b, 0, 100); strcpy(b, "Hello Pwnable!"); printf("%s\n", a); printf("%s\n", b); free(a); free(b); free(a); } : a 두번 해제 #include #include #include int main(void) { char *a = (char *)malloc(100); memset(.. [systemhacking] format string bug format string을 인자로 받는 함수 printf sprintf / snprintf fprintf vprintf / vfprintf vsprintf / vsnprintf 위와 같은 함수에 포맷 스트링을 주면 의도치 않은 값이 출력되거나 저장됨. 출력 #include int main(void) { char buf[100] = {0, }; read(0, buf, 100); printf(buf); } $ ./fsb-1 %x %d bf3977c0 100 $ 파일 저장 #include #include int main(void) { FILE *fp = fopen("log.txt", "w"); char buf[100] = {0, }; read(0, buf, 100-1); fprintf(fp, "BUFFER-L.. [systemhacking] Off-by-one Off-by-one 취약점은 경계 검사에서 하나의 오차가 있을 때 발생하는 취약점. 버퍼의 경계 계산 혹은 반복문의 횟수 계산 시 < 대신 이전 1 2 3 4 5 6 7 8 ··· 150 다음