Skip to content

SNMP Targeted OID Enumeration

5 min read Created Jan 4, 2026 Last updated Jan 4, 2026

SNMP Targeted OID Enumeration

Targeted OID walks pull specific MIB subtrees instead of walking the entire MIB tree. A full walk against a misconfigured device can return thousands of objects across dozens of subsystems. Targeting known OIDs cuts noise, speeds up enumeration, and keeps the request volume low. Use SNMPv2c bulk requests where possible. They retrieve multiple OIDs per packet and are significantly faster on large subtrees. Fall back to v1 only if the device rejects v2c.

Info

OID

System info

1.3.6.1.2.1.1

Network interfaces

1.3.6.1.2.1.2.2.1.2

Running processes

1.3.6.1.2.1.25.4.2.1.2

Installed software

1.3.6.1.2.1.25.6.3.1.2

Windows user accounts

1.3.6.1.4.1.77.1.2.25

TCP connections

1.3.6.1.2.1.6.13.1.1

System and Host Details

The system MIB subtree is the first OID to query on any SNMP target. It returns the device description, uptime, contact info, hostname, and location. These fields are set by administrators and often contain version strings, OS identifiers, and hardware model names.

  • System and Host Details
  • Windows User Accounts
  • Running Processes and Software
  • Network Interfaces and Connections
┌──(kali㉿kali)-[~]
└─$ snmpbulkwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.1

The sysDescr field usually contains the OS version and sometimes the kernel build or hardware model. A string like Linux 5.4.0-139-generic or Windows Version 6.3 is enough to start fingerprinting. Uptime reveals when the device last rebooted. Long uptimes indicate the system rarely restarts, which often correlates with delayed patching cycles. The sysContact and sysLocation fields are sometimes populated with admin names or physical locations, which is useful for social engineering context or narrowing physical access scope.

Windows User Accounts

This OID is specific to Windows hosts running the Microsoft SNMP agent. It queries the local user account list from the SAM database. Not every Windows deployment exposes this, but misconfigured systems do. The community string must match and the SNMP agent must be running for this to return data.

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.4.1.77.1.2.25

Each returned entry is a local account name. Build a wordlist from these names for password spray or brute force against any exposed authentication service on the host. Cross-reference with discovered services: an account named svc-sql or backup is worth targeting against SQL Server or WinRM. These are local accounts, not domain accounts, but shared passwords between local and domain accounts are common in smaller environments.

Running Processes and Software

The process table OID returns the names and paths of every running process at the time of the query. This gives you a process listing without shell access. Walk this early in enumeration to understand what services are active on the host.

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.25.4.2.1.2

Look for recognizable service names: httpd, mysqld, sshd, tomcat. Full paths sometimes include version strings or configuration file references. A path like /opt/splunk/bin/splunkd confirms Splunk is running. Flag processes running from temp directories or user home directories. Anything unexpected in this list is a lead for further investigation.

Installed software:

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.25.6.3.1.2

This OID returns installed package names and versions from the host software inventory. Compare returned versions against known CVEs. An outdated Apache, an old OpenSSH build, or an unpatched JDK version is a direct lead into vulnerability research. On Linux systems the list is often long. Focus on network-facing software: web servers, databases, remote management agents, and monitoring tools.

Network Interfaces and Connections

Interface enumeration shows which networks the device is attached to. The interface name subtree returns logical interface names bound to each index. Combine this with the IP address table at 1.3.6.1.2.1.4.20 to map interface names to their assigned IP addresses.

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.2.2.1.2

Multiple interfaces on a single host mean it is connected to more than one network segment. This is common for routers, firewalls, and dual-homed servers. Each additional network the host connects to is a potential pivot path. Internal RFC 1918 ranges appearing on a host in your current scope expand your lateral movement options without additional scanning.

TCP connections:

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.6.13.1.1

The TCP connection table returns established and listening connections. Each entry includes local address, local port, remote address, remote port, and connection state. Listening entries reveal services not visible from your scan position due to firewall rules or host-based filtering. Active connections show what the host is currently communicating with. Management traffic to monitoring platforms, internal databases, or backup systems often appears here and helps map internal infrastructure without additional probing.

Routing table:

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v2c -c public $TARGET_IP 1.3.6.1.2.1.4.21.1

The routing table shows every network this device can reach and the next-hop for each destination. Subnets outside your current scope appear here if the device routes to them. A host with routes into internal RFC 1918 ranges you have not yet scanned is a pivot candidate. The routing table maps the network topology from the target's perspective, often revealing segments not visible from your current scan position.

Fallback to v1 if v2c rejected:

┌──(kali㉿kali)-[~]
└─$ snmpwalk -v1 -c public $TARGET_IP <OID>

Some older devices only support SNMP v1. Embedded network equipment, legacy printers, and older managed switches often reject v2c connections silently. If v2c returns no output or times out and the community string is confirmed correct, retry with v1. The returned data is identical, but v1 has no bulk request support so large subtrees require more round trips. If the community string is wrong, most implementations return nothing rather than an explicit error, which looks the same as an empty result.

References