hacktricks/network-services-pentesting/pentesting-snmp
2024-09-16 20:56:56 +00:00
..
cisco-snmp.md Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat 2024-09-16 20:56:56 +00:00
README.md Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat 2024-09-16 20:56:56 +00:00
snmp-rce.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:16:40 +00:00

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

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).

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

Basic Information

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

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

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

MIB

SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **Management Information Base (MIB)**가 생성되었습니다. MIB는 장치 정보를 저장하기 위한 독립적인 형식입니다. MIB는 표준화된 트리 계층 구조에서 모든 쿼리 가능한 SNMP 객체가 나열된 텍스트 파일입니다. 여기에는 고유 주소이름 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보도 제공하는 **최소 하나의 Object Identifier (OID)**가 포함되어 있습니다.
MIB 파일은 Abstract Syntax Notation One (ASN.1) 기반 ASCII 텍스트 형식으로 작성됩니다. MIB는 데이터를 포함하지 않지만, 어떤 정보를 어디서 찾을 수 있는지와 그것이 어떤 모습인지, 특정 OID에 대한 반환 값 또는 사용되는 데이터 유형을 설명합니다.

OIDs

**Object Identifiers (OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 Management Information Base (MIB) 내에서 객체를 관리하기 위해 설계되었습니다.

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

또한, 공급업체는 개인 브랜치를 설정할 수 있는 자유를 부여받습니다. 이러한 브랜치 내에서 그들은 자신의 제품 라인과 관련된 관리 객체를 포함할 수 있는 자율성을 가집니다. 이 시스템은 다양한 공급업체와 표준 간에 광범위한 객체를 식별하고 관리하기 위한 구조적이고 조직적인 방법을 보장합니다.

여기에서 OID 트리탐색할 수 있습니다: http://www.oid-info.com/cgi-bin/display?tree=#focus 또는 OID의 의미를 확인할 수 있습니다 (예: 1.3.6.1.2.1.1) http://oid-info.com/get/1.3.6.1.2.1.1에서 접근하여 확인하세요.
1.3.6.1.2.1 내부의 잘 알려진 OIDs가 있으며, 이는 MIB-2에서 정의된 Simple Network Management Protocol (SNMP) 변수를 참조합니다. 그리고 이로부터 대기 중인 OIDs를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다.

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 또는 국방부로, 인터넷을 처음으로 설립한 조직입니다.
  • 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에서는 잘못된 커뮤니티 문자열을 사용하면 서버가 응답하지 않습니다. 따라서 응답이 있다면, 유효한 커뮤니티 문자열이 사용된 것입니다.

포트

위키백과에서:

커뮤니티 문자열 무차별 대입 (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

확장 쿼리(download-mibs) 덕분에 다음 명령어로 시스템에 대한 더 많은 정보를 열거할 수 있습니다:

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 매개변수

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

  • 시스템 프로세스: 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.*

이것은 수동으로 처리할 수 없는 많은 MB의 정보를 추출할 수 있습니다.

그래서, 가장 흥미로운 정보를 찾아봅시다 (from https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):

장치

이 과정은 각 파일에서 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 명령을 사용하여 "trap"이라는 단어에 대한 SNMP 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_를 사용하여 값을 수정할 수 있습니다. 그렇게 하려면 비공식 문자열을 알아야 합니다.

스푸핑

ACL이 SMNP 서비스에 쿼리할 수 있는 IP만 허용하는 경우, 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


{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}