안 쓰던 블로그
[KMPlayer 버그 헌팅하기] 2편. seed 파일 만들기 본문
이전글: https://foxtrotin.tistory.com/583
따라한 글: https://hackyboiz.github.io/2021/03/17/l0ch/bughunting-tutorials-part2/
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를 헥사값으로 적어 넣었다. (위의 이미지)
이렇게 하면 나중에 분석을 할 때 이 파일이 어디에 로드되었는지 찾기 편하다. 그래서 의미없는 값보다는 간단한 본인의 단어를 넣어주는 게 좋다.
'CTF > Bug Hunting' 카테고리의 다른 글
[KMPlayer 버그 헌팅하기] 3편. BFF Fuzzer로 Fuzzing하기. (BFF 퍼저 에러 해결) (0) | 2022.11.18 |
---|---|
[KMPlayer 버그 헌팅하기] 1편. 시작 (2) | 2022.11.18 |