文章

渗透测试

  • 信息安全概述


信息安全 (infosec) 是一个广阔的领域。该领域在过去几年中取得了长足的发展和发展。它提供许多专业,包括但不限于:

  • 网络和基础设施安全

  • 应用程序安全性

  • 安全测试

  • 系统审计

  • 业务连续性规划

  • 数字取证

  • 事件检测和响应

    简而言之,信息安全是保护数据免受未经授权的访问、更改、非法使用、中断等的做法。信息安全专业人员还会采取行动减少任何此类事件的整体影响。

    数据可以是电子的,也可以是有形的(例如,设计蓝图)或无形的(知识)。在我们的信息安全职业生涯中,一个经常出现的短语是保护“数据的机密性、完整性和可用性”,或 .CIA triad


  • 风险管理流程

    数据保护必须专注于高效而有效的策略实施,而不会对组织的业务运营和生产力产生负面影响。为此,组织必须遵循一个称为 .此过程包括以下 5 个步骤:risk management process

    解释
    Identifying the Risk识别企业面临的风险,例如法律、环境、市场、监管和其他类型的风险。
    Analyze the Risk分析风险以确定其影响和概率。风险应映射到组织的各种策略、程序和业务流程。
    Evaluate the Risk评估、排序和确定风险的优先级。然后,组织必须决定接受 (不可避免)、避免 (更改计划)、控制 (缓解) 或转移风险 (保险)。
    Dealing with Risk尽可能消除或控制风险。这是通过直接与与风险相关的系统或流程的利益干系人沟通来处理的。
    Monitoring Risk必须持续监控所有风险。应持续监控风险,以发现任何可能改变其影响评分的情况变化。i.e., from low to medium or high impact

    如前所述,信息安全的核心原则是信息保障,或维护数据并确保数据在事件发生时不会以任何方式、形状或形式受到损害。事件可能是自然灾害、系统故障或安全事件。CIA


  • 红队 vs. 蓝队

    在信息安全中,我们通常会听到术语 和 。用最简单的话来说,The 扮演攻击者的角色,而 the 扮演防御者的角色。red teamblue teamred teamblue team

    红队成员通常在闯入组织时扮演对手角色,以识别真正的攻击者可能利用的任何潜在弱点来打破组织的防御。红队方面最常见的任务是渗透测试、社会工程和其他类似的进攻技术。

    另一方面,蓝队构成了信息安全工作的大部分。它负责通过分析风险、提出策略、响应威胁和事件以及有效使用安全工具和其他类似任务来加强组织的防御。


  • 渗透测试人员的作用

    安全评估员(网络渗透测试员、Web 应用程序渗透测试员、红队成员等)帮助组织识别其外部和内部网络中的风险。这些风险可能包括网络或 Web 应用程序漏洞、敏感数据泄露、错误配置或可能导致声誉受损的问题。优秀的测试人员可以与客户合作,识别其组织面临的风险,提供有关如何重现这些风险的信息,以及有关缓解或修复测试期间发现的问题的指导。

    评估可以采取多种形式,从针对所有范围内系统和应用程序的白盒渗透测试以识别尽可能多的漏洞,到网络钓鱼评估以评估风险或员工的安全意识,再到围绕场景构建的有针对性的红队评估以模拟真实世界的威胁行为者。

  • 我们必须全面了解组织面临的风险及其环境,以便准确评估和评估测试过程中发现的漏洞。对于信息安全初学者来说,深入了解风险管理流程至关重要。

    本模块将重点介绍如何从动手实践的角度开始信息安全和渗透测试,特别是选择和导航渗透测试发行版,了解常见技术和基本工具,学习渗透测试的级别和基础知识,破解我们在 HTB 上的第一个盒子,如何最有效地查找和寻求帮助, 常见的潜在问题,以及如何浏览 Hack the Box 平台。

  • 虽然本模块使用 Hack The Box 平台和故意易受攻击的机器作为示例,但所展示的基本技能适用于任何环境。

文件夹结构

在攻击单个机器、实验室或客户端环境时,我们应该在攻击机器上有一个清晰的文件夹结构来保存数据,例如:范围信息、枚举数据、利用尝试的证据、敏感数据(如凭证)以及在侦察、利用和利用后获得的其他数据。示例文件夹结构可能如下所示:

保持井井有条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DeviLeo@htb[/htb]**$** tree Projects/

Projects/
└── Acme Company
  ├── EPT
  │   ├── evidence
  │   │   ├── credentials
  │   │   ├── data
  │   │   └── screenshots
  │   ├── logs
  │   ├── scans
  │   ├── scope
  │   └── tools
  └── IPT
      ├── evidence
      │   ├── credentials
      │   ├── data
      │   └── screenshots
      ├── logs
      ├── scans
      ├── scope
      └── tools

在这里,我们为客户提供了一个文件夹,其中包含两个评估,即内部渗透测试 (IPT) 和外部渗透测试 (EPT)。在每个文件夹下,我们有用于保存扫描数据、任何相关工具、日志记录输出、范围信息(即要提供给我们的扫描工具的 IP/网络列表)的子文件夹,以及一个证据文件夹,该文件夹可能包含评估期间检索的任何凭据、检索的任何相关数据以及屏幕截图。Acme Company

这是个人喜好,但有些人为每个目标主机创建一个文件夹并在其中保存屏幕截图。其他人按主机或网络组织他们的笔记,并将屏幕截图直接保存到笔记工具中。尝试文件夹结构,看看什么最适合您保持井井有条并最高效地工作。


  • 使用 VPN 连接


虚拟专用网络 (VPN) 允许我们连接到专用(内部)网络并访问主机和资源,就像我们直接连接到目标专用网络一样。它是通过共享公共网络连接到专用网络(即员工从家中远程连接到公司网络)的安全通信通道。VPN 通过加密通道上的通信来防止窃听和访问通过通道的数据,从而提供一定程度的隐私和安全性。

图像

概括地说,VPN 的工作原理是通过目标 VPN 的私人服务器而不是我们的互联网服务提供商 (ISP) 来路由我们连接设备的互联网连接。当连接到 VPN 时,数据来自 VPN 服务器而不是我们的计算机,并且看起来似乎来自我们自己的公共 IP 地址。

远程访问 VPN 有两种主要类型:基于客户端的 VPN 和 SSL VPN。SSL VPN 使用 Web 浏览器作为 VPN 客户端。在浏览器之间建立连接,SSL VPN 网关可以配置为仅允许访问基于 Web 的应用程序,例如电子邮件和内部网站,甚至内部网络,但不需要最终用户安装或使用任何专用软件。基于客户端的 VPN 需要使用客户端软件来建立 VPN 连接。连接后,用户的主机将像直接连接到公司网络一样工作,并且能够访问服务器配置允许的任何资源(应用程序、主机、子网等)。一些公司 VPN 将为员工提供对公司内部网络的完全访问权限,而另一些 VPN 会将用户放置在为远程工作人员保留的特定网段上。


  • 基本工具


工具是必不可少的,大多数信息安全专业人员每天都在使用。虽然这些工具不是为了成为渗透测试工具,但它们对渗透测试过程至关重要,因此我们必须掌握它们。

  • SSHNetcatTmuxVim

  • 使用 SSH

    Secure Shell (SSH) 是一种默认在端口上运行的网络协议,为系统管理员等用户提供了一种远程访问计算机的安全方式。SSH 可以配置密码身份验证,也可以使用 SSH 公钥/私钥对的公钥身份验证进行无密码配置。SSH 可用于通过 Internet 远程访问同一网络上的系统,使用端口转发/代理促进与其他网络中的资源的连接,以及向远程系统上传/下载文件。22

    SSH 使用客户端-服务器模型,将运行 SSH 客户端应用程序(例如)的用户连接到 SSH 服务器。在攻击机器或进行实际评估时,我们通常会获得明文凭证或 SSH 私钥,这些凭证或 SSH 私钥可用于通过 SSH 直接连接到系统。SSH 连接通常比反向 shell 连接稳定得多,并且通常可以用作“跳转主机”来枚举和攻击网络中的其他主机、传输工具、设置持久性等。如果我们获取了一组凭证,我们可以使用 SSH 通过用户名远程服务器 IP 远程登录服务器,如下所示:OpenSSH@

    1
    2
    3
    4
    5
    
    [!bash!]**$** ssh Bob@10.10.10.10
      
    Bob@remotehost's password: *********
      
    Bob@remotehost#
    

    也可以在受感染的系统上读取本地私钥或添加我们的公钥以获得对特定用户的 SSH 访问权限,我们将在后面的部分中讨论。正如我们所看到的,SSH 是安全连接到远程机器的绝佳工具。它还提供了一种将远程计算机上的本地端口映射到我们的 localhost 的方法,这有时会变得很方便。


  • 使用 Netcat

    Netcat 或 是用于与 TCP/UDP 端互的出色网络实用程序。在渗透测试期间,它可以用于很多事情。它的主要用途是连接到 shell,我们将在本模块后面讨论。除此之外,还可用于连接到任何侦听端口并与该端口上运行的服务进行交互。例如,被编程为处理通过端口 22 的连接以发送所有数据和密钥。我们可以通过以下方式连接到 TCP 端口 22:ncatncnetcatSSHnetcat

    1
    2
    3
    
    [!bash!]**$** netcat 10.10.10.10 22
      
    SSH-2.0-OpenSSH_8.4p1 Debian-3
    

    正如我们所看到的,端口 22 向我们发送了它的横幅,说明它正在运行。此技术称为 ,可帮助识别特定端口上运行的服务。 预装在大多数 Linux 发行版中。我们还可以从此链接下载 Windows 计算机的副本。还有另一种 Windows 替代方案,称为 PowerCat。 也可用于在机器之间传输文件,我们将在后面讨论。SSHBanner GrabbingNetcatnetcatNetcat

    另一个类似的网络实用程序是 socat,它有一些不支持的功能,例如转发端口和连接到串行设备。 还可用于将 shell 升级为完全交互式 TTY。我们将在后面的部分中看到一些示例。 是一个非常方便的实用程序,应该是每个渗透测试人员工具包的一部分。在获取远程代码执行后,可以将 的独立二进制文件传输到系统中,以获得更稳定的反向 shell 连接。netcatSocatSocatSocat


  • 使用 Tmux

    终端多路复用器(如 or)是扩展标准 Linux 终端功能的绝佳实用程序,例如在一个终端中拥有多个窗口并在它们之间跳转。让我们看看一些使用 的例子,这是两者中更常见的。如果我们的 Linux 系统上不存在,我们可以使用以下命令安装它:tmuxScreentmuxtmux

    1
    
    [!bash!]**$** sudo apt install tmux -y
    

    一旦我们有了 ,我们就可以通过输入命令来启动它:tmuxtmuxtmux_1

    输入命令 prefix 的默认键是 。为了在 中打开一个新窗口,我们可以点击前缀 ‘i.e. ‘,然后点击 :tmux[CTRL + B]tmux[CTRL + B]Ctmux_2

    我们在底部看到编号的窗口。我们可以通过点击前缀然后输入窗口编号来切换到每个窗口,例如 或 .我们还可以通过点击前缀将窗口垂直拆分为多个窗格,然后按 :01[SHIFT + %]tmux_3

    我们还可以通过点击前缀,然后按 :[SHIFT + "]tmux_4

    我们可以通过点击前缀,然后点击 or 箭头进行水平切换或 or 箭头进行垂直切换,从而在窗格之间切换。上面的命令涵盖了一些基本用法。它是一个强大的工具,可以用于许多事情,包括日志记录,这在任何技术参与中都非常重要。这个作弊表是一个非常方便的参考。此外,这个 tmux 简介视频值得您花时间。leftrightupdowntmuxippsec


  • 使用 Vim

    Vim 是一个很棒的文本编辑器,可用于在 Linux 系统上编写代码或编辑文本文件。使用鼠标的一大好处是它完全依赖于键盘,因此您不必使用鼠标,这(一旦我们掌握了它)将显着提高您编写/编辑代码的生产力和效率。我们通常会找到或安装在受感染的 Linux 系统上,因此学习如何使用它使我们能够即使在远程系统上编辑文件。 还有许多其他功能,例如扩展和插件,可以显着扩展其使用并使其成为出色的代码编辑器。让我们看看 的一些基础知识。要使用 打开文件,我们可以在文件后添加文件名:VimVimViVimVimVim

    1
    
    [!bash!]**$** vim /etc/hosts
    

    vim_1

    如果我们要创建一个新文件,请输入新文件名,然后打开一个包含该文件的新窗口。打开文件后,我们处于 只读 ,这允许我们导航和读取文件。要编辑文件,我们按 输入 ,如 底部的 “” 所示。之后,我们可以移动文本光标并编辑文件:Vimnormal modeiinsert mode-- INSERT --Vim

    vim_2

    完成文件编辑后,我们可以按 Esc 键退出 ,返回 。当我们在 ,我们可以使用以下键来执行一些有用的快捷方式:escinsert modenormal modenormal mode

    命令描述
    x剪切字符
    dw剪切字
    ddCut full line (切割全线)
    yw复制单词
    yy复制整行
    p

    提示: 我们可以通过在命令前添加一个数字来将任何命令乘以多次运行。例如,’4yw’ 将复制 4 个单词而不是 1 个单词,依此类推。

    如果我们要 保存文件 或 退出 ,我们必须按 进入 .完成后,我们将在 vim 窗口底部看到我们键入的任何命令:Vim:command modevim_3

    我们可以使用许多命令。以下是其中的一些:

    命令描述
    :1转到第 1 行。
    :w写入文件,保存
    :q退出
    :q!退出而不保存
    :wq写入并退出

    Vim是一个非常强大的工具,并且具有许多其他命令和功能。此备忘单是进一步释放 .Vim

    服务扫描


我们已经准备好更进一步,开始探索机器!我们需要做的第一件事是确定操作系统和可能正在运行的任何可用服务。服务是在计算机上运行的应用程序,它为其他用户或计算机执行一些有用的功能。我们将这些托管这些有用服务的专用机器称为“服务器”而不是工作站,允许用户与这些不同的服务进行交互和使用。我们感兴趣的是配置错误或存在漏洞的服务。我们感兴趣的是,我们是否可以强制服务执行一些支持我们目标的意外操作,例如执行我们选择的命令,而不是执行作为服务一部分的预期操作。

为计算机分配一个 IP 地址,该地址允许它们在网络上被唯一标识和访问。可以为这些计算机上运行的服务分配一个端口号,以使服务可访问。如前所述,端口号的范围从 1 到 65,535,众所周知的端口 1 到 1,023 的范围是为特权服务保留的。端口 0 是 TCP/IP 网络中的保留端口,不用于 TCP 或 UDP 消息。如果有任何内容尝试绑定到端口 0(例如服务),它将绑定到端口 1,024 上方的下一个可用端口,因为端口 0 被视为“通配符”端口。

要远程访问服务,我们需要使用正确的 IP 地址和端口号进行连接,并使用服务可以理解的语言。手动检查所有 65,535 个端口以查找任何可用服务将非常费力,因此已经创建了工具来自动化此过程并为我们扫描端口范围。最常用的扫描工具之一是 Nmap(Network Mapper)。


Nmap

让我们从最基本的扫描开始。假设我们要对位于 10.129.42.253 的目标执行基本扫描。为此,我们应该键入并按 return。我们看到扫描很快就完成了。这是因为如果我们不指定任何额外的选项,Nmap 默认只扫描 1,000 个最常见的端口。扫描输出显示端口 21、22、80、139 和 445 可用。nmap 10.129.42.253Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  [!bash!]**$** nmap 10.129.42.253

  Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:07 EST
  Nmap scan report for 10.129.42.253
  Host is up (0.11s latency).
  Not shown: 995 closed ports
  PORT    STATE SERVICE
  21/tcp  open  ftp
  22/tcp  open  ssh
  80/tcp  open  http
  139/tcp open  netbios-ssn
  445/tcp open  microsoft-ds

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

在标题下,它还告诉我们这些是 TCP 端口。默认情况下,将执行 TCP 扫描,除非特别要求执行 UDP 扫描。
标题确认这些端口已打开。有时,我们会看到列出的其他端口具有不同的状态,例如 .如果防火墙仅允许从特定地址访问端口,则可能会发生这种情况。
标题告诉我们服务的名称通常映射到特定的端口号。但是,默认扫描不会告诉我们该端口上正在侦听什么。在我们指示与该服务交互并尝试梳理出识别信息之前,它可能完全是另一项服务。PORTNmapSTATEfilteredSERVICENmap

随着我们逐渐熟悉,我们会注意到几个端口通常与 Windows 或 Linux 相关联。例如,端口 3389 是远程桌面服务的默认端口,可以很好地指示目标是 Windows 计算机。在我们当前场景中,端口 22 (SSH) 可用表示目标正在运行 Linux/Unix,但也可以在 Windows 上配置此服务。让我们运行更高级的扫描并收集有关目标设备的更多信息。Nmap

我们可以使用该参数来指定应该使用脚本来尝试获取更详细的信息。该参数指示执行版本扫描。在这次扫描中,Nmap 将对目标系统上的服务进行指纹识别,并识别服务协议、应用程序名称和版本。版本扫描以包含 1000 多个服务签名的综合数据库为基础。最后,告诉 Nmap 我们要扫描所有 65,535 个 TCP 端口。-sCNmap-sVNmap-p-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  [!bash!]**$** nmap -sV -sC -p- 10.129.42.253

  Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:18 EST
  Nmap scan report for 10.129.42.253
  Host is up (0.11s latency).
  Not shown: 65530 closed ports
  PORT    STATE SERVICE     VERSION
  21/tcp  open  ftp         vsftpd 3.0.3
  | ftp-anon: Anonymous FTP login allowed (FTP code 230)
  |_drwxr-xr-x    2 ftp      ftp          4096 Feb 25 19:25 pub
  | ftp-syst: 
  |   STAT: 
  | FTP server status:
  |      Connected to ::ffff:10.10.14.2
  |      Logged in as ftp
  |      TYPE: ASCII
  |      No session bandwidth limit
  |      Session timeout in seconds is 300
  |      Control connection is plain text
  |      Data connections will be plain text
  |      At session startup, client count was 2
  |      vsFTPd 3.0.3 - secure, fast, stable
  |_End of status
  22/tcp  open  ssh         OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
  80/tcp  open  http        Apache httpd 2.4.41 ((Ubuntu))
  |_http-server-header: Apache/2.4.41 (Ubuntu)
  |_http-title: PHP 7.4.3 - phpinfo()
  139/tcp open  netbios-ssn Samba smbd 4.6.2
  445/tcp open  netbios-ssn Samba smbd 4.6.2
  Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

  Host script results:
  |_nbstat: NetBIOS name: GS-SVCSCAN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
  | smb2-security-mode: 
  |   2.02: 
  |_    Message signing enabled but not required
  | smb2-time: 
  |   date: 2021-02-25T21:21:51
  |_  start_date: N/A

  Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  Nmap done: 1 IP address (1 host up) scanned in 233.68 seconds

这将返回更多信息。我们看到,扫描 65,535 个端口所花费的时间比扫描 1,000 个端口的时间要长得多。这些区域 and 选项还会增加扫描的持续时间,因为它们不会执行简单的 TCP 握手,而是执行更多的检查。我们注意到这次有一个 VERSION 标题,如果可以识别,它会报告服务版本和操作系统。-sC-sV

到目前为止,我们知道操作系统是 Ubuntu Linux。应用程序版本还可以帮助显示目标 OS 版本。以 OpenSSH 为例。我们看到报告的版本是 。从其他 Ubuntu SSH 包更改日志的检查中,我们看到发布版本采用格式。更新我们的版本以适应这种格式,我们得到 .在线快速搜索此版本显示它包含在 Ubuntu Linux Focal Fossa 20.04 中。OpenSSH 8.2p1 Ubuntu 4ubuntu0.11:7.3p1-1ubuntu0.11:8.2p1-4ubuntu0.1

谷歌1

Another quick search reveals that the release date of this OS is April 23rd, 2020.

google2

However, it is worth noting that this cross-referencing technique is not entirely reliable, as it is possible to install more recent application packages on an older OS version. The script scan flag causes to report the server headers page and the page title for any web page hosted on the webserver. The web page title indicates that this is a PHPInfo file, which is often manually created to confirm that PHP has been successfully installed. The title (and PHPInfo page) also reveals the PHP version, which is worth noting if it is vulnerable.-sCNmaphttp-server-headerhttp-titlePHP 7.4.3 - phpinfo()

 

Nmap 脚本

指定将针对目标运行许多有用的默认脚本,但在某些情况下需要运行特定脚本。例如,在评估范围内,系统可能会要求我们审核大型 Citrix 安装。我们可以使用脚本来审核严重的 Citrix NetScaler 漏洞 (CVE-2019–19781),同时还可以使用其他脚本来审核 Citrix 安装。-sCNmapNmap

1
2
3
4
5
6
7
  [!bash!]**$** locate scripts/citrix

  /usr/share/nmap/scripts/citrix-brute-xml.nse
  /usr/share/nmap/scripts/citrix-enum-apps-xml.nse
  /usr/share/nmap/scripts/citrix-enum-apps.nse
  /usr/share/nmap/scripts/citrix-enum-servers-xml.nse
  /usr/share/nmap/scripts/citrix-enum-servers.nse

运行 Nmap 脚本的语法是 。nmap --script <script name> -p<port> <host>

Nmap脚本是增强扫描功能的好方法,检查可用选项将带来回报。查看使用 Nmap 进行网络枚举模块,了解该工具的更详细研究。Nmap


攻击网络服务

横幅抓取

如前所述,横幅抓取是一种快速对服务进行指纹识别的有用技术。通常,一旦启动连接,服务就会通过显示横幅来标识自己。如果指定了语法,Nmap 将尝试获取横幅。我们也可以使用 .让我们再举一个例子,使用 的版本 :nmap -sV --script=banner <target>NetcatncNetcat

1
2
3
4
  [!bash!]**$** nc -nv 10.129.42.253 21

  (UNKNOWN) [10.129.42.253] 21 (ftp) open
  220 (vsFTPd 3.0.3)

这表明服务器上的 版本为 。我们还可以使用强大的脚本引擎来自动化此过程:.vsFTPd3.0.3Nmap'snmap -sV --script=banner -p21 10.10.10.0/24

FTP (自由贸易协定

熟悉 FTP 是值得的,因为它是一种标准协议,并且此服务通常可以包含有趣的数据。扫描 FTP 的默认端口(21)会显示我们之前确定的 vsftpd 3.0.3 安装。此外,它还报告已启用匿名身份验证,并且目录可用。Nmappub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  [!bash!]**$** nmap -sC -sV -p21 10.129.42.253

  Starting Nmap 7.80 ( https://nmap.org ) at 2020-12-20 00:54 GMT
  Nmap scan report for 10.129.42.253
  Host is up (0.081s latency).

  PORT   STATE SERVICE VERSION
  21/tcp open  ftp     vsftpd 3.0.3
  | ftp-anon: Anonymous FTP login allowed (FTP code 230)
  |_drwxr-xr-x    2 ftp      ftp          4096 Dec 19 23:50 pub
  | ftp-syst: 
  |   STAT: 
  | FTP server status:
  |      Connected to ::ffff:10.10.14.2
  |      Logged in as ftp
  |      TYPE: ASCII
  |      No session bandwidth limit
  |      Session timeout in seconds is 300
  |      Control connection is plain text
  |      Data connections will be plain text
  |      At session startup, client count was 3
  |      vsFTPd 3.0.3 - secure, fast, stable
  |_End of status
  Service Info: OS: Unix

  Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds

Let us connect to the service using the command-line utility.ftp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  [!bash!]**$** ftp -p 10.129.42.253

  Connected to 10.129.42.253.
  220 (vsFTPd 3.0.3)
  Name (10.129.42.253:user): anonymous
  230 Login successful.
  Remote system type is UNIX.
  Using binary mode to transfer files.

  ftp> ls
  227 Entering Passive Mode (10,129,42,253,158,60).
  150 Here comes the directory listing.
  drwxr-xr-x    2 ftp      ftp          4096 Feb 25 19:25 pub
  226 Directory send OK.

  ftp> cd pub
  250 Directory successfully changed.

  ftp> ls
  227 Entering Passive Mode (10,129,42,253,182,129).
  150 Here comes the directory listing.
  -rw-r--r--    1 ftp      ftp            18 Feb 25 19:25 login.txt
  226 Directory send OK.

  ftp> get login.txt
  local: login.txt remote: login.txt
  227 Entering Passive Mode (10,129,42,253,181,53).
  150 Opening BINARY mode data connection for login.txt (18 bytes).
  226 Transfer complete.
  18 bytes received in 0.00 secs (165.8314 kB/s)

  ftp> exit
  221 Goodbye.

在上面的 shell 中,我们看到 FTP 支持常见的命令,例如 and,并允许我们使用该命令下载文件。检查下载的凭据会显示我们可以用来进一步访问系统的凭据。cdlsgetlogin.txt

1
2
3
  [!bash!]**$** cat login.txt 

  admin:ftp@dmin123

SMB (中小型企业)

SMB(服务器消息块)是 Windows 计算机上流行的协议,它为垂直和横向移动提供了许多矢量。敏感数据(包括凭据)可能位于网络文件共享中,并且某些 SMB 版本可能容易受到 RCE 漏洞(如 EternalBlue)的攻击。仔细列举这个相当大的潜在攻击面至关重要。 有许多用于枚举 SMB 的脚本,例如 smb-os-discovery.nse,它将与 SMB 服务交互以提取报告的操作系统版本。Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  [!bash!]**$** nmap --script smb-os-discovery.nse -p445 10.10.10.40

  Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-27 00:59 GMT
  Nmap scan report for doctors.htb (10.10.10.40)
  Host is up (0.022s latency).

  PORT    STATE SERVICE
  445/tcp open  microsoft-ds

  Host script results:
  | smb-os-discovery: 
  |   OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
  |   OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
  |   Computer name: CEO-PC
  |   NetBIOS computer name: CEO-PC\x00
  |   Workgroup: WORKGROUP\x00
  |_  System time: 2020-12-27T00:59:46+00:00

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

在这种情况下,主机运行的是旧版 Windows 7 操作系统,我们可以进行进一步的枚举以确认它是否容易受到 EternalBlue 的攻击。Metasploit 框架有几个用于 EternalBlue 的模块,可用于验证漏洞并利用它,我们将在下一节中看到。我们可以针对此模块的目标部分运行扫描,以从 SMB 服务收集信息。我们可以确定主机运行的是 Linux 内核,Samba 版本 4.6.2,主机名是 GS-SVCSCAN。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  [!bash!]**$** nmap -A -p445 10.129.42.253

  Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-25 16:29 EST
  Nmap scan report for 10.129.42.253
  Host is up (0.11s latency).

  PORT    STATE SERVICE     VERSION
  445/tcp open  netbios-ssn Samba smbd 4.6.2
  Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
  Aggressive OS guesses: Linux 2.6.32 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Adtran 424RG FTTH gateway (92%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%), Linux 3.2 - 4.9 (92%)
  No exact OS matches for host (test conditions non-ideal).
  Network Distance: 2 hops

  Host script results:
  |_nbstat: NetBIOS name: GS-SVCSCAN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
  | smb2-security-mode: 
  |   2.02: 
  |_    Message signing enabled but not required
  | smb2-time: 
  |   date: 2021-02-25T21:30:06
  |_  start_date: N/A

  TRACEROUTE (using port 445/tcp)
  HOP RTT       ADDRESS
  1   111.62 ms 10.10.14.1
  2   111.89 ms 10.129.42.253

  OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  Nmap done: 1 IP address (1 host up) scanned in 12.72 seconds

股票

SMB 允许用户和管理员共享文件夹,并允许其他用户远程访问这些文件夹。这些共享通常包含包含敏感信息(如密码)的文件。smbclient 是一种可以枚举 SMB 共享并与之交互的工具。该标志指定我们要检索远程主机上的可用共享列表,同时禁止显示密码提示。-L-N

1
2
3
4
5
6
7
8
  [!bash!]**$** smbclient -N -L \\\\10.129.42.253

  Sharename       Type      Comment
  ---------       ----      -------
  print**$**          Disk      Printer Drivers
  users           Disk      
  IPC**$**            IPC       IPC Service (gs-svcscan server (Samba, Ubuntu))
  SMB1 disabled -- no workgroup available

这将显示非默认共享 。让我们尝试以 guest 用户身份进行连接。users

1
2
3
4
5
6
7
8
9
  [!bash!]**$** smbclient \\\\10.129.42.253\\users

  Enter WORKGROUP\users's password: 
  Try "help" to get a list of possible commands.

  smb: \> ls
  NT_STATUS_ACCESS_DENIED listing \*

  smb: \> exit

该命令导致 access denied 消息,指示不允许 guest 访问。让我们使用用户 bob () 的凭证重试。lsbob:Welcome1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  [!bash!]**$** smbclient -U bob \\\\10.129.42.253\\users

  Enter WORKGROUP\bob's password: 
  Try "help" to get a list of possible commands.

  smb: \> ls
  .                                   D        0  Thu Feb 25 16:42:23 2021
  ..                                  D        0  Thu Feb 25 15:05:31 2021
  bob                                 D        0  Thu Feb 25 16:42:23 2021

  4062912 blocks of size 1024. 1332480 blocks available

  smb: \> cd bob

  smb: \bob\> ls
  .                                   D        0  Thu Feb 25 16:42:23 2021
  ..                                  D        0  Thu Feb 25 16:42:23 2021
  passwords.txt                       N      156  Thu Feb 25 16:42:23 2021

  4062912 blocks of size 1024. 1332480 blocks available

  smb: \bob\> get passwords.txt 
  getting file \bob\passwords.txt of size 156 as passwords.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)

我们成功地使用凭据访问了共享,并获得了对 感兴趣文件的访问权限 ,可以使用命令下载该文件。userspasswords.txtget


SNMP (SNMP 协议)

SNMP 社区字符串提供有关路由器或设备的信息和统计信息,帮助我们访问它。制造商默认的社区字符串 和 通常保持不变。在 SNMP 版本 1 和 2c 中,使用纯文本社区字符串控制访问,如果我们知道名称,就可以访问它。加密和身份验证仅在 SNMP 版本 3 中添加。可以从 SNMP 获得很多信息。检查进程参数可能会发现在命令行上传递的凭证,鉴于企业环境中密码重用的普遍性,这些凭证可能可以重新用于其他外部可访问的服务。路由信息、绑定到其他接口的服务以及已安装软件的版本也会被揭示。publicprivate

1
2
3
  [!bash!]**$** snmpwalk -v 2c -c public 10.129.42.253 1.3.6.1.2.1.1.5.0

  iso.3.6.1.2.1.1.5.0 = STRING: "gs-svcscan"
1
2
3
  [!bash!]**$** snmpwalk -v 2c -c private  10.129.42.253 

  Timeout: No Response from 10.129.42.253

可以使用 onesixtyone 等工具使用常见社区字符串的字典文件(例如该工具的 GitHub 存储库中包含的文件)暴力破解社区字符串名称。dict.txt

1
2
3
4
  [!bash!]**$** onesixtyone -c dict.txt 10.129.42.254

  Scanning 1 hosts, 51 communities
  10.129.42.254 [public] Linux gs-svcscan 5.4.0-66-generic **#**74-Ubuntu SMP Wed Jan 27 22:54:38 UTC 2021 x86_64

结论

服务扫描和枚举是一个广阔的主题,我们将随着我们的学习而更多地了解它。我们在这里介绍的方面适用于许多网络,包括 HTB 机器。

基本工具


工具是必不可少的,大多数信息安全专业人员每天都在使用。虽然这些工具不是为了成为渗透测试工具,但它们对渗透测试过程至关重要,因此我们必须掌握它们。
SSHNetcatTmuxVim


使用 SSH

Secure Shell (SSH) 是一种默认在端口上运行的网络协议,为系统管理员等用户提供了一种远程访问计算机的安全方式。SSH 可以配置密码身份验证,也可以使用 SSH 公钥/私钥对的公钥身份验证进行无密码配置。SSH 可用于通过 Internet 远程访问同一网络上的系统,使用端口转发/代理促进与其他网络中的资源的连接,以及向远程系统上传/下载文件。22

SSH 使用客户端-服务器模型,将运行 SSH 客户端应用程序(例如)的用户连接到 SSH 服务器。在攻击机器或进行实际评估时,我们通常会获得明文凭证或 SSH 私钥,这些凭证或 SSH 私钥可用于通过 SSH 直接连接到系统。SSH 连接通常比反向 shell 连接稳定得多,并且通常可以用作“跳转主机”来枚举和攻击网络中的其他主机、传输工具、设置持久性等。如果我们获取了一组凭证,我们可以使用 SSH 通过用户名远程服务器 IP 远程登录服务器,如下所示:OpenSSH@

1
2
3
4
5
  [!bash!]**$** ssh Bob@10.10.10.10

  Bob@remotehost's password: *********

  Bob@remotehost#

也可以在受感染的系统上读取本地私钥或添加我们的公钥以获得对特定用户的 SSH 访问权限,我们将在后面的部分中讨论。正如我们所看到的,SSH 是安全连接到远程机器的绝佳工具。它还提供了一种将远程计算机上的本地端口映射到我们的 localhost 的方法,这有时会变得很方便。


使用 Netcat

Netcat 或 是用于与 TCP/UDP 端互的出色网络实用程序。在渗透测试期间,它可以用于很多事情。它的主要用途是连接到 shell,我们将在本模块后面讨论。除此之外,还可用于连接到任何侦听端口并与该端口上运行的服务进行交互。例如,被编程为处理通过端口 22 的连接以发送所有数据和密钥。我们可以通过以下方式连接到 TCP 端口 22:ncatncnetcatSSHnetcat

1
2
3
  [!bash!]**$** netcat 10.10.10.10 22

  SSH-2.0-OpenSSH_8.4p1 Debian-3

正如我们所看到的,端口 22 向我们发送了它的横幅,说明它正在运行。此技术称为 ,可帮助识别特定端口上运行的服务。 预装在大多数 Linux 发行版中。我们还可以从此链接下载 Windows 计算机的副本。还有另一种 Windows 替代方案,称为 PowerCat。 也可用于在机器之间传输文件,我们将在后面讨论。SSHBanner GrabbingNetcatnetcatNetcat

另一个类似的网络实用程序是 socat,它有一些不支持的功能,例如转发端口和连接到串行设备。 还可用于将 shell 升级为完全交互式 TTY。我们将在后面的部分中看到一些示例。 是一个非常方便的实用程序,应该是每个渗透测试人员工具包的一部分。在获取远程代码执行后,可以将 的独立二进制文件传输到系统中,以获得更稳定的反向 shell 连接。netcatSocatSocatSocat


使用 Tmux

终端多路复用器(如 or)是扩展标准 Linux 终端功能的绝佳实用程序,例如在一个终端中拥有多个窗口并在它们之间跳转。让我们看看一些使用 的例子,这是两者中更常见的。如果我们的 Linux 系统上不存在,我们可以使用以下命令安装它:tmuxScreentmuxtmux

1
  [!bash!]**$** sudo apt install tmux -y

一旦我们有了 ,我们就可以通过输入命令来启动它:tmuxtmuxtmux_1

输入命令 prefix 的默认键是 。为了在 中打开一个新窗口,我们可以点击前缀 ‘i.e. ‘,然后点击 :tmux[CTRL + B]tmux[CTRL + B]Ctmux_2

我们在底部看到编号的窗口。我们可以通过点击前缀然后输入窗口编号来切换到每个窗口,例如 或 .我们还可以通过点击前缀将窗口垂直拆分为多个窗格,然后按 :01[SHIFT + %]tmux_3

我们还可以通过点击前缀,然后按 :[SHIFT + "]tmux_4

我们可以通过点击前缀,然后点击 or 箭头进行水平切换或 or 箭头进行垂直切换,从而在窗格之间切换。上面的命令涵盖了一些基本用法。它是一个强大的工具,可以用于许多事情,包括日志记录,这在任何技术参与中都非常重要。这个作弊表是一个非常方便的参考。此外,这个 tmux 简介视频值得您花时间。leftrightupdowntmuxippsec


使用 Vim

Vim 是一个很棒的文本编辑器,可用于在 Linux 系统上编写代码或编辑文本文件。使用鼠标的一大好处是它完全依赖于键盘,因此您不必使用鼠标,这(一旦我们掌握了它)将显着提高您编写/编辑代码的生产力和效率。我们通常会找到或安装在受感染的 Linux 系统上,因此学习如何使用它使我们能够即使在远程系统上编辑文件。 还有许多其他功能,例如扩展和插件,可以显着扩展其使用并使其成为出色的代码编辑器。让我们看看 的一些基础知识。要使用 打开文件,我们可以在文件后添加文件名:VimVimViVimVimVim

1
  [!bash!]**$** vim /etc/hosts

vim_1

如果我们要创建一个新文件,请输入新文件名,然后打开一个包含该文件的新窗口。打开文件后,我们处于 只读 ,这允许我们导航和读取文件。要编辑文件,我们按 输入 ,如 底部的 “” 所示。之后,我们可以移动文本光标并编辑文件:Vimnormal modeiinsert mode-- INSERT --Vim

vim_2

完成文件编辑后,我们可以按 Esc 键退出 ,返回 。当我们在 ,我们可以使用以下键来执行一些有用的快捷方式:escinsert modenormal modenormal mode

命令描述
x剪切字符
dw剪切字
ddCut full line (切割全线)
yw复制单词
yy复制整行
p

提示: 我们可以通过在命令前添加一个数字来将任何命令乘以多次运行。例如,’4yw’ 将复制 4 个单词而不是 1 个单词,依此类推。

如果我们要 保存文件 或 退出 ,我们必须按 进入 .完成后,我们将在 vim 窗口底部看到我们键入的任何命令:Vim:command modevim_3

我们可以使用许多命令。以下是其中的一些:

命令描述
:1转到第 1 行。
:w写入文件,保存
:q退出
:q!退出而不保存
:wq写入并退出

Vim是一个非常强大的工具,并且具有许多其他命令和功能。此备忘单是进一步释放 .Vim

本文由作者按照 CC BY 4.0 进行授权