.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 - 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 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **관리 정보 베이스(Management Information Base, MIB)**가 생성되었습니다. MIB는 장치 정보를 저장하기 위한 독립적인 형식입니다. MIB는 표준화된 트리 계층 구조에 나열된 모든 쿼리 가능한 SNMP 객체를 포함하는 텍스트 파일입니다. 최소한 하나의 객체 식별자(Object Identifier, OID)
를 포함하며, 이는 필요한 고유 주소와 이름 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보를 제공합니다.
MIB 파일은 추상 구문 표기법 1(Abstract Syntax Notation One, ASN.1)
기반 ASCII 텍스트 형식으로 작성됩니다. MIB는 데이터를 포함하지 않지만, 어떤 정보를 어디서 찾을 수 있는지와 그것이 어떤 모습인지, 특정 OID에 대한 반환 값 또는 사용되는 데이터 유형을 설명합니다.
OIDs
**객체 식별자(Object Identifiers, OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 관리 정보 베이스(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에서 접근하세요.
일부 잘 알려진 OID가 있으며, 1.3.6.1.2.1 내의 것들은 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)로, 인터넷을 처음으로 설립한 조직입니다.
- 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에서는 잘못된 커뮤니티 문자열을 사용하면 서버가 응답하지 않습니다. 따라서 응답이 있으면 유효한 커뮤니티 문자열이 사용된 것입니다.
포트
- SNMP 에이전트는 UDP 포트 161에서 요청을 수신합니다.
- 관리자는 포트 162에서 알림(트랩 및 InformRequests)을 수신합니다.
- 전송 계층 보안 또는 데이터그램 전송 계층 보안와 함께 사용할 때, 요청은 포트 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
확장 쿼리(download-mibs) 덕분에 다음 명령어로 시스템에 대한 더 많은 정보를 열거할 수 있습니다:
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 매개변수
일련의 관리 정보 베이스 (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의 정보를 추출할 수 있습니다.
그래서, 가장 흥미로운 정보를 찾아봅시다 (출처: 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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.