안 쓰던 블로그

[KMPlayer 버그 헌팅하기] 2편. seed 파일 만들기 본문

CTF/Bug Hunting

[KMPlayer 버그 헌팅하기] 2편. seed 파일 만들기

proqk 2022. 11. 18. 16:20
반응형

이전글:  https://foxtrotin.tistory.com/583

 

[KMPlayer 버그 헌팅하기] 1편. 시작

K-Shield 주니어 9기 단기를 시작한지 벌써 한 달이 지나가고 있다. 그 사이에 첫 번째 지원금을 받았고, 중간 평가도 치뤘다. 월~금 매일 아침 9시부터 18시까지 하기 때문에, 대학생의 경우 수업 시

foxtrotin.tistory.com

 

따라한 글: https://hackyboiz.github.io/2021/03/17/l0ch/bughunting-tutorials-part2/

 

hackyboiz

hack & life

hackyboiz.github.io

 


KMPlayer는 동영상 프로그램이라고 알려져 있지만 사진, 동영상, 음악까지 플레이할 수 있다.

그 중 사진 포맷 중 하나인 .dib 포맷에서 발생한 힙 오버플로우 취약점을 hackboiz 블로그 글쓴 분이 제보했다고 한다.

 

분석 연습을 이 프로그램으로 한 이유는 다음과 같다.

1. dib 포맷은 무압축 비트맵 이미지 포맷이므로, 비트맵 정보가 가공되지 않고 원본 그대로 저장되어 분석이 편하다.

2. 분석할 코드 커버리지가 작고 취약점이 단순하다.

3. KMPlayer는 옛날 버전도 쉽게 다운 받을 수 있다.

 

일단 취약점을 가진 KMPlayer 4.1.5.8 버전을 구글링해서 다운 받았다.

 

그리고 seed 파일로 dib 포맷의 파일을 만든다.

그림판을 켜서 검은색을 칠하고 24비트 비트맵 파일로 저장했다. 

24비트인 이유는 RGB를 표현하기 위해서 한 픽셀마다 3바이트씩 사용하기 때문이다.

이렇게 만든 이미지를 hxd로 불러와서 파일의 구조를 본다.

 

앞쪽 부분이 파일의 헤더 정보, 뒤부터 비트맵 정보가 있다.

앞쪽의 헤더 부분을 더 자세히 보면 두 가지 구조체로 이루어져 있다. 이렇게 헤더에 대해서 알고 리버싱을 진행하는 것이 좋다. 해당 부분이 어떤 역할을 하는지, 그리고 그것을 어떻게 익스플로잇에 적용할 수 있을지를 구상할 수 있기 때문이다.

 

아래 구조체 이미지는 https://www.soulfree.net/186 이 블로그에서 가져왔다.

비트맵 헤더가 맨 앞에 있고(42 4d), 파일의 전체 사이즈, 마지막에는 비트맵의 정보가 시작된다는 오프셋이 있다.

 

그 다음으로는 이미지의 가로 및 세로 길이, 해상도, 압축 여부 등등이 기록되어 있다.

익스플로잇에는 딱히 쓰지 않는다고 한다.

 

헤더의 정보를 보았으니 이제 만든 이미지를 가지고 Fuzzer에 돌린다.

그 전에 분석을 편하기 전에 임의의 데이터를 넣는다. 

내 경우에는 내 닉네임인 PQK를 헥사값으로 적어 넣었다. (위의 이미지)

이렇게 하면 나중에 분석을 할 때 이 파일이 어디에 로드되었는지 찾기 편하다. 그래서 의미없는 값보다는 간단한 본인의 단어를 넣어주는 게 좋다.

 

반응형
Comments