OSCP-PWK-渗透测试环境Kali Linux(一)
2022-10-28 16:3:32 Author: 红日安全(查看原文) 阅读量:13 收藏

OSCP必备参考书籍之一,这本书里加详细介绍实战套路中细节,为大家可以快速了解OSCP知识点,所以团队开启这本书翻译之作。

                                                                                 ---小峰

0x01.1  使用KaliLinux作为渗透测试环境

Kali Linux包含300多个取证和渗透测试工具,有时找到绕过它们的方法是一项艰巨的任务。在下一个模块中,我们将向您展示一些技巧和窍门,帮助您找到卡利的路线,以便您快速起身并跑步。正如亚伯拉罕·林肯(Abraham Lincoln)曾经说过的那样,“如果我有六个小时的时间砍树,我会用头三个小时磨斧头。

01.1.1 启动Kali Linux

对于本课程,我们将使用Kali Linux的32位(i686)VMware映像,主要是为了在本课程后面的Linux缓冲区溢出练习。这是我们在整个课程开发过程中使用的相同图像,因此为了获得最佳效果并与实验指南保持一致,我们建议您也使用此系统。使用VMware版本的Kali还可以获取虚拟机的快照,以便在需要将虚拟机重置为全新状态时恢复。

要使用VMware版本的Kali Linux,请提取归档文件并使用VMware打开.vmx文件。如果VMware提示您是否复制或移动了虚拟机,请选择“我复制了它”。Kali VM的默认凭据为:

用户名:kali

密码:kali

第一次启动虚拟机并以kali用户身份登录后,请确保使用passwd实用程序更改root密码。

01.1.2 Kali菜单

Kali Linux菜单主要充当发行版中大量工具集合。对于不熟悉使用特定工具的用户了解其上下文和用法。确保花时间浏览Kali Linux菜单,以帮助你快速熟悉可用的工具及其类别。

01.1.3 查找、定位和选择

有许多Linux实用程序可用于查找Linux安装中的文件,其中三个最常见的是find、locate和which。这三个实用程序都有相似的功能,但实际内容和返回数据的方式不同。

在使用locate实用程序之前,我们必须首先使用updatedb命令构建文件系统上所有文件的本地数据库。一旦建立了数据库,就可以使用locate在查找本地文件时轻松地查询该数据库。在运行locate之前,应该始终使用updatedb命令更新本地数据库。

[email protected]:~# updatedb
[email protected]:~# locate sbd.exe
/usr/share/windows-binaries/sbd.exe

which命令在$PATH环境变量中定义的目录中搜索给定的文件名。如果找到匹配项,则返回文件的完整路径,如下所示。

 [email protected]:~# which sbd

/usr/bin/sbd

find命令是一种比locate或which更具攻击性的搜索工具。Find能够递归搜索任何给定路径中的各种文件。

 [email protected]:~# find / -name sbd*
/usr/share/doc/sbd
/usr/share/windows-binaries/sbd.exe
/usr/share/windows-binaries/backdoors/sbd.exe
/usr/share/windows-binaries/backdoors/sbdbg.exe

现在我们有了一些在Kali Linux上定位文件的基本工具,让我们继续检查Kali的服务是如何工作的,以及成功管理它们需要什么。

01.1.4 练习

1.花时间熟悉Kali Linux菜单

2.确定文件plink.exe在Kali中的位置

3.查找并阅读dnsenum工具的文档

0x01.2 管理Kali Linux服务

Kali Linux是一个专门针对安全专业人员的Linux发行版。因此,它包含几个非标准功能。默认的Kali安装附带多个预安装的服务,如SSH、HTTP、MySQL等。如果保持不变,这些服务将在引导时加载,这将导致Kali Linux默认暴露多个开放端口,出于安全原因,我们希望避免这种情况。Kali通过更新我们的设置来解决这个问题,以防止网络服务在启动时启动。

Kali还包含白名单和黑名单各种服务的机制。以下模块将讨论其中一些服务,以及如何操作和管理它们。

1.2.1 默认根密码

如果您从映像文件安装了Kali,安装过程应该会提示您输入根密码。如果您使用的是Kali Linux VMware映像,则默认的根密码为toor。在启动任何服务(如SSH)之前,请确保将任何默认密码或弱密码更改为长、复杂和安全的密码。可以使用passwd命令更改根密码,如下所示。

[email protected]:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

1.2.2 SSH服务

Secure Shell(SSH)服务最常用于使用安全加密协议远程访问计算机。然而,正如我们将在本课程后面看到的,SSH协议除了提供终端访问之外,还有一些高级功能和有用的特性。SSH服务基于TCP,默认情况下在端口22上监听。要在Kali中启动SSH服务,请在Kali终端中键入以下命令。

[email protected]:~# systemctl start ssh

我们可以通过使用netstat命令并将输出并使用grep命令来搜索sshd的输出,从而验证SSH服务正在TCP端口22上运行和侦听。

[email protected]:~# netstat -antp|grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 25035/sshd
tcp6 0 0 :::22 :::* LISTEN 25035/sshd

如果与许多用户一样,您希望在引导时自动启动SSH服务,则需要使用systemctl命令启用它,如下所示。systemctl命令可用于启用和禁用Kali Linux中的大多数服务。

[email protected]:~# systemctl enable ssh
Synchronizing state of ssh.service wheheheith SysV init with /lib/systemd/systemd- sysv-install...
Executing /lib/systemd/systemd-sysv-install enable ssh
insserv: warning: current start runlevel(s) (empty) of script `ssh' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (2 3 4 5) of script `ssh' overrides
LSB defaults (empty).
Created symlink from /etc/systemd/system/sshd.service to
/lib/systemd/system/ssh.service. [email protected]:~#

1.2.3 HTTP服务

在渗透测试期间,HTTP服务可以派上用场,既可以托管站点,也可以提供将文件下载到受害计算机的平台。HTTP服务基于TCP,默认情况下在端口80上监听。要在Kali中启动HTTP服务,请在终端中键入以下命令。

[email protected]:~# systemctl start apache2
[email protected]:~#

正如我们对SSH服务所做的那样,我们可以再次使用netstat和grep命令来验证HTTP服务是否正在TCP端口80上运行和侦听。

[email protected]:~# netstat -antp |grep apache
tcp6 0 0 :::80      :::*     LISTEN      6691/apache2
[email protected]:~#

要让HTTP服务在引导时启动,就像SSH服务一样,您需要使用systemctl显式启用它。

[email protected]:~# systemctl enable apache2

apache2.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install enable apache2

insserv: warning: current start runlevel(s) (empty) of script `apache2' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `apache2'
overrides LSBdefaults(06)[email protected]:~#

Kali Linux中的大多数服务的操作方式与SSH和HTTP守护程序的管理方式大致相同,都是通过它们的服务或init脚本进行管理的。

要对这些服务进行更细粒度的控制,可以使用rcconf或sysv-rc-conf等工具,这两种工具都是为了帮助简化和管理这些服务持续启动而设计的。

1.2.4 练习

1.如果您使用的是Kali VMware映像,请将根密码更改为安全密码。

2.练习启动和停止各种Kali服务。

3.启用SSH服务以在系统引导时启动。

0x01.3 Bash环境

GNU Bourne Again SHell(Bash)提供了一个强大的工作环境,以及一个脚本引擎,我们可以利用它来使用现有的Linux工具自动化过程。对于任何安全专业人员来说,能够快速创建Bash脚本来自动化设定的任务都是一项基本要求。在本模块中,我们将通过实战场景向您介绍Bash脚本。

假设您的任务是查找cisco.com索引页上列出的所有子域,然后找到它们对应的IP地址。手动执行此操作将非常堞繁琐,而且耗时。然而,通过一些简单的Bash命令,我们可以将其转化为一项简单的任务。我们首先使用wget命令下载cisco.com索引页。

[email protected]:~# wget www.cisco.com
--2013-04-02 16:02:56-- http://www.cisco.com/

Resolving www.cisco.com (www.cisco.com). 23.66.240.170,

Connecting to www.cisco.com (www.cisco.com)|23.66.240.170|:80. connected.

HTTP request sent, awaiting response... 200 OK Length: 23419 (23K) [text/html]

Saving to: `index.html'

100%[=====================================>] 23,419 --.-K/s in 0.09s

2013-04-02 16:02:57 (267 KB/s) - `index.html' saved [23419/23419]

快速查看此文件,我们会看到包含必要信息的记录,如下图所示:

<li><a href="http://newsroom.cisco.com/">Newsroom</a></li>

我们首先使用grep命令提取文件中包含字符串“href=”的所有行,表示这一行包含一个链接。

[email protected]:~# grep "href=" index.html

结果仍然是大量的HTML,但请注意,大多数行具有类似的结构,可以使用“/”字符作为分隔符方便拆分。为了从文件中提取域名,我们可以尝试使用cut命令,在第三个字段中使用分隔符。

[email protected]:~# grep "href=" index.html | cut -d "/" -f 3

我们得到的输出目前还不是最优的,可能已经包含很多链接,但让我们继续。我们的文本现在包括以下条目:

about
solutions
ordering
siteassets

接下来,我们将清理列表,只包括域名。使用grep过滤掉所有包含整句行,便获得更清晰输出。

[email protected]:~# grep "href=" index.html | cut -d "/" -f 3 | grep "\."

我们的输出几乎不带任何其它内容,但是我们现在有如下所示的记录。

learningnetwork.cisco.com">Learning Network<

我们可以在第一次定义时再次使用cut命令来清除这些内容。

[email protected]:~# grep "href=" index.html |cut -d "/" -f 3 | grep "\." | cut -d '"' -f 1

现在我们有了一个相对清爽host列表,但有很多重复项。我们可以使用sort命令和unique(-u)选项清除这些内容。

[email protected]:~# grep "href=" index.html | cut -d "/" -f 3 | grep "\." | cut -d '"' -f 1 | sort -u

blogs.cisco.com communities.cisco.com csr.cisco.com developer.cisco.com grs.cisco.com home.cisco.com investor.cisco.com

learningnetwork.cisco.com newsroom.cisco.com secure.opinionlab.com socialmedia.cisco.com supportforums.cisco.com

更干净的方法是在命令中加入一些正则表达式,将输出重定向到文本文件中,如下所示:

[email protected]:~# cat index.html | grep -o 'http://[^"]*' | cut -d "/" -f 3 | sort -u > list.txt

现在我们在思科的首页上有了一个漂亮、干净的域名列表。我们的下一步将是对我们创建的文本文件中的每个域名使用host命令,以便发现它们对应的IP地址。我们可以使用Bash一行循环来实现这一点:

[email protected]:~# for url in $(cat list.txt); do host $url; done

host命令为我们提供了各种各样的输出,但不是所有相关的输出。我们只想从所有这些信息中提取IP地址,所以我们将输出通过管道传输到grep,查找文本“has address”,然后对输出进行剪切和排序。

[email protected]:~# for url in $(cat list.txt); do host $url; done     | grep "has address" |
cut -d " " -f 4 | sort -u
128.30.52.37
136.179.0.2
141.101.112.4
206.200.251.19
23.63.101.114
23.63.101.80
23.66.240.170
23.66.251.95
50.56.191.136
64.148.82.50
66.187.208.213
67.192.93.178

我们收到一个包含攻击证据的Apache HTTP服务器日志。我们的任务是使用简单的Bash命令检查文件并发现各种信息,例如攻击者是谁,以及服务器上到底发生了什么。我们首先使用head和wc命令快速查看日志文件以了解其结构。

[email protected]:~# gunzip access_log.txt.gz
[email protected]:~# mv access_log.txt access.log
[email protected]:~# head access.log
" "Mozilla/5.0 (Macintosh; Intel Mac OS      X 10_8_3) AppleWebKit/537.31 (KHTML,like
Gecko) Chrome/26.0.1410.65 Safari/537.31" 
142.96.25.17 - - [22/Apr/2013:07:09:18 -0500] "GET / HTTP/1.1" 200 356
"Mozilla/5.0 (Macintosh; Intel Mac OS X   10_8_3) AppleWebKit/536.29.13 (KHTML,
Gecko) Version/6.0.4 Safari/536.29.13" [email protected]:~# wc -l access.log

请注意,日志文件可以通过grep查找,不同的字段,如IP地址、时间戳、HTTP请求等,都用空格分隔。我们首先搜索向服务器发出的HTTP请求,以查找此日志文件中记录的所有IP地址。我们将把cat的输出通过管道传输到cut和sort命令中。这可能会告诉我们需要处理的潜在攻击者的数量。

[email protected]:~# cat access.log | cut -d " " -f 1 | sort -u

194.25.19.29

202.31.272.117

208.68.234.99

5.16.23.10

我们看到日志文件中记录的IP地址不到十个,尽管这仍然没有告诉我们有关攻击者的任何信息。接下来,我们使用uniq和sort进一步优化输出,并根据每个IP地址访问服务器的次数对数据进行排序。

[email protected]:~# cat access.log | cut -d " " -f 1 | sort | uniq -c | sort -urn
1038 208.68.234.99
445 186.19.15.24
89 194.25.19.29
62 142.96.25.17
56 93.241.170.13
37 10.7.0.52
30 127.0.0.1
13 5.16.23.10
10 88.11.27.23
6 172.16.40.254
1

一些IP地址非常突出,但我们将首先关注访问频率最高的地址。要显示和统计IP地址请求的资源,可以使用以下命令序列:

[email protected]:~# cat access.log | grep '208.68.234.99' | cut -d "\"" -f 2 | uniq -c

1038 GET //admin HTTP/1.1

从这个输出来看,208.68.234.99的IP地址似乎访问了/admin目录。让我们仔细看看:

[email protected]:~# cat access.log | grep '208.68.234.99' | grep '/admin ' | sort -u

208.68.234.99 - - [22/Apr/2013:07:51:20 -0500] "GET //admin HTTP/1.1" 401 742 "-"

"Teh Forest Lobster"

...

208.68.234.99 - admin [22/Apr/2013:07:51:25 -0500] "GET //admin HTTP/1.1" 200 575 "-"

"Teh Forest Lobster"

似乎208.68.234.99参与了针对此web服务器的HTTP暴力尝试。此外,在大约1070次尝试之后,暴力尝试似乎成功了,如HTTP 200消息所示。

希望上面的简短练习让您了解了Bash提供的一些可能性。学习有效地使用Bash环境至关重要。

1.研究Bash循环并编写一个简短脚本,以对目标IP范围10.11.1.0/24执行ping扫描。

2.尝试使用高级脚本语言(如Python、Perl或Ruby)执行上述练习。

3.确保您了解将命令输出定向到文件(>)和将命令输出作为另一命令输入(|)之间的区别。

0x01.4 

关于以上bash脚本编写还是linux分析命令,大家要下来以后多加练习,从书上我们如何在日志中找到攻击者攻击量最多的攻击者,所以学习以上命令你将会使用命令分析日志文件。

Hvv

稿&

annapeng2021@163.com

hacker

翻译:  

 jia  

红日安全出品|转载请注明来源

使

   


文章来源: http://mp.weixin.qq.com/s?__biz=MzI4NjEyMDk0MA==&mid=2649851459&idx=1&sn=6a8fa04ed8cd46c39dbefa102624d720&chksm=f3e4e8c0c49361d6c0d57814cea4c9b1bc47c3ed60e4b0bedb4aa5ce3f341727d1b7947e4e26#rd
如有侵权请联系:admin#unsafe.sh