보안/포너블(pwnable)
-
보호되어 있는 글입니다.
[해킹:공격의 예술] 실습 (tinyweb exploit)보호되어 있는 글입니다.
2022.03.21 -
Out Of Boundary - 버퍼의 영역을 벗어나는 인덱스에 접근할 수 있는 취약점 * 예제 코드(칼리리눅스에서 실행) #include int main() { char buf[10]="abcdefghi"; int input_num=0; printf("Which Index : "); scanf("%d",&input_num); printf("Index : %d, Value : %c\n",input_num,buf[input_num]); return 0; } 위의 코드는 배열을 선언하고, 인덱스 값을 받아서 해당 인덱스에 저장된 값을 출력하는 코드이다. 0~8 사이의 인덱스가 입력되게 되면 정상적으로 값을 출력하게 되지만, 8을 초과하는 값을 입력하게 되었을 경우 사용자가 입력하는 인덱스 값을 검증하는 코드..
Out Of BoundaryOut Of Boundary - 버퍼의 영역을 벗어나는 인덱스에 접근할 수 있는 취약점 * 예제 코드(칼리리눅스에서 실행) #include int main() { char buf[10]="abcdefghi"; int input_num=0; printf("Which Index : "); scanf("%d",&input_num); printf("Index : %d, Value : %c\n",input_num,buf[input_num]); return 0; } 위의 코드는 배열을 선언하고, 인덱스 값을 받아서 해당 인덱스에 저장된 값을 출력하는 코드이다. 0~8 사이의 인덱스가 입력되게 되면 정상적으로 값을 출력하게 되지만, 8을 초과하는 값을 입력하게 되었을 경우 사용자가 입력하는 인덱스 값을 검증하는 코드..
2021.08.06 -
off-by-one 이란? · 문자열의 범위 1 byte 차이로 인해 발생하는 취약점 · 1차이로 인해 SFP(Stack Frame Pointer)의 1바이트가 NULL(\x00)으로 변조되게 되고 이로 인해 기존의 SFP의 주소 가 아닌 전혀 다른 주소로 리턴하게 된다. 문자열의 마지막에는 반드시 NULL 값이 들어간다. 그렇기 때문에 선언된 배열에 문자열을 저장할 때에는 반드시 NULL 값까지 고려해야 한다. 하지만 정해진 공간을 모두 문자열로 채우면, NULL 값은 영역을 넘어 SFP를 변조하게 된다. 그렇다면 이런 변화가 어떻게 문제가 될 것인가? 이를 이해하기 위해서는 함수 에필로그에 대해 알 필요가 있다. 함수를 디버깅해보면 함수의 마지막에 leave,ret 명령이 있으며 이는 ma..
off-by-oneoff-by-one 이란? · 문자열의 범위 1 byte 차이로 인해 발생하는 취약점 · 1차이로 인해 SFP(Stack Frame Pointer)의 1바이트가 NULL(\x00)으로 변조되게 되고 이로 인해 기존의 SFP의 주소 가 아닌 전혀 다른 주소로 리턴하게 된다. 문자열의 마지막에는 반드시 NULL 값이 들어간다. 그렇기 때문에 선언된 배열에 문자열을 저장할 때에는 반드시 NULL 값까지 고려해야 한다. 하지만 정해진 공간을 모두 문자열로 채우면, NULL 값은 영역을 넘어 SFP를 변조하게 된다. 그렇다면 이런 변화가 어떻게 문제가 될 것인가? 이를 이해하기 위해서는 함수 에필로그에 대해 알 필요가 있다. 함수를 디버깅해보면 함수의 마지막에 leave,ret 명령이 있으며 이는 ma..
2021.07.28 -
· 포맷 스트링 - 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식 - 프로그래밍 언어에서 사용하는 서식 문자 · 포맷 스트링 취약점 - C언어의 printf()와 같은 함수에서 사용자의 입력에 대한 출력을 수행할 때 발생할 수 있는 취약점이다. ** 실행되는 코드들은 칼리 리눅스에서 실행되었음. * 설명을 위한 예제 코드 #include #include int main(int argc,char* argv[]) { char a[100]; strcpy(a,argv[1]); printf("%s\n",a); printf(a); return 0; } * 출력 문자열만 입력되었을 때는 두 printf 에서 모두 같은 출력을 수행했지만, 입력 문자열에 포맷 스트링이 입력되었을 경우,..
포맷 스트링 취약점(Format String Vulnerability)· 포맷 스트링 - 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식 - 프로그래밍 언어에서 사용하는 서식 문자 · 포맷 스트링 취약점 - C언어의 printf()와 같은 함수에서 사용자의 입력에 대한 출력을 수행할 때 발생할 수 있는 취약점이다. ** 실행되는 코드들은 칼리 리눅스에서 실행되었음. * 설명을 위한 예제 코드 #include #include int main(int argc,char* argv[]) { char a[100]; strcpy(a,argv[1]); printf("%s\n",a); printf(a); return 0; } * 출력 문자열만 입력되었을 때는 두 printf 에서 모두 같은 출력을 수행했지만, 입력 문자열에 포맷 스트링이 입력되었을 경우,..
2021.07.20