Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dhcpoptinj — DHCP 옵션 인젝터 | Kitploit
도구/GitHubGitHub/misje/dhcpoptinj
Packet Sniffing & AnalysisNetwork SecurityPenetration TestingRed Teaming
GitHubmisje/dhcpoptinj

dhcpoptinj

DHCP 옵션 인젝터

저장소 보기
43146년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

DHCP 옵션 인젝터

Build Status Total alerts

DHCP 요청을 가로채서 발신자가 모르게 몇 가지 추가 DHCP 옵션을 끼워 넣고 싶었던 적이 있나요? 아마 없을 겁니다. 하지만 그런 필요가 생긴다면, dhcpoptinj가 (바라건대) 도움이 될 것입니다.

왜

DHCP 요청을 변조하는 데는 여러 이유가 있을 수 있지만, 아마도 문제를 해결하기 위해 훨씬 더 나은 방법을 찾아야 할 가능성이 높습니다. DHCP 서버/클라이언트에 접근할 수 없어서 DHCP 옵션을 수정해야 하거나, DHCP 소프트웨어 설정이 어렵거나(원하는 작업을 지원하지 않는 경우), 매우 복잡하거나 비정상적인 설정을 가지고 있거나, 아니면 단순히 특이하거나 변형된 옵션을 보내는 실험을 하고 싶을 수도 있습니다. dhcoptinj가 실제로 유용할 가능성은 적지만 분명히 존재합니다.

어떻게

dhcpoptinj는 netfilter 큐에 패킷이 도착할 때까지 기다립니다. 패킷이 실제로 BOOTP/DHCP 패킷인지 확인하고, 맞으면 옵션을 주입합니다. IPv4 헤더 체크섬을 다시 계산하고, (구현을 단순화하기 위해) UDP 체크섬을 비활성화한 후 패킷을 netfilter로 반환합니다.

패킷을 가로채서 dhcpoptinj로 보내려면 iptables 규칙이 필요합니다. 두 개의 인터페이스(eth0 및 eth1)가 브리지되어 있다고 가정해 보겠습니다. eth0에서 오는 모든 BOOTP 요청을 가로채서 릴레이 에이전트 정보 옵션(82/0x52)을 주입하고 싶다고 가정해 보겠습니다. 의미 없는 페이로드를 만들어 보겠습니다. 값이 "Fjas"인 에이전트 회로 ID 서브 옵션입니다.

iptables mangle 테이블에 규칙을 추가합니다: sudo iptables -t mangle -A PREROUTING -m physdev --physdev-in eth0 -p udp --dport 67 -j NFQUEUE --queue-num 42

그런 다음 dhcpoptinj를 실행합니다(여기서는 추가 디버그 출력과 함께 포그라운드로 실행): sudo dhcpoptinj -d -f -q 42 -o'52 01 04 46 6A 61 73'. dhcpoptinj는 CAP_NET_ADMIN 권한이 있는 사용자가 실행해야 합니다. dhcpoptinj를 root로 실행할 필요가 없으며, 실제로 그래서는 안 됩니다. 대신, 예를 들어 바이너리에 CAP_NET_ADMIN 권한을 부여(setcap 사용)하고 특정 사용자나 그룹으로만 실행을 제한할 수 있습니다. 이는 wireshark를 비-root로 실행하는 데 사용되는 방법이므로, 이를 수행하는 여러 가이드를 찾을 수 있습니다.

이제 eth0 인터페이스로 DHCP 패킷을 보내고 브리지된 인터페이스에 도달할 때 수정된 패킷을 (wireshark 같은 도구를 사용하여) 확인합니다. 옵션 목록 끝에 주입된 옵션이 있어야 합니다. Wireshark로 수신 DHCP 패킷을 캡처하면 실제로 변조되었음에도 불구하고 수정되지 않은 것처럼 보입니다.

-o 옵션 인수의 형식에 유의하세요: DHCP 옵션 코드로 시작하고 옵션 페이로드가 이어지는 16진수 문자열이어야 합니다. 옵션 길이(일반적으로 옵션 코드 뒤에 오는 바이트)는 자동으로 계산되므로 지정하지 않아야 합니다. 16진수 문자열은 가독성을 위해 16진수가 아닌 문자로 구분할 수 있습니다. 특수 패드 옵션(코드 0)을 제외한 모든 옵션에는 페이로드가 있어야 합니다.

이 예제에서 사용된 의미 없는 옵션의 레이아웃(먼저 DHCP 옵션 레이아웃, 그 다음 특정 릴레이 에이전트 정보 옵션 서브 옵션 레이아웃)은 다음과 같습니다:

코드길이데이터
52(자동)01 04 46 6A 61 73 ("Fjas")
하위 옵션길이데이터
01446 6A 61 73 ("Fjas")

dhcpoptinj는 옵션 페이로드에 무엇을 쓰는지 신경 쓰지 않으며, 옵션 코드가 존재하는지도 확인하지 않습니다. 그러나 옵션 코드 255(종료 end 옵션) 사용은 금지합니다. dhcpoptinj는 이 옵션을 마지막 옵션으로 자동 삽입합니다.

스크린샷

root@kitploit:~
dhcpoptinj -f -d -q42 -r -o'0C 66 6A 61 73 65 68 6F 73 74' -o'52 01 04 46 6A 61 73' -o 320A141E28
root@kitploit:~
주입할 DHCP 옵션 3개 (총 25바이트): 12 (0x0C) (호스트 이름), 82 (0x52) (릴레이 에이전트 정보), 50 (0x32) (주소 요청)
기존 옵션이 제거됩니다
netfilter 큐 초기화 중
시그널 핸들러 초기화 중
초기화 완료. 큐 42에서 변조할 패킷 대기 중
416바이트 수신
B6:40:FE:41:30:DC에서 255.255.255.255:67로 가는 328바이트 DHCP 패킷 검사 중
패킷 변조 중
옵션  53 (0x35) (DHCP 메시지 유형)        DHCPREQUEST (복사 중)
옵션  54 (0x36) (DHCP 서버 ID)           4바이트 페이로드 0A 14 1E 01 (복사 중)
옵션  50 (0x32) (주소 요청)              4바이트 페이로드 0A 14 1E 28 (제거 중)
옵션  12 (0x0C) (호스트 이름)            12바이트 페이로드 33 31 36 64 65 39 31 34 64 61 62 34 (제거 중)
옵션  55 (0x37) (파라미터 목록)          13바이트 페이로드 01 1C 02 03 0F 06 77 0C 2C 2F 1A 79 2A (복사 중)
END 옵션 발견 (제거 중)
옵션  12 (0x0C) (호스트 이름) 주입 중             9바이트 페이로드 66 6A 61 73 65 68 6F 73 74
옵션  82 (0x52) (릴레이 에이전트 정보) 주입 중    6바이트 페이로드 01 04 46 6A 61 73
옵션  50 (0x32) (주소 요청) 주입 중               4바이트 페이로드 0A 14 1E 28
END 옵션 삽입 중
최소 BOOTP 페이로드 크기를 맞추기 위해 10바이트 패딩
변조된 패킷 전송 중

설치

Packaging status

dhcpoptinj는 Debian/Ubuntu에 있습니다. deb 패키지는 salsa에서 소스 관리되고 있습니다. 수동 설치 절차보다 deb 패키지에서 dhcpoptinj를 설치하는 것이 권장됩니다. deb 패키지에는 man 페이지, bash 완성 규칙, 예제 파일 등도 포함되어 있기 때문입니다.

전제 조건

cmake와 libnetfilter_queue (그리고 C99를 지원하는 C 컴파일러)가 필요합니다. Debian 계열 시스템을 사용하고 있다면 다음 명령으로 설치할 수 있습니다: sudo apt-get install cmake libnetfilter-queue-dev.

빌드

  1. 소스를 다운로드하거나 클론합니다: git clone git://github.com/misje/dhcpoptinj
  2. 디렉토리로 이동합니다: cd dhcpoptinj
  3. 빌드 디렉토리를 만들고 이동합니다(선택 사항이지만 권장): mkdir build && cd build
  4. cmake를 실행합니다: cmake .. (디버그 빌드를 원한다면 cmake -DCMAKE_BUILD_TYPE=Debug ..)
  5. make를 실행합니다: make -j4
  6. 설치합니다(선택 사항이지만 dhcpoptinj를 PATH에 두면 좋습니다): sudo make install

제거

  1. 빌드 디렉토리에서 sudo make uninstall을 실행합니다

빌드 디렉토리와 그 안의 모든 내용은 안전하게 삭제할 수 있습니다. 빌드 디렉토리를 사용하지 않았다면 git clean -dfx로 cmake 관련 파일을 모두 제거할 수 있습니다. 단, 이 명령은 프로젝트 디렉토리에서 소스 관리되지 않는 모든 것을 제거합니다.

설정 파일

dhcptopinj는 /etc/dhcpoptinj.conf 또는 -c/--conf-file로 전달된 파일을 파싱하려고 시도합니다. 설정 파일의 구문은 다음과 같습니다:

  • key=value (key는 긴 옵션 이름)
  • key (옵션이 인수를 받지 않는 경우)

공백은 선택 사항입니다. # 문자 이후의 모든 내용은 주석으로 간주됩니다. DHCP 옵션은 option=01:02:03 형식으로 하나씩 나열합니다. 옵션 16진수 문자열 주위의 따옴표는 선택 사항이며, 바이트는 16진수가 아닌 문자로 여러 개 구분할 수 있습니다.

설정 파일에서는 version, help, conf-file 옵션이 허용되지 않습니다.

예시:

root@kitploit:~
# 포그라운드에서 실행:
foreground
# 디버그 출력 활성화:
debug
# 호스트 이름을 "fjasehost"로 재정의:
option = '0C 66 6A 61 73 65 68 6F 73 74'
# 에이전트 ID "Fjas" 보내기:
option = "52:01:04:46:6A:61:73"
# 주소 요청을 10.20.30.40으로 재정의:
option=320A141E28
# 큐 12 사용:
queue = 12

remove-existing-opt # 옵션을 삽입하기 전에 제거

도움말

이 readme로 시작할 수 있을 것입니다. 또한 man 페이지(deb 패키지에 있음)와 도움말 출력(dhcpoptinj -h)을 확인하세요. 도움말에는 유틸리티가 제공하는 모든 내용이 설명되어 있습니다.

버그나 제안 사항이 있으면 이슈를 생성해 주세요.

제한 사항

dhcpoptinj는 단순하며 앞으로도 그렇게 유지되기를 바랍니다. 그럼에도 불구하고, 다음은 언젠가 추가되길 바라는 누락된 기능들입니다:

  1. 옵션을 교체하는 대신 제거하는 기능
  2. 변조 전에 수신 패킷을 DHCP 메시지 유형(코드 53)으로 필터링하는 기능

문제 해결

  1. Failed to bind queue handler to AF_INET: Operation not permitted

    CAP_NET_ADMIN 권한이 없거나 동일한 netfilter 큐 번호에 바인딩된 다른 프로세스(아마도 다른 dhcpoptinj 인스턴스?)가 있을 가능성이 높습니다.

알려진 문제

  1. 비정상 종료 시 메모리 누수.

    이는 누수로 간주되지 않습니다. 하지만 정상 종료(SIGTERM, SIGINT 또는 SIGHUP 캐치) 시에는 메모리 누수가 없어야 합니다.

유용한 정보

dhcpoptinj와 함께 사용할 iptables 규칙을 만들 때 다음 옵션이 유용할 수 있습니다:

  • --queue-bypass

    dhcpoptinj가 실행 중이 아니거나(또는 올바른 큐 번호를 수신하지 않는 경우) 패킷을 드롭하지 않고 통과시킵니다.

기여

제안 사항이 있으면 이슈를 남겨 주시면 답변드리겠습니다. 기여는 언제나 환영하며 풀 리퀘스트도 매우 감사히 받습니다.

dhcpoptinj가 유용하다면 어떤 용도로 사용하고 계신지 듣고 싶습니다. 위키 페이지를 업데이트하여 사용 사례를 설명해 주세요.

라이선스

이 프로젝트에는 GPL을 사용하기로 결정했습니다. 라이선스가 적합하지 않다면 연락 주시면 다른 라이선스에 합의할 수 있습니다.

도구 다운로드