
전체 체인 Chrome 71.0.3578.98 익스플로잇
https://googleprojectzero.blogspot.com/2019/04/virtually-unlimited-memory-escaping.html
익스플로잇 CVE-2019-7582 및 CVE-2019-13768/P0 issue 1755
Windows 10 1909+에서 작동하도록 원본 PoC를 업데이트해야 했습니다.
또한 원본 PoC의 신뢰성이 ~0%였던 특정 대상 머신에서 신뢰성을 높여야 했습니다(다른 대상에서는 ~100%였음).
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python2 get-pip.py
pip2 install cherrypy
python2 server.py
해제된 객체의 대체가 발생하지 않아 할당된 0x140 크기 블록 수를 0x88에서 0x8000으로 늘렸습니다.
0x40404040000에서의 페이지 할당이 발생하지 않아 할당된 페이지 수를 0xc88에서 2*0xc88로 늘렸습니다.
ROP 가젯 mov rcx, rax ; mov rax, rcx ; add rsp, 28h ; ret은 Windows 1909의 ntdll.dll에 더 이상 존재하지 않습니다. 대신 shell32.dll의 ROP 가젯 mov rcx, rax ; test rcx, rcx ; setne al ; ret 및 mov rax, rcx ; add rsp, 0x28 ; ret이 사용됩니다.
pipe.producer.close()가 스프레이된 0x140 크기 블록을 해제하는 원인이 되었습니다. 메모리가 너무 빨리 정리되고 있었습니다. 따라서 함수 호출은 익스플로잇이 완료된 후까지 지연되었습니다.
셸코드는 임의의 명령어(셸코드 길이 최대 0x200)를 사용할 수 있도록 변경되었습니다. 셸코드를 편집하려면 shellcode.asm을 수정하고 yasm -f bin -o shellcode.bin shellcode.asm을 실행하거나, 명령줄 문자열을 shellcode.bin에 hexedit하십시오. 현재 페이로드 명령어는 calc입니다.