
온프레미스 Exchange 서버의 EWS 엔드포인트를 위한 NTLM 릴레이 도구입니다. 해커에게 OWA를 제공합니다.
버전 1.0.0. 이 도구는 공격자가 SMB 또는 HTTP 기반 NTLM 릴레이 공격을 수행하여 온프레미스 Microsoft Exchange 서버의 EWS 엔드포인트를 대상으로 피해자의 사서함을 손상시킬 수 있는 능력을 입증하는 PoC입니다. 이 도구는 공격자에게 OWA와 유사한 인터페이스를 제공하며, 사용자의 사서함과 연락처에 접근할 수 있습니다.
Defcon26에서 공개되었습니다. 도구의 배경, 악용되는 핵심 문제, 그리고 녹화된 데모는 여기에서 확인하세요: https://blog.quickbreach.io/one-click-to-owa/
pip install -r requirements.txt
./exchangeRelayx.py -t https://mail.quickbreach.com
애플리케이션은 owaServer, 릴레이 서버, 그리고 각각의 새로운 릴레이 연결마다 생성되는 HTTPAttack 클라이언트(exchangePlugin)로 나뉩니다.
owaServer는 기본적으로 http://127.0.0.1:8000에서 수신 대기하는 Flask 기반 웹 서버입니다. 이 웹 서버는 정적 HTML 파일(index.html, OWA.html, ComposeEmail.html)을 제공하며, 그 외 모든 것은 owaServer 엔드포인트에 대한 EWS.js의 JSON 요청을 통해 로드됩니다. owaServer에 요청이 들어오면, owaServer는 적절한 EWS 호출을 생성하여 owaServer와 exchangePlugin 모두가 사용하는 공유 메모리 딕셔너리에 입력합니다. exchangePlugin이 요청을 수신하면 Exchange로 전송한 후 동일한 공유 메모리 딕셔너리에 응답을 로드합니다. 마지막으로, owaServer가 딕셔너리에서 응답을 받으면 데이터를 파싱하고 결과를 반환합니다. 파일 다운로드 기능이 표준 웹 사이트와 다르다는 것을 알 수 있을 텐데, 이는 앱의 비동기 특성 때문입니다.
릴레이 서버는 표준 impacket HTTP 및 SMB 기반 NTLM 릴레이 서버이며, 각각의 새로운 릴레이 연결마다 새로운 exchangePlugin 인스턴스를 생성합니다.
exchangePlugin은 간단히 말해 EWS 서버와 요청을 주고받는 실제 HTTPClient입니다. 모든 exchangePlugin은 초기화 시 동일한 공유 메모리 딕셔너리를 전달받으며, 이를 프로세스 간 통신에 사용합니다. 이를 통해 owaServer의 요청을 적절한 사용자의 릴레이 연결로 다시 전달할 수 있어, 다중 피해자 관리에 더 큰 유연성을 제공합니다.
이 도구는 Server 2012 R2 시스템의 Exchange 2013을 대상으로 구축 및 테스트되었으므로, 다른 환경에서는 조정이 필요할 것으로 예상됩니다. 도구의 다음 몇 번의 반복을 위한 몇 가지 목표는 다음과 같습니다.
풀 리퀘스트는 크게 환영합니다.