.. | ||
cisco-snmp.md | ||
README.md | ||
snmp-rce.md |
161,162,10161,10162/udp - 渗透测试SNMP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks的衣物
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
Bug赏金提示:注册Intigriti,一个由黑客创建的高级Bug赏金平台!立即加入我们的https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
基本信息
SNMP - 简单网络管理协议是一种用于监控网络中不同设备(如路由器、交换机、打印机、物联网设备等)的协议。
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文件以基于抽象语法符号一(ASN.1)
的ASCII文本格式编写。MIB不包含数据,但它们解释了在哪里找到哪些信息以及其外观,返回特定OID的值,或使用了哪种数据类型。
OID
OID代表对象标识符。OID在MIB层次结构中唯一标识受管对象。这可以表示为树,其级别由不同组织分配。顶级MIB对象ID(OID)属于不同的标准组织。
供应商定义了包括其自己产品的受管对象的私有分支。
您可以从这里通过OID树进行导航:http://www.oid-info.com/cgi-bin/display?tree=#focus,或者通过访问http://oid-info.com/get/1.3.6.1.2.1.1来查看OID的含义(例如1.3.6.1.2.1.1
)。
有一些众所周知的OID,例如1.3.6.1.2.1中的OID,引用了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有两个重要的版本:
- SNMPv1:主要版本,仍然是最常见的版本,身份验证基于字符串(社区字符串),以明文形式传输(所有信息都以明文形式传输)。版本2和2c也以明文形式发送流量,并使用社区字符串进行身份验证。
- SNMPv3:使用更好的身份验证形式,并使用加密传输信息(可以执行字典攻击,但要找到正确的凭据比在SNMPv1和v2中困难得多)。
社区字符串
如前所述,在版本1和2/2c上访问MIB上保存的信息时,需要知道社区字符串,而在版本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地址)、用户名、运行时间、服务器/操作系统版本和正在运行的进程(可能包含密码)....
危险的设置
来自https://academy.hackthebox.com/module/112/section/1075的设置:
设置 | 描述 |
---|---|
rwuser noauth |
提供对完整OID树的无需身份验证的访问权限。 |
rwcommunity <community string> <IPv4 address> |
提供对完整OID树的访问权限,无论请求来自何处。 |
rwcommunity6 <community string> <IPv6 address> |
与rwcommunity 相同的访问权限,区别在于使用IPv6。 |
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 [Community-string]@[IP of SNMP server]:[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 .1.3.6.1.2.1.1.1.0 MIB数据,以确定我从哪些设备中收集到了信息。可以使用以下grep命令轻松完成:
grep ".1.3.6.1.2.1.1.1.0" *.snmp
识别私有字符串
例如,如果我能够识别出组织在其Cisco IOS路由器上使用的私有社区字符串,那么我可能可以使用该社区字符串从这些路由器中提取运行配置。寻找这样的数据的最佳方法通常与SNMP Trap数据相关。因此,再次使用以下grep命令,我们可以快速地解析大量的MIB数据,搜索关键词“trap”:
grep -i "trap" *.snmp
用户名/密码
另一个感兴趣的领域是日志,我发现有一些设备在MIB表中保存了日志。这些日志也可能包含登录失败的尝试。想想你上次通过Telnet或SSH登录设备时,是否不小心将密码输入为用户名。我通常搜索关键词,如_fail_,failed_或_login,并检查这些数据,看是否有任何有价值的信息。
grep -i "login\|fail" *.snmp
电子邮件
SNMP can be used to gather information about email services running on a target system. This can include details such as the email server's IP address, port number, and other configuration settings.
SNMP可以用于收集有关目标系统上运行的电子邮件服务的信息。这些信息可以包括电子邮件服务器的IP地址、端口号和其他配置设置。
Enumerating Email Addresses
枚举电子邮件地址
SNMP can also be used to enumerate email addresses on a target system. By querying the SNMP MIB (Management Information Base) for the email service, it is possible to retrieve a list of email addresses associated with that service.
SNMP还可以用于枚举目标系统上的电子邮件地址。通过查询电子邮件服务的SNMP MIB(管理信息库),可以检索与该服务关联的电子邮件地址列表。
Sending Emails via SNMP
通过SNMP发送电子邮件
In some cases, it may be possible to send emails using SNMP. This can be achieved by leveraging the SNMP MIBs that allow for email functionality. By configuring the necessary SNMP settings and using the appropriate SNMP commands, it is possible to send emails through the target system's email service.
在某些情况下,可以通过SNMP发送电子邮件。这可以通过利用允许进行电子邮件功能的SNMP MIB来实现。通过配置必要的SNMP设置并使用适当的SNMP命令,可以通过目标系统的电子邮件服务发送电子邮件。
SNMP Email Traps
SNMP电子邮件陷阱
SNMP can also be used to send email traps, which are notifications sent to a specified email address when certain events occur. These traps can be configured to alert administrators of critical events, such as system failures or security breaches.
SNMP还可以用于发送电子邮件陷阱,即在发生某些事件时向指定的电子邮件地址发送通知。可以配置这些陷阱以通知管理员关键事件,例如系统故障或安全漏洞。
SNMP Email Authentication
SNMP电子邮件身份验证
When using SNMP to send emails, it is important to ensure proper authentication to prevent unauthorized access. This can be achieved by configuring SNMPv3 with strong authentication mechanisms, such as HMAC-SHA or AES encryption.
在使用SNMP发送电子邮件时,确保适当的身份验证以防止未经授权的访问非常重要。可以通过配置具有强身份验证机制的SNMPv3,例如HMAC-SHA或AES加密,来实现这一点。
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
修改SNMP值
您可以使用 NetScanTools 来修改值。为了这样做,您需要知道私有字符串。
欺骗
如果有一个ACL只允许一些IP查询SMNP服务,您可以在UDP数据包中伪造其中一个地址并嗅探流量。
检查SNMP配置文件
- snmp.conf
- snmpd.conf
- snmp-config.xml
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
Bug赏金提示:注册Intigriti,一个由黑客创建的高级Bug赏金平台!立即加入我们,开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中宣传你的公司吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品:The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或 Telegram群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。