SNMP協議簡介
名稱:SNMP(Simple Network Management Protocol)簡單網絡管理協議
端口:161
協議:UDP
用途:SNMP代理者以變量呈現管理資料。管理系統透過GET,GETNEXT和GETBULK協定指令取回資訊,或是代理者在沒有被詢問的情況下,使用TRAP或INFORM傳送資料。管理系統也可以傳送配置更新或控制的請求,透過SET協定指令達到主動管理系統的目的。配置和控制指令只有當網絡基本結構需要改變的時候使用,而監控指令則通常是常態性的工作。
SNMP使用方法簡介
"Mac、Linux、Unix下使用snmpget、snmpwalk等命令"
#snmpwalk -v 2c -c 'public' 對端ip
#snmpget -v 1 -c 'community' 對端ip OID號
"Windows下請下載snmputil.exe,安裝后在CMD中使用"
#snmputil walk 對端ip public OID號
SNMP 弱口令導致的信息泄露威脅
SNMP版本 | SNMP弱口令 |
---|---|
V1 | community |
V2c | public |
上面是版本對應的弱口令表,利用這些弱口令可以獲取到系統信息,甚至下發配置
# -*- coding:utf-8 -*-
#引入依賴的庫、包、模塊
import sys
import socket
#定義全局變量
snmpClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
snmpData = """
30260201 01 0406 7075626c6963 a1
19 0204 424602fd 0201 00 0201 00
300b 3009 0605 2b06010201 0500
"""
#定義全局函數
def str2Binary(content):
"""文本轉二進制"""
return content.replace(' ','').replace('\n','').decode('hex')
def snmpScan(ip):
try:
snmpClient.sendto(str2Binary(snmpData),(ip,161))
recvData = snmpClient.recv(4096)
if "\\x00\\x02\\x01\\x00" in str(repr(recvData)):
print "Vulnerable"
else:
print "Safe"
except Exception,reason:
print "Safe"
if __name__ == "__main__":
snmpScan(sys.argv[1])