这是备忘单的最后一部分,在这里主要讲述漏洞评估和渗透测试。

数据库审计

列出数据库名称

nmap -sV --script=mysql-databases 192.168.195.130

上图并没有显示数据库列表,因为用户名和密码是空的。通过设置参数来指定用户名和密码。

nmap -sV --script=mysql-databases --script-args mysqluser=root,mysqlpass=toor 192.168.195.130

用户审计

用密码进行身份验证。通过暴力破解或者空口令获得凭据。

nmap -sV --script=mysql-users 192.168.195.130

检查root空口令

sudo nmap --script mysql-empty-password 192.168.195.130

Mysql Server变量清单

在默认情况下,开发人员或DBA人忘了设置正确的数据库环境。以下可以用来检索环境设置。

nmap -p3306 --script mysql-variables localhost

暴力破解

使用nmap脚本来暴力破解用户名和密码

nmap --script=mysql-brute localhost

哈希转储

转储密码的哈希值,通过使用John the Ripper进行暴力破解。需要root权限。

nmap --script=mysql-dump-hashes localhost

Mysql信息

这是信息搜集的一部分,有助于后期的渗透

nmap --script=mysql-info localhost

Mysql枚举

当我们获取了数据库的root权限,我们可以收集到合法的用户名和密码。

nmap --script=mysql-enum localhost

使用CVE-2012-2122

记住mysql最可怕的漏洞CVE-2012-2122,攻击者使用root尝试300次登陆后,成功进入了数据库。

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2122

http://www.exploit-db.com/exploits/19092/

http://blog.trendmicro.com/trendlabs-security-intelligence/mysql-password-verification-bypass-cve-2012-2122/

nmap –script=mysql-vuln-cve2012-2122 localhost

但是运气不好,端口被过滤了。我是用了-d选项来查看debug信息。它显示因为端口被过滤所以没有任何响应。我建议读者通过shodan去搜索。

对邮件服务器渗透测试

我们可以使用Nmap脚本对邮件服务的攻击如下:

使用谷歌搜索发现有效的电子邮件帐户

检测开放中继

暴力破解SMTP密码

枚举SMTP服务器的用户

检测SMTP服务器的后门

暴力破解IMAP密码

检索IMAP邮件服务器的功能

暴力破解POP3密码

检索POP3邮件服务器的功能

检测4.70到4.75版本的Exim SMTP的漏洞

使用谷歌搜索发现有效的电子邮件帐户

nmap -p80 --script=http-email-harvest target

检测开放中继

什么是开放中继?是指任何人都可以用来发信的SMTP服务器。这曾是许多邮件服务器的默认配置。

使用nmap检测开放中继的命令如下:

nmap -sV --script smtp-open-relay -v localhost

暴力破解SMTP密码

邮件服务器通常存储非常敏感的信息,且渗透测试人员需要对他们进行暴力破解密码来审计检查弱密码。

nmap -p25 -Pn --script smtp-brute target

枚举SMTP服务的用户

将邮箱作为用户名在web应用程序中非常常见,在审计邮件服务器时,收集用户名是一个必要的任务。感谢nmap的脚本引擎可以自动化执行该任务。

nmap -p25 --script smtp-enum-users target

检测SMTP服务器后门

nmap -sV --script smtp-strangeport target

暴力破解IMAP密码

nmap -p143 --script imap-brute target

检索IMAP邮件服务器的功能

IMAP服务器可以支持不同的功能,有个名为CAPABILITY的命令,允许用户列出邮件服务器支持的命令。我们可以使用NMAP自动完成这个任务。

nmap -p143,993 -Pn --script imap-capabilities target

暴力破解POP3密码

nmap -p110 –script pop3-brute google.com

检索POP3邮件服务器支持的功能

POP3邮件服务器可以支持RFC2449定义的不同功能的POP3命令。多亏了Nmap,我们就可以自动完成这个任务,可以在我们的扫描结果显示这种服务的信息。

nmap -p110 –script pop3-capabilities target

检测4.70到4.75版本的Exim SMTP的漏洞

4.70到4.75版本之间的Exim SMTP存在字符串格式化漏洞,允许攻击者远程执行代码。NMAP NSE能帮助渗透测试人员来远程检测此漏洞。

nmap –script smtp-vuln-cve2011-1764 –script-args mailfrom=<Source address>,mailto=<Destination address>,domain=<domain> -p25,465,587 <target>

Nmap脚本引擎开发(NSE)

通过前面的例子,我们已经了解到NSE的力量是如何的强大。NMAP的NSE可针对网络和Web应用程序开发自定义的脚本。

NSE基本上是由lua语言开发。

Nmap脚本格式

NSE脚本包含5个字段和一个端口或者主机的定义规则。

描述域

这个字段用来描述脚本。

类别域

该字段描述脚本所属的类别。参考如下演示。

categories = {“default”, “discovery”, “safe”}

作者域

这个字段描述脚本的所有者和联系信息。

许可证域

该字段可帮助确保我们有分发所有附带的Nmap脚本的法律许可。所有这些脚本目前使用的标准Nmap许可证,这是可选字段。它们包括以下行作为标准。

license = “Same as Nmap–See http://nmap.org/book/man-legal.html”

依赖域

该字段包含了在执行该脚本之前需要运行的脚本名称。这使得脚本可以调用另外一个脚本执行的结果。例如,大多数的smb-*脚本依赖于smb-brute,因为通过smb-brute发现的账户可能会让其他的smb脚本获得更多信息。列出依赖脚本并不会导致那些脚本被运行。它需要-script或其他选项来调用。依赖的脚本会强制按照列表内的顺序执行。下面是例子。

dependencies = {“smb-brute”}

规则

NMAP使用脚本的规则,以确定一个脚本应针对某个目标是否需要运行。规则是一个Lua函数,返回true或false。如果规则计算结果为true时才执行脚本操作功能。

脚本必须包含以下一个或多个功能用来确定脚本的运行:

prerule()

hostrule(主机)

portrule(主机,端口)

postrule()

任何主机被扫描之前,prerule脚本在脚本预扫描阶段运行一次。hostrule和portrule脚本在每个主机被扫描后运行。 postrule脚本在所有主机都被扫描后执行一次。脚本可以在一个以上的阶段运行,如果它有几个规则的话。

操作

操作是NSE脚本的核心部分。它包含了脚本在prerule,portrule,hostrule或postrule触发时执行的所有指令。这是一个Lua函数,接受相同的参数规则。操作的返回值可能是key-value,字符串,或者null。相关信息请查阅http://nmap.org/book/nse-api.html#nse-structured-output

环境变量:每个脚本都有自己的一套环境变量。

SCRIPT_PATH:介绍了脚本路径。

SCRIPT_NAME:介绍了脚本的名称。此变量可以在调试输出被使用。

SCRIPT_TYPE:

由于脚本可以有多个规则函数,这个环境变量将显示哪些规则激活了脚本。脚本可以在不同的扫描阶段共享相同的代码。这将需要四个字符串值:“prerule”,“hostrule”,“portrule”或“postrule”。这些变量只能在规则函数评估中或评估完成后生效。

列出所有的库

Lua有很多方便开发的功能,但是NSE有自建的内部库用于NSE的开发。目录nselib包含了很多库,开发者可以利用这些库开发新的脚本。库列表如下。

Afp

Patrik Karlsson <patrik@cqure.net>编写的用来与苹果AFP服务进行交流的脚本,但是功能并不齐全。

Ajp

根据来自Apache的mod_proxy_ajp可用文档的基本AJP 1.3执行; http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html

Amqp

AMQP库提供用于检索的AMQP服务器的属性信息的一些基本功能。

ASN1

ASN.1功能

base32

Base32编码和解码。遵循RFC 4648。

BASE64

base64编码和解码。遵循RFC 4648。

Bin

打包和解包二进制数据

对整数位操作

比特币

此库实现Bitcoin的协议的一个小子集。它目前支持的版本握手,并处理地址响应。

Bittorrent

BitTorrent和DHT协议库,使用户能够读取torrent文件的信息,解码B编码(BitTorrent的编码)的缓冲区,找到联系在一起的其他客户端,和在搜索客户端中发现的结点。

Bjnp

佳能BJNP协议的实现,用于发现和查询佳能网络打印机和扫描仪设备。

Brute

brute库是试图建立对远程服务执行密码猜测的共同框架。

Cassandra

作为一个cassandra的客户端

Citrixxml

这个模块的作者是帕特里克·卡尔森,用来与Citrix XML服务进行通信。它功能不齐全,缺少一些功能和参数。

Comm

网络探索任务中的常用框架,比如banner的抓取和数据交换。

Creds

nmap支持的凭证类

CVS

一个最小的CVS(并行版本系统)的pserver协议实现,它目前只支持验证。

Datafiles

阅读和分析nmap的数据文件,比如nmap-protocols, nmap-rpc, nmap-services, 和nmap-mac-prefixes.

DHCP

实现一个动态主机配置协议(DHCP)客户端。

对于更多的库,我们可以按照下面的链接:

http://nmap.org/book/nse-library.html

http://nmap.org/nsedoc/

Nmap API

Nmap API对于安全研究员和渗透测试人员非常有用,在扫描和利用过程中自定义设置。nmap扫描主机结束后得到的数据作为脚本的参数。主机和参数封装为一个lua表。如果脚本匹配hostrule,将会得到主机信息,如果脚本匹配portrule,将会得到主机和端口的信息。

接下来看看API的规则

Host

这个表是作为一个参数传递给rule和action功能。它包含操作系统的细节。

Host.os

用数组的方式来显示匹配的os列表。例子如下:

host.os = {

{

name = <string>,----Linux 2.6/3.2

classes = {

{

vendor = <string>,------Linux

osfamily = <string>,-------Linux

osgen = <string>,------2.6.x

type = <string>,---------general purpose

cpe = {---------------------"cpe:/o:linux:linux_kernel:3"

"cpe:/<...>",

[More CPE]

}

},

[More classes]

},

},

[More OS matches]

}

跟host.os类似的还有host.ip,host.name,host.region等。完全的组件请查阅http://nmap.org/book/nse-api.html.

网络API连接

使用Nmap自带的nsock库可以高效且并行运行网络I/O。

连接API

这是网络api的一部分,下面是连接api的例子。

require(“nmap”)

local socket = nmap.new_socket()

socket:set_timeout(1000)

try = nmap.new_try(function() socket:close() end)

try(socket:connect(host.ip, port.number))

try(socket:send(“login”))

response = try(socket:receive())

socket:close()

异常处理

Nmap Lua语言没有异常处理机制,所以API提供了强大的对异常处理的功能。

local result, socket, try, catch

result = “”

socket = nmap.new_socket()

catch = function()

socket:close()

end

try = nmap.new_try(catch)

try(socket:connect(host.ip, port.number))

result = try(socket:receive_lines(1))

try(socket:send(result))

我们的第一个NSE脚本

接下来让我们示例演示下如何编写一个属于自己的NSE脚本吧。

在此之前请阅读nse开发所需要的基本知识。

http://nmap.org/book/nse-tutorial.html

黑客喜欢入侵摄像机来查看别人的艳照。最常见的是劫持AXIS摄像机。可以使用下面的dork来搜索。

inurl:axis-cgi/jpg

打开带有axis-cgi/jpg/image.cgi的url,然后你就可以看到私人或者公共的相机,这是未经授权的。参考下面的例子。

现在我们可以尝试使用nse来实现漏洞的利用了。

1、创建axis.nse文件,并写入以下代码实现自动化。

description = [[Attempts to detect webcams AXIS vulnerable to unauthenticated access to the video stream by queryingthe URI ” /axis-cgi/jpg/image.cgi “.

2、我们载入开发时需要的库

local http = require “http”

local shortport = require “shortport”

local stdnse = require “stdnse“

3、定义执行规则

portrule = shortport.http

4、定义存在漏洞的标识,比如状态码

action = function(host, port)

local uri = ” /axis-cgi/jpg/image.cgi”

local _, status_404, resp_404 = http.identify_404(host,port)

if status_404 == 200 then

stdnse.print_debug(1, “%s: Web server returns ambiguous response. Axis webcams return standard 404 status responses. Exiting.”, SCRIPT_NAME)

return

end

stdnse.print_debug(1, “%s: HTTP HEAD %s”, SCRIPT_NAME,uri)

local resp = http.head(host, port, uri)

if resp.status and resp.status == 200 then

return string.format(“Axis video feed is unprotected:http://%s/axis-cgi/jpg/image.cgi “, host.ip)

end

End

你可以从https://github.com/bikashdash/Axis_Vuln_Webcam 找到这个脚本。

引用:

https://secwiki.org/w/Nmap/External_Script_Library

http://nmap.org/book/nse-tutorial.html

*参考来源:resources.infosecinstitute,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

Nmap备忘单:从探索到漏洞利用(Part 5)的更多相关文章

  1. Nmap备忘单:从探索到漏洞利用(Part 4)

    这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...

  2. Nmap备忘单:从探索到漏洞利用(Part 2)

    这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...

  3. Nmap备忘单:从探索到漏洞利用 Part1

    在侦查过程中,信息收集的初始阶段是扫描. 侦查是什么? 侦查是尽可能多的收集目标网络的信息.从黑客的角度来看,信息收集对攻击非常有帮助,一般来说可以收集到以下信息: 电子邮件.端口号.操作系统.运行的 ...

  4. Nmap备忘单:从探索到漏洞利用(Part3)

    众所周知NMAP是经常用来进行端口发现.端口识别.除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等. 发现地理位置 Gorjan Petro ...

  5. Nmap备忘单

    #在推特上看到,感觉做的相当不错就转一波. 目标规格 开关 例 描述   nmap 192.168.1.1 扫描一个IP   nmap 192.168.1.1 192.168.2.1 扫描特定的IP地 ...

  6. Cheat (tldr, bropages) - Unix命令用法备忘单

    cheat 是一个Unix命令行小工具,用来查询一些常用命令的惯用法(我们都知道,man page阅读起来太累了,常常是跳到最后去看 examples,但并不是所有man pages里面都有examp ...

  7. Objective-C教程备忘单

    终极版本的Objective-C教程备忘单帮助你进行iOS开发. 想开始创建你的第一个iOS应用程序么?那么看一下这篇很棒的教程吧:Create your first iOS 7 Hello Worl ...

  8. HTML5属性备忘单

    在网上闲逛的时候看到了文章,感觉总结的这个html5文章,决定转载过来,在排版的时候也帮助自己重新梳理复习一遍.毕竟学习基础最重要. by zhangxinxu from http://www.zha ...

  9. 跨站脚本(XSS)备忘单-2019版

    这是一份跨站脚本(XSS)备忘录,收集了大量的XSS攻击向量,包含了各种事件处理.通讯协议.特殊属性.限制字符.编码方式.沙箱逃逸等技巧,可以帮助渗透测试人员绕过WAF和过滤机制. 译者注:原文由Po ...

随机推荐

  1. Kettle_设置全局变量

    使用全局变量的目的是为了避免反复修改[作业]和[转换]中变量到实际值 步骤: 1.打开全局配置文件 目录:C:\Users\Administrator\.kettle\kettle.propertie ...

  2. NServiceBus 结合 RabbitMQ 使用

    参考官方教程: Step by Step Guide 新建4个项目: A Console Application named Client A Console Application named Se ...

  3. UVA 540 stl

    Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...

  4. 使用quartz 定时任务

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. ...

  5. 44.Android之Shape设置虚线、圆角和渐变学习

    Shape在Android中设定各种形状,今天记录下,由于比较简单直接贴代码. Shape子属性简单说明一下:  gradient -- 对应颜色渐变. startcolor.endcolor就不多说 ...

  6. Windows python3.3下安装BeautifulSoup

    首先在官网下载:http://www.crummy.com/software/BeautifulSoup/#Download BeautifulSoup在版本4以上都开始支持python3了,所以就下 ...

  7. PHP邮件注入攻击技术

    1. 简介 如 今,互联网的使用急剧上升,但绝大多数互联网用户没有安全知识背景.大多数的人都会使用互联网通过邮件Email的方式和他人进行通信.出于这个原因,大 多数网站允许他们的用户联系他们,向网站 ...

  8. C#用UPnP穿透内网

    参考了网上的一篇文章,由于时间长了,具体地址不知道了. 引入了一个DLL: Interop.NATUPNPLib.dll,实现穿透局域网,进行Socket通信. using System; using ...

  9. groovy–运算符重载

    Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象. 下面的表格描述了groovy中的操作符所映 ...

  10. IOS基础之 (十二) Block

    一 定义 Block封装了一段代码,可以在任何时候执行. Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 二 使用 1. 定义函数指针,然后在实现. #import & ...