如何从Nmap输出中提取服务信息用于Searchsploit检测?
问题:提取Nmap扫描结果中的服务信息用于Searchsploit漏洞检测
我有个项目,需要提取Nmap扫描得到的服务信息,用来在Searchsploit里做漏洞检测。我知道-oX和--nmap选项,但它们没法给出我要的精准内容。我试过从-oN输出里提取列、从-oX里用grep拿产品和版本信息、从-oG里提取//与/之间的内容,但都没成功。
以下是我的Nmap扫描输出(使用nmap -sV -oG test.txt 192.168.0.15生成):
# Nmap 7.93 scan initiated Fri May 19 12:53:56 2023 as: nmap -sV -oG test.txt 192.168.0.15 Host: 192.168.0.15 () Status: Up Host: 192.168.0.15 () Ports: 21/open/tcp//ftp//vsftpd 2.3.4/, 22/open/tcp//ssh//OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)/, 23/open/tcp//telnet//Linux telnetd/, 25/open/tcp//smtp//Postfix smtpd/, 53/open/tcp//domain//ISC BIND 9.4.2/, 80/open/tcp//http//Apache httpd 2.2.8 ((Ubuntu) DAV|2)/, 111/open/tcp//rpcbind//2 (RPC #100000)/, 139/open/tcp//netbios-ssn//Samba smbd 3.X - 4.X (workgroup: WORKGROUP)/, 445/open/tcp//netbios-ssn//Samba smbd 3.X - 4.X (workgroup: WORKGROUP)/, 512/open/tcp//exec//netkit-rsh rexecd/, 513/open/tcp//login?///, 514/open/tcp//tcpwrapped///, 1099/open/tcp//java-rmi//GNU Classpath grmiregistry/, 1524/open/tcp//bindshell//Metasploitable root shell/, 2049/open/tcp//nfs//2-4 (RPC #100003)/, 2121/open/tcp//ftp//ProFTPD 1.3.1/, 3306/open/tcp//mysql//MySQL 5.0.51a-3ubuntu5/, 5432/open/tcp//postgresql//PostgreSQL DB 8.3.0 - 8.3.7/, 5900/open/tcp//vnc//VNC (protocol 3.3)/, 6000/open/tcp//X11//(access denied)/, 6667/open/tcp//irc//UnrealIRCd (Admin email admin@Metasploitable.LAN)/, 8009/open/tcp//ajp13//Apache Jserv (Protocol v1.3)/, 8180/open/tcp//http//Apache Tomcat|Coyote JSP engine 1.1/ Ignored State: closed (977) # Nmap done at Fri May 19 12:54:08 2023 -- 1 IP address (1 host up) scanned in 11.88 seconds
解决方案
针对你提供的-oG格式输出,以下是几个精准提取服务/版本信息的命令:
方法1:提取服务名+版本(适合手动复制到Searchsploit)
grep -oP 'Ports: .*' test.txt | tr ',' '\n' | awk -F'//' '{if ($4 != "") print $3, $4}' | sed 's/\/$//'
执行后输出示例:
ftp vsftpd 2.3.4 ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) telnet Linux telnetd smtp Postfix smtpd ...
命令解释:
grep -oP 'Ports: .*':提取包含端口信息的整行tr ',' '\n':把逗号分隔的每个端口条目拆分成单独行awk -F'//':用//作为分隔符拆分字段,第3段是服务类型,第4段是产品和版本sed 's/\/$//':去掉每个条目末尾的斜杠
方法2:自动批量查询Searchsploit
直接把提取到的服务信息传入Searchsploit,自动检测每个服务的漏洞:
grep -oP 'Ports: .*' test.txt | tr ',' '\n' | awk -F'//' '{if ($4 != "") print $4}' | sed 's/\/$//' | while read service; do echo -e "\n=== 检测 $service ==="; searchsploit "$service"; done
方法3:利用Nmap XML输出(-oX)提取
如果你改用-oX生成XML格式输出(比如nmap -sV -oX test.xml 192.168.0.15),可以用xmllint精准提取产品和版本:
xmllint --xpath '//service[@product] | //service[@version]' test.xml | grep -oP 'product="[^"]+"|version="[^"]+"' | tr '"' '\n' | paste - - | awk '{print $2, $4}'
内容的提问来源于stack exchange,提问作者Roman Garres
相关产品推荐
相关产品推荐

