nmap操作说明之使用nmap进行渗透测试

使用Nmap进行渗透测试

信息收集

脚本解释
–script ip-geolocation-*IP信息搜集
whoisWHOIS查询
http-email-harvest搜集E-mail信息
hostmap-ip2hostsIP反查
dns-bruteDNS信息搜集
membase-http-info检索系统信息
smb-security-mode.nse后台打印机服务漏洞
smb-check-vulns.nse系统漏洞扫描
http-stored-xss.nse扫描web漏洞
snmp-win32-services通过Snmp列举Windows服务/账户
dns-brute枚举DNS服务器的主机名
http-headers/http-sitemap-generatorHTTP信息收集
ssl-enum-ciphers枚举SSL秘钥
ssh-hostkeySSH服务密钥信息探测

IP信息搜集

nmap  --script  ip-geolocation-*  www.0day.co

可以获取目标域名的IP地址,并且还可以确定该IP地址为一个香港地区IP,这个IP的开放端口有80端口、443端口。如果目标域名使用了CDN,那么这个方法无效,我们获取的知识目标域名的CDN的相关情况,并不是目标域所对应的真正IP地址。

WHOIS查询

nmap  --script  whois www.0day.co

大部分的网站现在启用了whois保护,对于域名所有者的姓名、电话都会隐藏,我们可以查询该域名的历史whois,历史whois可能还没有启用whois保护。

nmap  --script  whois  --script-args  whois.whodb=nofollow www.0day.co

如果目标域名较多,可以使用列表的方式进行查询。

nmap  -sn  --script  whois  -v  -iL  host.txt

搜集E-mail信息

namp  --script  http-email-harvest  www.0day.co

IP反查

IP反查可以将所有绑定到该IP的域名显示出来,这样我们就可以很清楚的知道有几个站点在同一个服务器上。

nmap -sn --script  hostmap-ip2hosts  www.0day.co

IP反查会查询绑定在这一个IP上的所有域名,如果是单一的Ip则不会有结果,如果目标使用的是虚拟主机则会显示结果;如果目标使用了CDN也会显示相关结果,但是这个结果是不准确的,此时查询的IP并不是真正的IP。

DNS信息搜集

nmap  --script dns-brute  www.xxxx.com   基于暴力破解

检索系统信息

nmap  -p  445  192.168.126.131  --script  membase-http-info

后台打印机服务漏洞

nmap  --script smb-security-mode.nse -p 445 192.168.126.128

系统漏洞扫描

nmap  --script smb-check-vulns.nse -p445  192.168.126.128

扫描web漏洞

nmap  -p80 --script  http-stored-xss.nse  www.xxx.com

通过Snmp列举Windows服务/账户

nmap  -sU -p 161 --script=snmp-win32-services 192.168.126.128

枚举DNS服务器的主机名

nmap  --script  dns-brute  --script-args  dns-brute.domain=baidu.com

HTTP信息搜集

使用-sV选项即可对HTTP版本进行探测

nmap -sV -p 80 www.0day.com

对目标地址进行HTTP头部信息探测

nmap -p 80 --script=http-headers  baidu.com

web目录结构

nmap -p 80  --script=http-sitemap-generator www.baidu.com

枚举SSL秘钥

TSL与SSL在传输层对网络连接进行加密

nmap -p 443  --script=ssl-enum-ciphers  www.baidu.com

SSH服务秘钥信息探测

查看SSH服务的密钥信息

nmap -p 22  --script  ssh-hostkey  --script-args  ssh_hostkey=full  127.0.0.1

数据库渗透

脚本解释
mysql-databasesMySQL列举数据库
mysql-variables列举MySQL变量
mysql-empty-password检查MySQL密码
mysql-brute审计MySQL密码
mysql-audit审计MySQL安全配置
oracle-brute审计Oracle密码
ms-sql-brute审计msSQL密码
ms-sql-empty-password检查msSQL空密码
ms-sql-tables读取msSQL数据
ms-sql-xp-cmdshellmsSQL执行系统命令
pgsql-brute审计PgSQL密码

MySQL列举数据库

nmap -p3306 --script mysql-databases  --script-args mysqluser=root,mysqlpass 192.168.84.1

如果我们已知目标MySQL的账号和密码,就可以轻易地夺取目标MySQL的所有数据库。如果目标数据库段端口更改了,我们也需要使用-p参数指定相应的数据库端口,使用mysqluser指定目标数据库账号,mysqlpass指定目标数据库密码,如果密码为空则不需要填写任何东西,最后指向目标IP

列举MySQL变量

nmap -p3306  --script=mysql --variables  192.168.84.1

如果仍无法确定可以使用-sV扫描端口

nmap  	 -sV  --script=mysql --variables  192.168.84.1

检查MySQL密码

nmap  -p3306  --script=mysql-empty-password  192.168.84.1

如果无法确定目标开放的端口,可以用-sV选项扫描

nmap   -sV  --script=mysql-empty-password  192.168.84.1

审计MySQL密码

nmap  --script=mysql-brute  192.168.84.1

该脚本用于MySQL弱口令,默认Nmap会扫描全部的端口用于查找MySQL端口,但是我们可以使用-p选项指定一个端口,也可以自定义账号密码字典。

nmap -p 3306  --script=mysql-brute  userdb=/root/passdb.txt  passdb=/root/pass.txt  192.168.0.110

审计MySQL安全配置

nmap -p 3306 --script mysql-audit --script-args “mysql-audit.username=’root’,\mysql-audit.password=’ ‘ ,  mysql-audit.filename=’nselib/data/mysql-cis.audit’”  192.168.84.1

审计Oracle密码

nmap  --script oracle-brute -p 1521  --script-args  oracle-brute.sid=test  192.168.126.131

使用字典

nmap  --script  oracle-brute  -p  1521  --script-args  oracle-brute.sid=test  --script-args
userdb=/tmp/username.txt,passdb=/tmp/passwords.txt  192.168.126.131

审计msSQL密码

nmap  -p  1433  --script  ms-sql-brute  --script-args  userdb=name.txt,passdb=pass.txt

检查msSQL空密码

nmap  -p 1433 --script  ms-sql-empty-password  192.168.126.1

读取msSQL数据

nmap  -p 1433  -script  ms-sql-tables  -script-args  mssql.username=sa,mssql.password=sa 192.168.126.131

msSQL执行系统命令

nmap  -p  1433  --script  ms-sql-xp-cmdshell  --script-args  mssql.username=sa, mssql.password=sa, ms-sql-xp-cmdshell.cmd=”ipconfig” 192.168.126.1

审计PgSQL密码

nmap  -p  5432  --script pgsql-brute 192.168.126.131

渗透测试

脚本解释
http-brute审计HTTP身份验证
ftp-brute审计FTP服务器
http-wordpress-brute审计Wordpress程序
http-joomla-brute审计Joomla程序
pop3-brute审计邮件服务器
smb-brute.nse审计SMB口令
vnc-brute审计VNC服务器
smtp-brute审计SMTP服务器
stuxnet-detect检测Stuxnet蠕虫
snmp-netstatSNMP安全审计
snmp-processesSNMP安全审计
snmp-win32-servicesSNMP安全审计
snmp-bruteSNMP安全审计

审计HTTP身份验证

nmap  --script  http-brute -p 80 www.0day.com

审计FTP服务器

nmap  --script  ftp-burte  -p  21  192.168.126.128

使用字典爆破

nmap  --script  ftp-burte  --script-args  userdb=user.txt,passdb=pass.txt -p 21 192.168.126.128

审计Wordpress程序

nmap  -p80  --script  http-wordpress-brute  192.168.126.131

使用字典

nmap  -p80  --script  http-wordpress-brute  --script-args userdb=user.txt,passdb=passwd.txt  192.168.126.131

设置线程数

nmap -p80  --script http-wordpress-brute  --script-args  http-wordpress-brute.threads=10 192.168.126.131

审计Joomla程序

nmap  -p80 --script  http-joomla-brute  192.168.126.131

使用字典

nmap -p80 --script  http-joomla-brute  --script-args  userdb=users.txt,passdb=passwds.txt  192.168.126.131

增加线程

nmap -p80 --script  http-joomla-brute  --script-args  userdb=users.txt,passdb=passwds.txt, http-joomla-brute.threads=5  192.168.126.131

审计邮件服务器

nmap  -p110  --script=pop3-brute 192.168.126.131

审计SMB口令

nmap --script  smb-brute.nse -p445  192.168.126.128

使用字典

nmap  --script  smb-brute.nse  --script-args  passdb=pass.txt  -p445  192.168.126.128

审计VNC服务器

nmap  --script  vnc-brute  -p  5900 192.168.126.131 

审计SMTP服务器

nmap -p 25  --script  smtp-brute 192.168.126.131

枚举远程系统所有用户

namp -p 25 --script=smtp-enum-users.nse  smtp.xx.com

检测Stuxnet蠕虫

nmap  --script  stuxnet-detect -p 445 192.168.126.131

SNMP安全审计

nmap  -sU -p 161  --script=snmp-netstat 192.168.121.3

在nmap中snmp-processes脚本可以通过SNMP服务协议枚举运行的系统进程。

nmap  -sU  -p  161  --script=snmp-processes 192.168.131.1

获得windows服务器的服务

nmap  -sU -p 161  --script=snmap-win32-services 192.168.121.1

对目标服务器snmp服务进行口令审计

nmap -sU -p 161 --script snmp-brute 192.168.121.1

Nmap脚本引擎原理

虽然Nmap内嵌的服务于版本探测已足够强大,但是在某些情况下我们需要多伦次的交互才能够探测到服务器的信息,这时候就需要自己编写NSE插件实现这个功能。NSE插件能够完成网络发现、复杂版本探测、脆弱性探测、简单漏洞利用等功能。

由上图可以看到四类脚本的运行阶段,以及他们的功能。

  • 1)在nmap_main里面,调用init_main()进行详细的初始化过程,加载Lua标准库与Nmap扩展库,准备参数环境,加载并执行nse_main.lua文件;这个文件加载用户选择的脚本文件,执行完之后返回函数对象给init_main(),被保存到Lua注册表中。
  • 2)在nse_main.lua中,定义两个核心的类,Script和Thread,Script用于管理NSE脚本,当新的脚本被加载时,调用 Script.new创建脚本对象,该对象被保存下来在后续的扫描过程中使用;Thread用于管理脚本的执行,该类中也包含对脚本健全性的检查。在脚本执行时,如果脚本之间存在依赖关系,那么会将基础的无依赖的脚本统一执行完毕,再执行依赖性的脚本。
  • 3)执行脚本扫描时,从nmap_main()中调用script_scan()函数。在进入script_scan()后,会标记扫描阶段类型,然后进入到初始化阶段返回的main()函数(来自nse_main.lua脚本中的main)中,在函数中解析具体的扫描类型。
  • 4)main()函数负责处理三种类型的脚本扫描:预扫描(SCRIPT_PRE_SCAN)、脚本扫描(SCRIPT_SCAN)、后扫描 (SCRIPT_POST_SCAN)。预扫描即在Nmap调用的最前面(没有进行主机发现、端口扫描等操作)执行的脚本扫描,通常该类扫描用于准备基本的信息,例如到第三服务器查询相关的DNS信息。而脚本扫描,是使用NSE脚本来扫描目标主机,这是最核心的扫描方式。后扫描,是整个扫描结束后,做一些善后处理的脚本,比如优化整理某些扫描。
  • 5)在main()函数中核心操作由run函数负责。而run()函数的本身设计用于执行所有同一级别的脚本(根据依赖关系划分的级别),直到所有线程执行完毕才退出。run()函数中实现三个队列:执行队列(Running Queue)、等待队列(Waiting Queue)、挂起队列(Pending Queue),并管理三个队列中线程的切换,直到全部队列为空或出错而退出。

参考资料:

《nmap渗透测试指南》 商广明 编写
https://nmap.org/nsedoc/ nmap脚本说明文档
https://nmap.org/nmap-fingerprinting-article-cn.html 使用TCP/IP协议栈指纹进行远程操作系统辨识
https://www.jianshu.com/p/4978fb900de3 谈谈扫描器
http://www.cnblogs.com/st-leslie/p/5115280.html 端口扫描之王
http://www.bubuko.com/infodetail-368336.html 安全工具 nmap强悍的扫描工具
https://zhuanlan.zhihu.com/p/26676508 渗透神器nmap
http://www.cnblogs.com/liun1994/p/7041373.html Nmap脚本引擎原理
https://blog.csdn.net/whatday/article/details/73823959 nmap脚本使用总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值