오늘은 언더플로우에 대해 알아보자
오버플로우와 같은 원리로 발생하는 취약점인데
한 변수가 담을 수 있는 수의 크기를 넘어서면 모든 비트가 초기화 되면서 최소값으로 다시 시작하는 것이 오버 플로우의 개념이였다
예시:
0111111
라는 8비트 길이의 숫자가 있다 여기서 첫 번째 비트가 0인것은 음수 양수를 구분하기 위한 비트이다(0은 양수 1은 음수)
그렇기 때문에 이 상태에서 1를 더하면
10000000
이 되면서 음수 양수를 구분하는 비트가 1이 되며 모든 비트가 0이 되어 버린다
근데 음수 비트에는 모든 것이 반대이기 때문에 음수 비트에서 0은 1을 뜻한다
즉, 이 숫자는 실제로 0이 아닌 -128인 것이다!!
그러므로 오버플로우가 일어나면 변수가 담을 수 있는 제일 작은 값 부터 시작한다.
그러면 같은 원리인 언더플로우를 설명 하자면
10000000
라는 음수형 비트가 있는 상태에서 똑같이 1을 더하면
(음수 비트기 때문에 음수 비트에 1을 더하는 것은 실제 비트에 -1를 하는 것과 같다)
01111111
이 되므로 양수의 최대값이 되어 언더플로우가 발생하게 된다.
이 코드는 언더플로우의 예시이다.
#include "stdio.h"
#include <limits.h>
int main() {
char a = CHAR_MIN;
a -= 1;
printf("%d", a);
return 0;
}
'해킹 공격' 카테고리의 다른 글
[NOOBHACK] 취약한 도커 서버 분석 (CVE 분석하는 방법) (0) | 2023.09.20 |
---|---|
[NOOBHACK] 윈도우, 리눅스 패킷 캡쳐 코드 (2) | 2023.09.19 |
[NOOBHACK] Fream Pointer Overflow 취약점 (FPO) (0) | 2023.02.08 |
[NOOBHACK] 버퍼 오버플로우 BOF(buffer overflow) (0) | 2022.08.18 |
[NOOBHACK] XSS 공격 기법 (0) | 2022.08.16 |