.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - SNMP Pentesting
AWS 해킹을 제로부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team Expert)!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하고 싶다면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 Discord 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm를 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
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 객체가 표준화된 트리 계층 구조로 나열된 텍스트 파일입니다. 적어도 하나의 Object Identifier (OID)
를 포함하며, 고유 주소 및 이름뿐만 아니라 해당 객체의 유형, 액세스 권한 및 설명에 대한 정보도 제공합니다. MIB 파일은 Abstract Syntax Notation One (ASN.1)
기반 ASCII 텍스트 형식으로 작성됩니다. MIB에는 데이터가 포함되어 있지 않지만 어디에서 어떤 정보를 찾을 수 있는지 및 어떻게 보이는지를 설명하며, 특정 OID에 대한 반환 값을 또는 사용된 데이터 유형을 제공합니다.
OIDs
**객체 식별자(OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 관리 정보베이스(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) 변수를 참조합니다. 이를 통해 이어지는 이 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 또는 Department of Defense로 불리며 인터넷을 최초로 설립한 조직입니다.
- 1 – 인터넷의 값을 나타내어 모든 통신이 인터넷을 통해 이루어짐을 나타냅니다.
- 4 – 이 값은 이 장치가 정부가 아닌 사설 조직에서 제작되었음을 나타냅니다.
- 1 – 이 값은 장치가 기업 또는 비즈니스 엔티티에서 제작되었음을 나타냅니다.
이러한 첫 6개 값은 모든 장치에 대해 동일하며 기본 정보를 제공합니다. 이러한 숫자 시퀀스는 모든 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에서 잘못된 커뮤니티 문자열을 사용하면 서버가 응답하지 않습니다. 따라서 응답이 오면 유효한 커뮤니티 문자열이 사용된 것입니다.
포트
- 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 트리에 액세스를 가능하게 합니다:
- **
rwuser noauth
**는 인증이 필요하지 않고 OID 트리에 대한 완전한 액세스를 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없이 액세스할 수 있습니다. - 더 구체적인 제어를 위해 다음을 사용하여 액세스를 허용할 수 있습니다:
- **
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.*
이는 수동으로 처리할 수 없는 많은 양의 정보를 추출할 수 있습니다.
그래서, 가장 흥미로운 정보를 찾아봅시다 (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 명령어를 사용하여 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_를 사용하여 값을 수정할 수 있습니다. 이를 위해 개인 문자열을 알아야 합니다.
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
제로부터 영웅이 될 때까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!
HackTricks를 지원하는 다른 방법:
- 회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 굿즈를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 Discord 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm에서 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.