部署snmpd服务
yum install -y net-snmp net-snmp-utils
# 启动服务
systemctl start snmpd
# 停止服务
systemctl stop snmpd
snmpwalk命令
snmpwalk命令是操作snmpd服务的工具,可以通过-h
中的-v
参数看到连接到snmpd有三个版本接口,其中:
- 只有
3
版本提供鉴权的功能。 1
和2c
版本只需要指定community
参数,因此,在爆破snmpd的1
和2c
版本时,只需要爆破community
字段。
[root@localhost ~]# snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
Version: 5.7.2
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
OPTIONS:
-h, --help display this help message
-H display configuration file directives understood
-v 1|2c|3 specifies SNMP version to use
-V, --version display package version number
SNMP Version 1 or 2c specific
-c COMMUNITY set the community string
SNMP Version 3 specific
-a PROTOCOL set authentication protocol (MD5|SHA)
-A PASSPHRASE set authentication protocol pass phrase
-e ENGINE-ID set security engine ID (e.g. 800000020109840301)
-E ENGINE-ID set context engine ID (e.g. 800000020109840301)
-l LEVEL set security level (noAuthNoPriv|authNoPriv|authPriv)
-n CONTEXT set context name (e.g. bridge1)
-u USER-NAME set security name (e.g. bert)
-x PROTOCOL set privacy protocol (DES|AES)
-X PASSPHRASE set privacy protocol pass phrase
-Z BOOTS,TIME set destination engine boots/time
创建用户
查看创建用户命令参数:
Usage:
net-snmp-create-v3-user [-ro] [-A authpass] [-X privpass]
[-a MD5|SHA] [-x DES|AES] [username]
可以看到这里create-v3就是上面讲到的v3版本,只有v3版本提供用户鉴权的接口。
参数说明:
- -ro: 就是read only的意思
- -A: 设置认证的密码,长度必须超过8位,否则登录会提示密码太短。
- -X: 设置是否加密账号,如果指定了这个参数,登录的时候一定要带上,否则会报错。
- -a和-x就是将密码设置为不同的加密方式(严格意义上来说,MD5不算是加密方式), -x如果不设置参数,默认为DES。
- username: 最后就是用户名,snmpd似乎没有提供删除或修改用户的接口,修改用户密码同创建用户,只需将密码设置成其他的即可。
注意事项:创建用户必须先停止snmpd服务,用户创建完成后再重新启动服务,然后使用snmpwalk接口进行操作。
创建与登录示例:
# 创建认证且加密的读写账户(authPriv)
net-snmp-create-v3-user -a MD5 -A password2 -X password2 -x DES user2
# 登录命令
snmpwalk -v 3 localhost -u user2 -a MD5 -A password2 -X password2 -l authPriv -x DES .1.3.6.1.2.1.1
# 创建认证但不加密的只读账户(authNoPriv)
net-snmp-create-v3-user -ro -a MD5 -A password3 user3
# 登录命令
snmpwalk -v 3 localhost -u user3 -a MD5 -A password3 -l authNoPriv -x DES .1.3.6.1.2.1.1
# 创建认证但不加密的读写账户(authNoPriv)
net-snmp-create-v3-user -ro -a MD5 -A password3 user3
# 登录命令
snmpwalk -v 3 localhost -u user3 -a MD5 -A password3 -l authNoPriv -x DES .1.3.6.1.2.1.1
除了
authPriv
以外,不管是否是-ro
账户,使用的登录命令其实是一样的。
.1.3.6.1.2.1.1
可以理解为是snmpd服务所在主机上硬件设备的代号,不同的硬件设备有各自唯一的代号。
登录总结
- 密码必须大于等于8位数,否则报错
The supplied password length is too short
。 - 如果账户不存在,则报错:
Unknown user name
。因此爆破时,可以先将爆破账号,然后将不存在的账户排除。 - 如果密码错误,则报错:
incorrect password, community or key
- 如果账号的加密方式是
authPriv
,爆破时使用的参数可以是authNoPriv
,但是如果没有指定-X
参数,同样会报错。 - 如果账号的加密方式是
authPriv
,-A
密码正确,-X
后面的密码错误,则会报错:Timeout: No Response from [IP地址]
。 - 如果账号的加密方式是
authNoPriv
,爆破时使用的参数是authPriv
,则会报错。 - 如果账号的加密方式是
authNoPriv
,爆破时使用的参数是authNoPriv
,设置-X
参数为长度大于等于8位数的任意值都没有影响。