본문 바로가기

원데이 취약점 분석

KMPlayer 원데이 취약점 분석 (1)

원데이 취약점 분석을 해보고 싶어서 관련 글을 찾던 중 흥미로운 글을 발견했습니다.

 

https://hackyboiz.github.io/2021/03/17/l0ch/bughunting-tutorials-part2/#%EB%B2%84%EA%B7%B8%EB%B0%94%EC%9A%B4%ED%8B%B0-KMPlayer

 

hackyboiz

hack & life

hackyboiz.github.io

 

정말 딱 제가 원하던 형식이라서 바로 시도해보았습니다. 저는 이때까지 취약점이 존재하는 버전을 다운받기가 힘들어서 버그헌팅 실습을 못하고 있었는데, 이번 기회로 한 번 해볼 수 있어서 매우 좋았습니다.

 

아래 글은 위 글을 참고해서 작성된 내용입니다.

 

먼저 KMPlayer로 dib 파일을 실행할 수 있기 때문에 그림판을 이용해서 dib 파일을 생성해준 뒤 hxd로 이를 열어줍니다.

이런 식으로 헤더와 비트맵 정보가 표시되는 것을 확인할 수 있습니다.

일단 헤더 구조를 정확하게 파악하는 것이 익스플로잇을 할 때 도움이 되기 때문에 아래 사이트를 통해서 파악해주었습니다.

https://www.soulfree.net/186

 

DIB구조

비트맵 이미지에는 두가지 종류가 있는데 DDB와 DIB가 바로 그것입니다. DDB(Device Dependent Bitmap)은 이름을 봐도 알수 있드시 장치에 의존하여 비트맵을 출력하는 방식입니다. DDB는 원래 윈도우 3.0

www.soulfree.net

typedef struct tagBITMAPFILEHEADER
{
    WORD    bfType;
    DWORD  bfsize;
    WORD    bfReserved1;
    WORD    bfReserved2;
    DWORD  bfOffBits;
} BITMAPFILEHEADER;

여기서 중요하게 보아야 할 부분은 bfType, bfsize, bfOffBits 입니다.

  • bfType - Bitmap 파일의 형식이 기록되는 부분으로, 비트맵 파일은 반드시 bfType의 값이 BM(0x42, 0x4d)이어야 합니다.
  • bfSize - 비트맵 파일의 크기를 바이트 단위로 나타냅니다.
  • bfOffBits - 실제 이미지 비트의 Offset을 의미합니다.

이 정보들을 바탕으로 위의 파일을 다시 분석해보겠습니다.

그리고 실제로 비트맵 정보가 오프셋 값인 0x36부터 시작되는 것을 확인할 수 있습니다.

 

또한, 크래시 정보를 쉽게 확인하기 위해서 비트맵 정보 앞 부분을 제 닉네임으로 변경하였습니다.

 

이제 fuzzer로 퍼징을 돌려주겠습니다. fuzzer는 bff를 사용하였고, 설치 과정은 인터넷에 많으니 생략하겠습니다.

 

 

이렇게 퍼징을 계속 진행하다보면 어느새 폴더에 이런 식으로 데이터들이 쌓이는 것을 확인할 수 있습니다.