Nmap脚本使用指南 倾旋

发表于:2017-8-30 16:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:一叶知安    来源:知乎专栏

  0x00 介绍
  本文由 一叶知安作者:倾旋 原创。未经许可,严禁转载!
  nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
  —— 来自百度百科
  那么今天带大家来揭露Nmap的另一个面纱 ,那就是脚本。 
  在某些时候,我们大部分都使用Nmap进行扫描,然后再通过Metasploit进行漏洞利用,但是这个过程比较繁琐,一个个漏洞去验证的话还需要打开MSF去设置参数,最后run/exploit(不包括自动化,所以不要喷了)。
  那么我们就要有必要认识一下Nmap的扩展脚本啦~
  0x01 脚本参数
  这个小例子中我会演示几个基本的脚本使用方式,但是更多的还是需要大家掌握使用脚本的技巧,然后自行发掘了。笔者在此不概述太多。
  SCRIPT SCAN:
    -sC: equivalent to --script=default
    --script=<Lua scripts>: <Lua scripts> is a comma separated list of
             directories, script-files or script-categories
    --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
    --script-args-file=filename: provide NSE script args in a file
    --script-trace: Show all data sent and received
    --script-updatedb: Update the script database.
    --script-help=<Lua scripts>: Show help about scripts.
             <Lua scripts> is a comma-separated list of script-files or
             script-categories.
  上面这部分是Nmap关于脚本的参数,下面一个一个来介绍:
  -sC 是指的是采用默认配置扫描,与--script=default参数等价
  --script=脚本名称,脚本一般都在Nmap的安装目录下的scripts目录中
  那么Linux下可以查看脚本数量:
  ls /usr/share/nmap/scripts/ | wc -l
  516
  那么我当前的Nmap是有516个很使用的漏洞利用、工具脚本。也可以使用下面一条命令导出 ~
  ls /usr/share/nmap/scripts/ | sed 's/.nse//' > scripts.list
  那么所有的脚本名称都在scripts.list中了,这样做的原因是因为我们传递脚本名称的时候,不能写脚本的文件扩展名(.nse)。
  --script-args=key1=value1,key2=value2... 该参数是用来传递脚本里面的参数的,key1是参数名,该参数对应value1这个值,那么有更多的参数,使用逗号连接,后面例子中会给大家讲解。
  –script-args-file=filename,使用文件来为脚本提供参数。 
  --script-trace 如果设置该参数,则所有的脚本收发请求过程。
  --script-updatedb 在Nmap的scripts目录里有一个script.db,该文件中保存了当前Nmap可用的脚本,类似于一个小型数据库,如果我们开启nmap并且调用了此参数,则nmap会自行扫描scripts目录中的扩展脚本,进行数据库更新。
  --script-help=脚本名称,调用该参数后,Nmap会输出该脚本名称对应的脚本使用参数,以及详细介绍信息。
  0x02 实战
  现在我们用一个很简单的脚本,telnet爆破脚本,我们搜索一下:
  root@ThundeRobot:/usr/share/nmap# ls /usr/share/nmap/scripts/ | grep telnet
  telnet-brute.nse
  telnet-encryption.nse
  那么可以看到,返回了两个nse脚本名称,那么第一个就是telnet爆破的脚本了,如果不清楚的话,可以使用上面刚介绍过的--script-help参数。
  root@ThundeRobot:/usr/share/nmap# nmap --script-help=telnet-brute
  Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 03:11 CST
  telnet-brute
  Categories: brute intrusive
  https://nmap.org/nsedoc/scripts/telnet-brute.html
    Performs brute-force password auditing against telnet servers.
  可以看到 有一个Nmap的文档地址,正是我们现在想要使用的脚本的详细信息。
  nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s <target>
  笔者就直接照搬官网文档的例子了。经常做安全测试的朋友肯定看一眼就会用了。
  最后那个 target指的是我们的目标地址。userdb是用户名字典,passdb是密码字典,timeout是每次连接之间的等待超时时间。
  当然了,我们也可以直接查看脚本源文件:
  ---
  -- @usage
  --   nmap -p 23 --script telnet-brute \
  --      --script-args userdb=myusers.lst,passdb=mypwds.lst \
  --      --script-args telnet-brute.timeout=8s \
  --      <target>
  --
  -- @output
  -- 23/tcp open  telnet
  -- | telnet-brute:
  -- |   Accounts
  -- |     wkurtz:colonel
  -- |   Statistics
  -- |_    Performed 15 guesses in 19 seconds, average tps: 0
  --
  -- @args telnet-brute.timeout   Connection time-out timespec (default: "5s")
  -- @args telnet-brute.autosize  Whether to automatically reduce the thread
  --                              count based on the behavior of the target
  --                              (default: "true")
  author = "nnposter"
  license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
  categories = {'brute', 'intrusive'}
  portrule = shortport.port_or_service(23, 'telnet')
  上方这块,可以看到有一个例子,还有常规的扫描结果。那么加粗的这行是笔者故意为之,因为在某些情况下,管理员可能会更改telnet服务的端口(这里不只是光指Telnet),那么我们就无法使用这个脚本了。聪明的你一定想到了更改上方的23端口吧!但是这还不够灵活~ 我们可以将端口号自制成一个变量,通过我们的脚本参数传递进去。这里不再过多赘述,有违文章主体。
  等等……还记得我们的-sC参数吗?其实它等价与--script=default,那么default调用了那些脚本呢?
  在这里: 
  default NSE Category
  点进去你一定会惊讶,为什么会调用那么多,而且会影响扫描速度(懒人方案)。所以最好的方案就是根据服务去手动调用合适的脚本。
  下面我们来实战一下,今日刚发现的运营商漏洞,就出在Telnet上。
  我家上网是没有分配公网IP的,就是路由那里是一个内网,于是我先用nmap探测了一下这个内网,发现有某些网络设备。
  nmap -sT -Pn -F 10.14.16.0/24
  我在结果中发现了一台主机的信息:
  Nmap scan report for bogon (10.14.16.106)
  Host is up (0.021s latency).
  Not shown: 95 filtered ports
  PORT      STATE SERVICE
  23/tcp    open  telnet
  53/tcp    open  domain
  1723/tcp  open  pptp
  8081/tcp  open  blackice-icecap
  49152/tcp open  unknown
  作为一个搞Web安全的,首先去看的是8081……但是未果。于是准备从Telnet碰碰运气,会不会运营商也用若口令?
  我把字典放到了 /usr/share/nmap/nselib/data,因为这个目录中是专门存放Nmap默认字典的。
  扫描命令如下:
  nmap -p 23 -Pn --script=telnet-brute --script-args=userdb=admin.lst,passdb=passwords.lst,telnet-brute.timeout=3s --script-trace 10.14.16.106
  在这我用--script-trace开启了数据的收发开关:
  经过耐心等待,得到爆破结果:
  看来都是真的,童话原来不是谎言。
  我们登录看看~
  What ? 多协议路由?
  为此我还复习了以前干网络工程的知识。这个不谈了。我们继续再来个例子 ~
  root@ThundeRobot:/usr/share/nmap/nselib/data# nmap --script=http-ls vault.centos.org
  Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-28 04:01 CST
  Nmap scan report for vault.centos.org (109.72.83.61)
  Host is up (0.38s latency).
  Other addresses for vault.centos.org (not scanned): 2607:ff28:0:28:5054:ff:fe4b:3e8a
  Not shown: 998 filtered ports
  PORT    STATE SERVICE
  80/tcp  open  http
  | http-ls: Volume /
  |   maxfiles limit reached (10)
  | SIZE  TIME               FILENAME
  | -     19-Aug-2009 01:36  2.1/
  | 1.2M  19-Aug-2009 01:36  2.1/centos2-scripts-v1.tar
  | -     07-Sep-2004 13:04  2.1/extras/
  | -     13-May-2004 03:26  2.1/final/
  | -     15-Apr-2004 05:11  2.1/i386/
  | -     08-Jan-2004 00:50  2.1/source/
  | -     30-Dec-2003 06:18  2.1/updates/
  | -     31-Jul-2005 16:05  3.1/
  | -     20-Apr-2012 10:14  3.1/SRPMS/
  | -     15-Sep-2004 14:17  3.1/addons/
  |_
  873/tcp open  rsync
  Nmap done: 1 IP address (1 host up) scanned in 58.35 seconds
  root@ThundeRobot:/usr/share/nmap/nselib/data# 
  
   这边是扫描了http://centos.org的列目录的安全隐患。
  HTTP认证爆破:
   nmap --script=http-brute dvwa.vuln.leafsec.com
  0X03 延伸 
  漏洞利用方面:vuln NSE Category
  权限验证方面:auth NSE Category
  暴力破解方面:brute NSE Category
  服务信息发现:discovery NSE Category
  DOS攻击方面:dos NSE Category
  漏洞利用方面:https://nmap.org/nsedoc/categories/exploit.html
  外部扩展方面:external NSE Category (集成了shodanAPI)
  FUZZ测试方面:fuzzer NSE Category
  一些针对的服务入侵模块:intrusive NSE Category
  恶意后门方面:malware NSE Category
  版本识别:version NSE Category
  auth
  broadcast
  brute
  default
  discovery
  dos
  exploit
  external
  fuzzer
  intrusive
  malware 
  safe
  version
  vuln 
  all
  以上参数都可以作为--script的通配参数,例如:--script=vuln
  --script=all 调用所有脚本扫描 
  0x04 总结
  这篇文章没什么技术含量,只是弹性较高,算是一个小干货了,Nmap可以做数据库、系统、协议、网络等方面的评估。就是因为插件很丰富,省时省力。也希望大家在使用工具的同时细心一点,多做总结,这些脚本都是可以继续优化起来的。那么就先到此结束啦~ 另外关于字典,我们可以让nmap的字典更加强大,全部放到nmap/nselib/data就可以了,方便后期的调用与整理。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号