OSCP必备参考书籍之一,这本书里加详细介绍实战套路中细节,为大家可以快速了解OSCP知识点,所以团队开启这本书翻译之作。 ---小峰
Kali Linux包含300多个取证和渗透测试工具,有时找到绕过它们的方法是一项艰巨的任务。在下一个模块中,我们将向您展示一些技巧和窍门,帮助您找到卡利的路线,以便您快速起身并跑步。正如亚伯拉罕·林肯(Abraham Lincoln)曾经说过的那样,“如果我有六个小时的时间砍树,我会用头三个小时磨斧头。
对于本课程,我们将使用Kali Linux的32位(i686)VMware映像,主要是为了在本课程后面的Linux缓冲区溢出练习。这是我们在整个课程开发过程中使用的相同图像,因此为了获得最佳效果并与实验指南保持一致,我们建议您也使用此系统。使用VMware版本的Kali还可以获取虚拟机的快照,以便在需要将虚拟机重置为全新状态时恢复。
要使用VMware版本的Kali Linux,请提取归档文件并使用VMware打开.vmx文件。如果VMware提示您是否复制或移动了虚拟机,请选择“我复制了它”。Kali VM的默认凭据为:
用户名:kali
密码:kali
第一次启动虚拟机并以kali用户身份登录后,请确保使用passwd实用程序更改root密码。
Kali Linux菜单主要充当发行版中大量工具集合。对于不熟悉使用特定工具的用户了解其上下文和用法。确保花时间浏览Kali Linux菜单,以帮助你快速熟悉可用的工具及其类别。
有许多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的服务是如何工作的,以及成功管理它们需要什么。
1.花时间熟悉Kali Linux菜单
2.确定文件plink.exe在Kali中的位置
3.查找并阅读dnsenum工具的文档
Kali Linux是一个专门针对安全专业人员的Linux发行版。因此,它包含几个非标准功能。默认的Kali安装附带多个预安装的服务,如SSH、HTTP、MySQL等。如果保持不变,这些服务将在引导时加载,这将导致Kali Linux默认暴露多个开放端口,出于安全原因,我们希望避免这种情况。Kali通过更新我们的设置来解决这个问题,以防止网络服务在启动时启动。
Kali还包含白名单和黑名单各种服务的机制。以下模块将讨论其中一些服务,以及如何操作和管理它们。
如果您从映像文件安装了Kali,安装过程应该会提示您输入根密码。如果您使用的是Kali Linux VMware映像,则默认的根密码为toor。在启动任何服务(如SSH)之前,请确保将任何默认密码或弱密码更改为长、复杂和安全的密码。可以使用passwd命令更改根密码,如下所示。
[email protected]:~# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
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]:~#
在渗透测试期间,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.如果您使用的是Kali VMware映像,请将根密码更改为安全密码。
2.练习启动和停止各种Kali服务。
3.启用SSH服务以在系统引导时启动。
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.确保您了解将命令输出定向到文件(>)和将命令输出作为另一命令输入(|)之间的区别。
关于以上bash脚本编写还是linux分析命令,大家要下来以后多加练习,从书上我们如何在日志中找到攻击者攻击量最多的攻击者,所以学习以上命令你将会使用命令分析日志文件。
红日安全长期、短期项目招聘:Hvv、重保、安服、培训等项目
文章投稿&项目招聘邮箱:
annapeng2021@163.com
同样感谢一直在安全圈中深耕着的每一位hacker
描下方二维码,期待加入红日安全交流群:
有幸一起并肩前行,有幸一起见证着“红日”成长。在大家身上我已经收获得足够多了,是时候用实际行动向安全世界说声谢谢了。
翻译:小峰
编辑:小jia
红日安全出品|转载请注明来源
海量安全课程
阅读原文 即可观看