"Fandu-버그 헌팅 튜토리얼" 문서 보면서 따라가보기
colean -window exploit guide
퍼징
- 손퍼징과 퍼저를 이용하는 방식의 두 가지가 존재함.
- 시드 파일 : 프로그램 크래시 발생시키는 원인 입력파일. 파일 형식별로 만들어져 있기도함.
- BFF 퍼저
- 뮤테이션 : 시드파일을 무작위로 바꿔가면서 진행
- 제네레이션 : 프로토콜과 프로그램 형식에 맞게 시드파일을 생성
프로그램 취약점을 찾기 위해선
- 프로그램의 구조에 대한 이해가 우선
- 시드로 사용될 파일 구조에 대한 이해도 필요
- 익스플로잇은 그 다음
BFF Fuzzer
기본적으로 환경이 세팅된 vmx를 제공함. 윈도우 버전도 있는거 같은데, 두가지를 다 시도해보자.
일단 윈도우 버전 - Windows Installer로 된거 다운받음. 환경 세팅에 필요한 구성요소들이 같이 설치된다. 수동으로 진행해야할게 꽤 되는 모양
BFF는 파이썬2.7 기반으로 동작된다. 3버전 이상인 경우는 실행시에 문법 오류가 발생하므로, 이런 경우는 파이썬 다운그레이드를 진행하거나 멀티버전 세팅을 해줘야함.
kmp 4.1.5.8 .dib 포맷 힙 오버플로우 취약점
- 구버전 kmp 4.1.5.8 에서 발생하는 취약점
- dib 포맷 24비트 사용
seed.dib 파일 생성 후 010 에디터로 까봄. 역시 좋은 도구를 써야되는가
dib 포맷은 전체적인 구조가 bmp 파일과 유사하기때문에 bmp의 템플릿을 그대로 가져옴.
첫 14바이트는 BITMAPFILEHEADER 구조체
//BITMAPFILEHEADER struct
typedef structtagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffbits;
}BITMAPFILEHEADER;
- bfType : 매직넘버. 2byte , 0x42 0x4d
- bfSize : 파일의 크기 : 4byte , 2239542→222c36
- bfReserved1 : 값이 예약되어있음. 0으로 설정됨. 2byte
- bfReserved2 : 값이 예약되어있음. 0으로 설정됨. 2byte
- bfOffbits : 비트맵 정보가 시작되는 오프셋. 4byte ,54→0x36
그 다음 40바이트는 BITMAPINFOHEADER 구조체. 파일의 실실적인 정보들을 담고 있음.
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
- biSize : 이 구조체의 크기를 담고있음. 현재 구조체 크기가 40인건 이 값을 그대로 따라가기 떄문 . 4byte, 40 → 0x28
- biWidth : 비트맵의 가로 픽셀수 , 4byte, 1152 → 0x0480
- biHeight : 비트맵의 새로 픽셀수 , 이 값이 음수인지 양수인지에 따라 아래-위 구성과 위-아래 구성이 바뀜. 아래-위 구성의 경우는 원점이 아래 왼쪽이 되고, 위-아래 구성은 원점이 위 왼쪽이다. 현재는 대부분이 양수로써 아래-위 구성을 사용함.
- biPlanes :플레인 개수를 나타냄. 1로 고정, 2bytes.
- biBitCount : 한 픽셀당 비트의갯수. 이 경우는 24이므로 한 픽셀이 2^24비트로이뤄진다. 2bytes.
- biCompression : 압축 방식 지정. 아래-위 구성일 때만 압축 가능함. 4bytes
- BI_RGB : 압축X, 0
- BI_RLE4 : 4bit 압축, 1
- BI_RLE8 : 8bit 압축, 2
- biSizeImage : 이미지의 크기를 바이트 단위로 나타냄. 압축하지 않는 BI_RGB 비트맵에서는 0 . 4bytes. 이 파일에서는 0이 아님. 2239488→0x222c00
이후 값들은 존재는 하나 실제로는 안쓰이는듯.
어느정도 분석이 되었으니, 비트맵 정보가 들어있는 부분을 변경하여 시드파일로 활용하여 퍼저를 돌린다.