hacktricks/network-services-pentesting/pentesting-snmp
2024-04-06 18:36:54 +00:00
..
cisco-snmp.md GitBook: No commit message 2024-04-06 18:36:54 +00:00
README.md GitBook: No commit message 2024-04-06 18:36:54 +00:00
snmp-rce.md Translated to Korean 2024-02-10 21:30:13 +00:00

161,162,10161,10162/udp - Pentesting SNMP

AWS 해킹을 처음부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

SNMP - Simple Network Management Protocol은 네트워크의 다양한 장치(라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다.

PORT    STATE SERVICE REASON                 VERSION
161/udp open  snmp    udp-response ttl 244   ciscoSystems SNMPv3 server (public)

{% hint style="info" %} SNMP은 트랩을 위해 162/UDP 포트도 사용합니다. 이들은 명시적으로 요청하지 않은 SNMP 서버에서 클라이언트로 보내는 데이터 패킷입니다. {% endhint %}

MIB

다양한 제조업체 및 다른 클라이언트-서버 조합에서 SNMP 액세스가 작동하도록 보장하기 위해 **관리 정보베이스(MIB)**가 만들어졌습니다. MIB는 장치 정보를 저장하는 독립형 형식입니다. MIB는 장치의 모든 질의 가능한 SNMP 객체표준화된 트리 계층 구조로 나열된 텍스트 파일입니다. 적어도 하나의 객체 식별자(OID)를 포함하며, 고유 주소 및 이름뿐만 아니라 해당 객체의 유형, 액세스 권한 및 설명에 대한 정보도 제공합니다. MIB 파일은 Abstract Syntax Notation One(ASN.1) 기반 ASCII 텍스트 형식으로 작성됩니다. MIB에는 데이터가 포함되어 있지 않지만 어디에서 어떤 정보를 찾을 수 있는지, 어떻게 보이는지, 특정 OID에 대한 반환 값 또는 사용된 데이터 유형에 대한 설명을 설명합니다.

OIDs

**객체 식별자(OID)**는 중요한 역할을 합니다. 이러한 고유 식별자는 관리 정보베이스(MIB) 내의 객체를 관리하기 위해 설계되었습니다.

MIB 객체 ID 또는 OID의 최상위 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준에서는 전역 관리 관행 및 표준의 프레임워크가 설정됩니다.

또한, 공급업체는 개인 브랜치를 설정할 수 있습니다. 이러한 브랜치 내에서는 제품 라인에 관련된 관리 대상 객체를 포함할 권한이 있습니다. 이 시스템은 다른 공급업체 및 표준 간에 다양한 객체를 식별하고 관리하기 위한 체계적이고 조직적인 방법이 있음을 보장합니다.

웹에서 OID 트리탐색할 수 있습니다: http://www.oid-info.com/cgi-bin/display?tree=#focus 또는 1.3.6.1.2.1.1과 같은 OID가 무엇을 의미하는지 확인할 수 있습니다: http://oid-info.com/get/1.3.6.1.2.1.1.
1.3.6.1.2.1 내부에 있는 것과 같은 잘 알려진 OIDs가 있습니다. 이는 MIB-2에서 정의된 간단한 네트워크 관리 프로토콜(SNMP) 변수를 참조합니다. 이 OID로부터 보류 중인 OID를 통해 일부 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터)를 얻을 수 있습니다.

OID 예시

여기에서 예시를 확인하세요:

1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7

이 주소의 분해입니다.

  • 1 ISO로 불리며 OID임을 나타냅니다. 이것이 모든 OID가 "1"로 시작하는 이유입니다.
  • 3 ORG로 불리며 장치를 구축한 조직을 지정하는 데 사용됩니다.
  • 6 dod 또는 Department of Defense로 불리며 인터넷을 최초로 설립한 조직입니다.
  • 1 인터넷의 값을 나타내어 모든 통신이 인터넷을 통해 이루어짐을 나타냅니다.
  • 4 이 값은 이 장치가 정부 기관이 아닌 사설 기관에서 제작되었음을 결정합니다.
  • 1 이 값은 장치가 기업 또는 비즈니스 엔티티에 의해 제작되었음을 나타냅니다.

이 첫 번째 여섯 값은 모든 장치에 대해 동일하며 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일할 것이며, 장치가 정부 기관에서 제작된 경우를 제외하고는 동일할 것입니다.

다음 숫자 세트로 이동합니다.

  • 1452 이 장치를 제조한 조직의 이름을 제공합니다.
  • 1 장치 유형을 설명합니다. 이 경우 알람 시계입니다.
  • 2 이 장치가 원격 단말 장치임을 결정합니다.

나머지 값은 장치에 대한 구체적인 정보를 제공합니다.

  • 5 이산 알람 지점을 나타냅니다.
  • 1 장치 내의 특정 지점
  • 3 포트
  • 21 포트의 주소
  • 1 포트의 표시
  • 4 지점 번호
  • 7 지점의 상태

SNMP 버전

SNMP에는 2가지 중요한 버전이 있습니다:

  • SNMPv1: 주요 버전으로, 여전히 가장 빈도가 높으며, 인증은 문자열을 기반으로 하며(커뮤니티 문자열), 모든 정보가 평문으로 전송됩니다. 버전 2 및 2c평문으로 트래픽을 전송하고 인증으로 커뮤니티 문자열을 사용합니다.
  • SNMPv3: 더 나은 인증 형식을 사용하며 정보는 암호화되어 전송됩니다(사전 공격은 수행할 수 있지만 SNMPv1 및 v2보다 올바른 자격 증명을 찾는 것이 훨씬 어려울 것입니다).

커뮤니티 문자열

앞서 언급했듯이, MIB에 저장된 정보에 액세스하려면 버전 1 및 2/2c에서 커뮤니티 문자열을 알아야 하며 버전 3에서 자격 증명을 알아야 합니다.
커뮤니티 문자열에는 2가지 유형이 있습니다:

  • public 주로 읽기 전용 기능
  • private 일반적으로 읽기/쓰기 기능

OID의 쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로 **"public"**이 사용된다 해도 일부 값을 쓸 수 있을 수 있습니다. 또한 **항상 "읽기 전용"**인 객체가 존재할 수 있습니다.
객체를 쓰려고 하면 noSuchName 또는 readOnly 오류가 발생합니다**.**

버전 1 및 2/2c에서 잘못된 커뮤니티 문자열을 사용하면 서버가 응답하지 않습니다. 따라서 응답이 오면 유효한 커뮤니티 문자열이 사용된 것입니다.

포트

Wikipedia에서:

  • SNMP 에이전트는 UDP 포트 161에서 요청을 수신합니다.
  • 매니저는 포트 162에서 알림(트랩 및 InformRequests)을 수신합니다.
  • Transport Layer Security 또는 Datagram Transport Layer Security와 함께 사용할 때 요청은 포트 10161에서 수신되고 알림은 포트 10162로 전송됩니다.

커뮤니티 문자열 브루트 포스(v1 및 v2c)

커뮤니티 문자열을 추측하기 위해 사전 공격을 수행할 수 있습니다. SNMP에 대한 브루트 포스 공격을 수행하는 다양한 방법은 여기에서 확인할 수 있습니다. 자주 사용되는 커뮤니티 문자열은 public입니다.

SNMP 열거

장치에서 수집된 각 OID가 무엇을 의미하는지 확인하려면 다음을 설치하는 것이 좋습니다:

apt-get install snmp-mibs-downloader
download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf

만약 유효한 커뮤니티 문자열을 알고 있다면, SNMPWalk 또는 SNMP-Check를 사용하여 데이터에 액세스할 수 있습니다:

snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .

snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP]
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] 1.3.6.1.2.1.4.34.1.3 #Get IPv6, needed dec2hex
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] NET-SNMP-EXTEND-MIB::nsExtendObjects #get extended
snmpwalk -v [VERSION_SNMP] -c [COMM_STRING] [DIR_IP] .1 #Enum all

snmp-check [DIR_IP] -p [PORT] -c [COMM_STRING]

nmap --script "snmp* and not snmp-brute" <target>

braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID

다음 명령을 사용하여 시스템에 대해 더 많은 정보를 열거할 수 있습니다 :

snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull

SNMP에는 호스트에 대한 많은 정보가 포함되어 있으며, 흥미로운 정보로는 네트워크 인터페이스(IPv4 및 IPv6 주소), 사용자 이름, 가동 시간, 서버/OS 버전 및 프로세스가 있습니다(비밀번호 포함 가능).

위험한 설정

네트워크 관리 분야에서 특정 구성 및 매개변수는 포괄적인 모니터링 및 제어를 보장하는 데 중요합니다.

액세스 설정

네트워크 관리에서 중요한 설정 중 두 가지는 전체 OID 트리에 액세스할 수 있도록 하는 핵심 구성 요소입니다:

  1. **rwuser noauth**는 인증이 필요 없이 OID 트리에 대한 완전한 액세스를 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없는 액세스를 허용합니다.
  2. 더 구체적인 제어를 위해 다음을 사용하여 액세스를 허용할 수 있습니다:
  • **rwcommunity**는 IPv4 주소에 대해,
  • **rwcommunity6**는 IPv6 주소에 대해 액세스를 허용합니다.

두 명령 모두 커뮤니티 문자열과 관련 IP 주소를 필요로 하며, 요청의 출처에 관계없이 완전한 액세스를 제공합니다.

Microsoft Windows용 SNMP 매개변수

Windows 시스템의 다양한 측면을 SNMP를 통해 모니터링하는 데 사용되는 일련의 관리 정보베이스(MIB) 값이 있습니다:

  • 시스템 프로세스: 1.3.6.1.2.1.25.1.6.0을 통해 액세스되며, 이 매개변수를 사용하여 시스템 내에서 활성 프로세스를 모니터링할 수 있습니다.
  • 실행 중인 프로그램: 1.3.6.1.2.1.25.4.2.1.2 값은 현재 실행 중인 프로그램을 추적하기 위해 지정됩니다.
  • 프로세스 경로: 프로세스가 실행 중인 위치를 결정하기 위해 1.3.6.1.2.1.25.4.2.1.4 MIB 값이 사용됩니다.
  • 저장 장치: 저장 장치의 모니터링은 1.3.6.1.2.1.25.2.3.1.4를 통해 용이하게 됩니다.
  • 소프트웨어 이름: 시스템에 설치된 소프트웨어를 식별하기 위해 1.3.6.1.2.1.25.6.3.1.2가 사용됩니다.
  • 사용자 계정: 1.3.6.1.4.1.77.1.2.25 값은 사용자 계정을 추적할 수 있도록 합니다.
  • TCP 로컬 포트: 마지막으로, 1.3.6.1.2.1.6.13.1.3은 TCP 로컬 포트를 모니터링하기 위해 지정되어 있으며 활성 네트워크 연결에 대한 통찰을 제공합니다.

Cisco

Cisco 장비를 사용 중이라면 이 페이지를 확인하세요:

{% content-ref url="cisco-snmp.md" %} cisco-snmp.md {% endcontent-ref %}

SNMP에서 RCE로

SNMP 서비스 내에서 값을 쓰는 데 사용할 수 있는 문자열이 있다면, 이를 남용하여 명령을 실행할 수 있습니다:

{% content-ref url="snmp-rce.md" %} snmp-rce.md {% endcontent-ref %}

대규모 SNMP

Braa 는 대규모 SNMP 스캐너입니다. 이 도구의 의도된 사용 방법은 물론 SNMP 쿼리를 수행하는 것이지만 net-snmp의 snmpwalk와 달리 수십 개 또는 수백 개의 호스트를 동시에 쿼리하고 단일 프로세스에서 수행할 수 있습니다. 따라서 시스템 리소스를 매우 적게 소비하며 매우 빠르게 스캔을 수행합니다.

Braa는 자체 SNMP 스택을 구현하므로 net-snmp와 같은 SNMP 라이브러리가 필요하지 않습니다.

구문: braa [커뮤니티 문자열]@[SNMP 서버의 IP]:[iso id]

braa ignite123@192.168.1.125:.1.3.6.*

장치

이 프로세스는 각 파일에서 sysDesc MIB 데이터 (1.3.6.1.2.1.1.1.0)를 추출하여 장치를 식별하는 것으로 시작됩니다. 이는 grep 명령어를 사용하여 수행됩니다:

grep ".1.3.6.1.2.1.1.1.0" *.snmp

개인 문자열 식별

핵심 단계는 기관이 특히 Cisco IOS 라우터에서 사용하는 개인 커뮤니티 문자열을 식별하는 것입니다. 이 문자열은 라우터에서 실행 중인 구성을 추출하는 데 사용됩니다. 식별은 종종 grep 명령어를 사용하여 SNMP Trap 데이터를 분석하여 "trap"이라는 단어를 찾는 것에 의존합니다:

grep -i "trap" *.snmp

사용자 이름/암호

MIB 테이블에 저장된 로그는 로그인 실패 시도를 조사하며, 이는 실수로 사용자 이름으로 입력된 암호를 포함할 수 있습니다. fail, failed, 또는 _login_과 같은 키워드를 검색하여 가치 있는 데이터를 찾습니다:

grep -i "login\|fail" *.snmp

이메일

마지막으로 데이터에서 이메일 주소를 추출하기 위해 정규 표현식을 사용한 grep 명령어가 사용되며, 이메일 형식과 일치하는 패턴에 초점을 맞춥니다:

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp

SNMP 값 수정

_NetScanTools_를 사용하여 값을 수정할 수 있습니다. 이를 위해 개인 문자열을 알아야 합니다.

Spoofing

SMNP 서비스에 쿼리할 수 있는 IP만 허용하는 ACL이 있는 경우, UDP 패킷 내에서 해당 주소 중 하나를 위조하고 트래픽을 스니핑할 수 있습니다.

SNMP 구성 파일 검사

  • snmp.conf
  • snmpd.conf
  • snmp-config.xml

해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 채용 중입니다! (유창한 폴란드어 작문 및 구사 능력 필요).

{% embed url="https://www.stmcyber.com/careers" %}

HackTricks 자동 명령어

Protocol_Name: SNMP    #Protocol Abbreviation if there is one.
Port_Number:  161     #Comma separated if there is more than one.
Protocol_Description: Simple Network Managment Protocol         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for SNMP
Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).

https://book.hacktricks.xyz/pentesting/pentesting-snmp

Entry_2:
Name: SNMP Check
Description: Enumerate SNMP
Command: snmp-check {IP}

Entry_3:
Name: OneSixtyOne
Description: Crack SNMP passwords
Command: onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings-onesixtyone.txt {IP} -w 100

Entry_4:
Name: Nmap
Description: Nmap snmp (no brute)
Command: nmap --script "snmp* and not snmp-brute" {IP}

Entry_5:
Name: Hydra Brute Force
Description: Need Nothing
Command: hydra -P {Big_Passwordlist} -v {IP} snmp


htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹을 배우세요!

다른 방법으로 HackTricks를 지원하는 방법: