![SNMP 지원 장치에 대한 Nmap 스캔](https://linux55.com/image/104035/SNMP%20%EC%A7%80%EC%9B%90%20%EC%9E%A5%EC%B9%98%EC%97%90%20%EB%8C%80%ED%95%9C%20Nmap%20%EC%8A%A4%EC%BA%94.png)
Nmap은 네트워크에서 SNMP 지원 장치를 검색합니다.
sudo nmap -sU -p 161 --script default,snmp-sysdescr 26.14.32.120/24
snmp-sysdescr
nmap이 개체에 특정 항목이 있는 장치 만 반환하도록 만드는 방법을 알아내려고 합니다 .
snmp-sysdescr: "대상 장치 이름"
그게 가능합니까?
답변1
Nmap에는 많은 출력 필터링 옵션이 포함되어 있지 않습니다. --open
열린 포트를 포함하는 호스트로 출력을 제한합니다(어느열린 포트). -v0
화면에 출력되지 않습니다.
대신 이를 달성하는 가장 좋은 방법은XML 출력구문 분석하기 쉬운 XML 형식으로 스캔을 통해 수집된 모든 정보를 포함하는 스캔 정보(사용 -oX
또는 출력 옵션). -oA
그런 다음 XML 구문 분석 도구를 사용하여 원하는 정보를 포함하도록 필터링할 수 있습니다.
명령줄 XML 파서는 다음과 같습니다.xmlstarlet
. 이 명령을 사용하면 sysdescr
"example" 문자열이 포함된 대상의 IP 주소 만 필터링할 수 있습니다 .
xmlstarlet sel -t -m "//port/script[@id='snmpsysdescr' and contains(@output,'example')]/../../../address[@addrtype='ipv4']" -v @addr -n output.xml
당신은 또한 이것을 할 수 있습니다엔디프, 이는 Nmap과 함께 배포되는 도구이자 Python 2 라이브러리입니다.
#!/usr/bin/env python
import ndiff
def sysdescr_contains (value, host):
for port in host.ports:
for script in filter(lambda x: x.id == u"snmp-sysdescr", port.script_results):
if value in script.output:
return True
return False
def usage ():
print """Look for <substring> in snmp-sysdescr output and print matching hosts.
Usage: {} <filename.xml> <substring>"""
if __name__ == "__main__":
import sys
if len(sys.argv) < 3:
usage()
exit(1)
scan = ndiff.Scan()
scan.load_from_file(sys.argv[1])
for host in filter(lambda x: sysdescr_contains(sys.argv[2], x), scan.hosts):
print host.format_name()
대부분의 일반적인 프로그래밍 언어에 대해 다른 Nmap 출력 구문 분석 라이브러리가 제공됩니다.
답변2
nmap -p 161 ip, nmap -p 162 ip 명령을 사용하여 nmap을 사용할 수 있습니다.
공개 시장에는 호스트나 장치의 포트가 열려 있는 경우 쓰기 가능한 SNMP 정보를 생성할 수 있는 익스플로잇이 있습니다.
포트가 닫히면 취약점이 발생하지 않음
이 정보가 유효하길 바랍니다