NULL off by one 발생으로 취약점이 발생하는 것을 이용한 공격 기법이다.
한 바이트의 NULL을 추가로 입력해 인접한 청크 size의 하위 1바이트를 덮을 수 있을 때 다른 기법과 연계해서 공격하는 기법이다.
NULL off by one: 한 바이트의 NULL을 추가로 입력하는 것.
예제1
//gcc -o null1 null1.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int readdata(char *buf, int len){
read(0, buf, len);
*(char*)(buf + len) = '\x00';
}
int main(){
char *buf1;
char *buf2;
buf1 = malloc(0x28);
buf2 = malloc(0xf0);
readdata(buf1, 0x28);
return 0;
}
readdata 함수를 통해 첫 번째 청크에 입력받는다.
첫 번째 힙 청크의 크기는 0x28이므로 인접한 다음 청크의 size와 인접하다.
readdata 함수에서 memory leak을 방지하기 위해 입력된 데이터 뒤에 NULL 바이트를 추가한다.
(1) 두 청크 할당된 후
(2) 첫 번째 청크 데이터에 0x28 바이트 입력 시 다음 청크의 size인 0x101을 0x100으로 변조할 수 있다.
prev_inuse 비트를 조작할 수 있으면 unsafe unlink와 같은 기법과 연계해서 공격할 수 있다.
House of Force (0) | 2020.06.12 |
---|---|
Unsafe Unlink (0) | 2020.06.12 |
Unsorted bin attack (0) | 2020.06.11 |
Tcache House of Spirit (0) | 2020.06.11 |
fastbin dup (0) | 2020.06.10 |