为了让大家在后续的实战中能够快速上手常用工具,本节将对接下来使用频率较高的工具和命令进行介绍。
在渗透测试实战中,首先要对目标主机进行信息探测,即通过各类信息收集手段尽可能多地获得该主机的相关信息。在接下来的实战中,将使用工具nmap来收集目标主机端口、服务及其服务版本等的信息:
其中,-sC、-sV、-v、-A这四个参数的含义如下。
❑-sC:根据端口识别服务自动调用默认脚本,即nmap将根据识别到的具体服务自动使用对应的默认脚本检测服务详情。
❑-sV:扫描目标主机的端口和软件版本,即nmap将在探测端口的基础上继续对版本信息进行探测。
❑-v:输出详细信息,通过该参数我们将实时获得探测过程中的进度等详细信息。
❑-A:综合扫描,包含基于1~10000的端口进行ping扫描、操作系统扫描、脚本扫描、路由跟踪和服务探测等。
基于上述组合参数,nmap将会对目标主机1~10000的端口进行扫描,并对扫描过程中检测到的开放端口进行服务和软件版本的探测,并且会调用相关服务的默认脚本配置进行详情探测,同时在扫描过程中实时输出详细信息。
在此基础上,我们还会用到如下附加参数。
❑-p:指定端口,用于指定nmap对特定端口单独进行扫描,例如要扫描445端口,使用-p 445参数即可。如果使用-p-参数,则意味着nmap将会对目标主机1~65535的所有端口进行探测。
❑--script:指定调用特定的nmap脚本,使用该参数可以执行特定的检测功能,例如当我们希望通过nmap检测常规漏洞时,就可以使用--script vuln参数,该参数会要求nmap使用所有与漏洞检测相关的脚本进行漏洞检测。
实际上,nmap还有大量的其他参数可供使用,在终端输入nmap--help命令就可以获得更多的参数使用帮助信息,如图1-63所示,大家感兴趣可以自行深入学习和使用。
我们通过nmap收集了目标主机的相关信息后,若发现其对外开放了http、https等Web服务,那么可以使用各类Web目录枚举工具尝试自动查找相关的可访问目录及文件。在接下来的实战中,会用到dirsearch、dirbuster以及gobuster共三款Web目录枚举工具,枚举字典将全部使用同一个文件,在Kali中此文件所在的路径为/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt。
该文件默认由dirbuster附带,dirbuster在Kali Linux 2020.2中是默认集成的,如果由于Kali Linux系统版本的原因导致该文件目录不存在,可尝试通过sudo apt-get install dirbuster命令进行安装,或者通过如下链接单独下载:
https://github.com/daviddias/node-dirbuster/blob/master/lists/directory-list-2.3-medium.txt
使用上述文件作为枚举字典时,可通过如下命令使用dirsearch工具:
图1-63 nmap-help命令的执行结果
其中-u参数用于输出目标主机的IP地址,-w参数用于输入要使用的枚举字典,我们需要根据实际情况将directory-list-2.3-medium.txt文件所在的完整路径填写在此处,此参数还有一个类似的参数--url-list,它与-w参数的不同之处在于--url-list仅使用枚举字典的文件内容进行枚举操作,而-w参数则是dirsearch基于枚举字典文件内容自动生成的一些变化性的枚举内容,因此-w参数的枚举速度要比--url-list慢,但是它枚举的有效性更高。-e参数用于设置默认枚举的文件后缀名,使用-e default或者-E时,dirsearch会使用默认设置进行枚举操作。-t参数用于限定枚举过程中的最大线程数,线程数越大,枚举检测的速度越快,但要注意目标主机的最大响应能力,应避免因线程数过高导致目标主机系统崩溃。
在撰写本书时,dirsearch已升级,新版本中-e default和-E参数已被废除,若大家在使用该工具的过程中被提示-e default或者-E不是合法参数,即为版本更新的缘故。这时,可去除相关参数,仅使用如下命令:
类似地,我们可使用如下参数来调用gobuster进行Web目录枚举操作。
其中dir参数用于限定gobuster进行Web目录枚举操作,-w参数则与dirsearch类似,即用于输入要使用的枚举字典,我们需要按实际情况将directory-list-2.3-medium.txt文件所在的完整路径填写在此处,-t参数用于限定枚举过程中的最大线程数,-x参数用于设置默认枚举的文件后缀名,-u参数用于输出目标主机的IP地址。此命令与dirsearch的参数设置方式相似,但是要注意的是,在实战中即使给不同的工具设置相同的枚举字典以及类似的参数,最终获得的枚举结果也可能并不相同,这与各工具的执行方式有关,因此在后续的实战中也将提及使用多工具进行饱和性测试的必要性。
最后是dirbuster工具的使用,它的使用方式相比上述工具更为简单,因为其提供了GUI图形化界面,如图1-64所示,我们可以通过在Kali的开始菜单中输入“dirbuster”关键字以及点击相关的选项来执行命令。
图1-64 dirbuster的启动方式
启动dirbuster后,界面如图1-65所示,以后每次使用dirbuster进行Web枚举操作时,都会有对应的配置示意图,大家按步骤进行设置即可。
图1-65 dirbuster界面
与Web目录枚举操作类似,针对目标主机的Web系统进行渗透测试时,还经常会用Burpsuite进行流量分析。Burpsuite是用于攻击Web系统以及应用程序的集成平台,包含了许多工具,在流量捕获与流量分析过程中可以为我们提供非常丰富的功能,并且可对目标主机的Web应用程序实现流量篡改攻击、流量重放攻击等。
Burpsuite的工作方式类似于我们常说的“中间人攻击”,中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是在同一个网络中,通过各种技术手段虚拟地将受入侵者控制的一台计算机放置在两台计算机之间,这台计算机则称为“中间人”。而Burpsuite就有些类似于我们和被测程序之间的“中间人”,它以代理服务器的形式存在于Kali浏览器以及被测的目标主机的Web应用程序之间,我们向被测程序发送的请求流量将经由Burpsuite转发,因此在该过程中发出或获得的所有流量都可以通过Burpsuite进行修改或重放。
为了实现该逻辑,首先需要为Kali主机的浏览器设置代理服务器,在接下来的所有实践中,我们都将以Kali自带的Firefox ESR浏览器作为默认的浏览器,下面先按图1-66所示的方式找到Firefox ESR并启动。
图1-66 Firefox ESR的启动方式
启动浏览器后,点击如图1-67所示的“Add-ons”按钮,进入浏览器插件管理页面。
图1-67 “Add-ons”按钮的位置
之后在插件管理页面的搜索框内搜索“FoxyProxy”关键字(如图1-68所示),FoxyProxy是Firedox浏览器中一款优秀的代理服务管理器,它可以帮助我们方便地设置和开启一个浏览器代理服务,从而搭建与Burpsuite的流量通道。
图1-68 搜索“FoxyProxy”关键字
搜索上述关键字的结果,如图1-69所示,点击其中的“FoxyProxy Standard”,并将其添加到浏览器,即可完成该插件的添加操作。
图1-69 搜索关键字“FoxyProxy”的结果
如图1-70所示,在浏览器的右上角新增了一个图标,点击该图标即可显示FoxyProxy的功能界面。
点击界面中的“Options”按钮,并在弹出的页面中点击如图1-71所示的“Add”按钮。
图1-70 FoxyProxy界面
图1-71 “Add”按钮的位置
最后在弹出的页面中按如图1-72所示的方式输入代理服务器的名称、IP地址以及端口,并点击右下角“Save”按钮。由于Burpsuite默认将代理服务设置于本机的8080端口,因此这里的代理IP地址和端口分别为127.0.0.1和8080,设置该代理名称为“burp”,该名称不是强制选项,只是为了便于后续我们使用该配置,大家可以将其设置为自己喜欢的名称。
图1-72 添加代理服务
如图1-73所示,FoxyProxy将在界面中显示刚才设置的代理名称,点击该名称后,我们的浏览器就将使用对应的代理设置进行网络访问。
在这里可以测试一下代理服务器的设置效果,首先启动Burpsuite,启动方式如图1-74所示。
图1-73 代理服务“burp”
图1-74 Burpsuite的启动方式
在弹出的界面中点击右下角“Next”按钮,如图1-75所示。
然后在如图1-76所示的页面中点击右下角“Start Burp”按钮完成启动操作。
进入Burpsuite主界面后,按如图1-77所示的方式点击“Proxy”标签,进入代理服务界面。
图1-75 Burpsuite启动的第一界面
图1-76 Burpsuite启动的第二界面
如图1-78所示,在“Proxy”标签下选择“Options”标签,进入设置页面。
之后就可以看到Burpsuite的默认流量监听端口位于主机本地的8080端口上了,如图1-79所示,这与刚才在FoxyProxy中设置的代理“burp”一致。这里还可以增加其他端口作为流量监听端口,这在某些存在端口占用冲突的情况下非常有用。
图1-77 Burpsuite主界面中“Proxy”标签的位置
图1-78 “Proxy”标签下“Options”标签的位置
下面按图1-73所示的方式在FoxyProxy中选择“burp”代理,并在该浏览器中访问任意一个网站,如图1-80所示。我们的访问请求流量信息将被Burpsuite拦截,在此处可以直接对流量进行编辑和修改,这将为后续的流量分析提供非常大的帮助。此外,我们还可以对该流量进行多种操作,比如点击“Forward”按钮会放行并跟踪该流量;点击“Drop”按钮会舍弃该流量,被舍弃的流量请求将无法被对方服务器收到;点击“Intercept is on”按钮,会暂时关闭Burpsuite的流量捕获功能,该按钮将会显示为“Intercept is off”,再次点击即可重新启用此功能。
图1-79 Burpsuite的代理设置
图1-80 使用Burpsuite捕获流量
在后续的实战中,我们将更深入地使用Burpsuite的更多功能,此处只需要保证完成上述操作,并成功捕获流量即可。
反弹shell,顾名思义,即通过特定的方式使目标主机系统主动向Kali主机发起连接的过程,目标主机通过该连接向我们提供一个shell形式的终端,我们可以通过该终端以目标主机系统上的特定用户身份执行命令。
可通过如下步骤获得一个来自目标主机系统的反弹shell连接。
1)在Kali主机本地监听一个特定的端口。
2)为目标主机系统构建获得特定反弹shell的命令,使其向我们已监听的端口主动发起连接,并提供shell形式的终端界面。
3)Kali主机本地已监听端口获得来自目标主机系统的连接请求,并成功建立连接,进而获得shell形式的目标主机系统终端。
在端口上的监听操作往往通过nc命令实现,具体命令如下。
其中-lvnp参数是-l、-v、-n和-p这四个参数的联合缩写,其含义分别如下。
❑-l:开启监听操作。
❑-v:显示详情信息。
❑-n:不进行域名解析,由于目标主机系统的连接请求均以IP形式存在,因此无须通过域名解析操作。
❑-p:限定端口号,该端口不能已被使用。
通过上述命令,我们将在Kali主机的本地特定端口开启监听操作,并等待相关连接请求。
若要为目标主机系统构建获得特定反弹shell的命令,则需要我们已获得目标主机的命令执行权限,例如找到了远程命令执行漏洞或者其他已知可执行的系统命令漏洞等。链接https://github.com/acole76/pentestmonkey-cheatsheets/blob/master/shells.md提供了常用的获得反弹shell的命令清单,这些命令需要依赖的程序各不相同,我们需要根据目标主机系统的实际情况进行选择和尝试,在后面的实战中也将针对相关可用反弹shell命令进行讲解。
类似地,我们还可以借助msfvenom命令定向生成特定的反弹shell二进制文件或命令,msfvenom是Metasploit提供的后门生成软件,可以生成各类提供反弹shell功能的后门程序或命令,在接下来的实战中也将用到msfvenom相关的功能,届时会根据相关情况进行介绍。
如果获得反弹shell的命令被成功执行,将在Kali主机本地的特定端口获得一个来自目标主机系统的反弹shell连接,那么就可以借助该反弹对目标主机执行操作系统命令了。建议大家将获得的反弹shell通过如下命令进行优化。
通过上述命令,我们可以获得一个pty交互式的shell,它的功能类似于我们通过ssh服务获得的合法shell连接,它可以为我们提供tab键命令补全、全命令执行无环境限制等功能,从而帮助我们更方便地执行操作系统命令。
在进行渗透测试时,文件传输是一个必不可少的环节,为了能够流畅且方便地进行文件传输,可以尝试使用http或者smb服务。
使用http传输方式时需要用到如下命令:
该命令将允许Kali Linux在本地临时开启一个http服务,并对外开放80端口。我们输入该命令的终端所在的目录位置将被默认开放为http服务的根目录。这意味着假设现在Kali主机的IP地址为10.10.14.2,我们在Kali主机本地/temp/目录下开启一个终端并输入上述命令,那么/temp/目录将会默认被设置为http服务的根目录,外部主机访问http://10.10.14.2/即可显示/temp/目录下的所有文件和子目录。如果此时我们希望将/temp/shell.sh文件上传至目标主机系统,那么只需要在目标主机系统上执行如下命令即可。
通过该方式即可实现http下的文件传输操作。
事实上,也可以在Kali本地主机上开启允许匿名访问的smb服务,从而实现文件共享和传输,该部分操作和所需的工具将在5.3节详细介绍。
目标主机系统的本地信息枚举经常用于对目标主机系统进行用户提权,即已经获得了目标主机的某一普通用户权限,希望通过检测目标主机系统本地的配置信息、系统版本号等信息尝试进行提权操作,以获得更高权限的用户账户使用权利。在该环节中,我们将使用命令与工具相结合的形式,来完成目标主机系统本地信息的枚举操作。对于其中的命令部分,不同的目标主机侧重点不同,后续会逐步介绍,此处先介绍后续将多次使用的本地信息枚举工具。
❑LinPEAS(Linux Privilege Escalation Awesome Script)是Linux系统下的本地信息枚举脚本,它可以自动检测出目标主机系统本地各类疑似存在脆弱性的配置选项和存在漏洞的系统版本,并帮助我们对不同风险级别的信息进行颜色标注,适合初学者使用。LinPEAS的下载地址为https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS。
❑WinPEAS(Windows Privilege Escalation Awesome Scripts)与LinPEAS类似,出自同一个作者,用于Windows系统下的系统本地信息枚举,WinPEAS的下载地址为https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS。
❑LinEnum也是一款较为有名的Linux系统下的本地信息搜集脚本,不过近两年的更新较为缓慢,且检测粒度和风险标注相比LinPEAS还是稍显逊色,但这两款工具的检测项目并不完全相同,LinEnum很适合作为一款补充性的检测工具使用。LinEnum的下载地址为https://github.com/rebootuser/LinEnum。