安全见闻三:脚本程序与病毒
声明
学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
导语
在现代网络安全领域,脚本语言不仅是开发工具和自动化任务的利器,也常常被不法分子用于编写各种恶意程序,或者被红队人员用于渗透攻击。今天,我们将讨论与脚本语言、木马、宏病毒等相关的安全知识。
脚本语言
脚本语言是一类相对高级的编程语言,通常具备解释执行、动态类型以及高度灵活的特性。由于这些特点,它们在开发和渗透测试工具的编写中得到了广泛应用,特别是在网络安全测试、快速开发和自动化任务中展现了极大优势。
脚本语言的一大特点是无需编译即可运行,这不仅降低了代码编写与调试的复杂度,还允许快速迭代和即时测试。这种灵活性使得安全测试人员能够在实际测试环境中迅速开发、验证和调整代码,以适应不断变化的目标系统或网络环境。这一点在渗透测试中尤为关键,因测试工具往往需要频繁调整、实时生成或修改。
然而,脚本语言的灵活性也带来了一定的安全隐患。由于代码直接可见且易于理解,恶意攻击者可轻易修改或复用公开的脚本代码用于恶意目的。例如,很多开源的渗透测试工具中提供了常用的扫描、探测和注入功能,这些工具或其改编版本可能被恶意用户用作木马程序的基础。
脚本语言的优势:
- 动态性:支持动态类型,允许在程序运行时生成、执行代码,非常适合自动化和渗透测试中快速调整操作。
- 可读性高:多数脚本语言的语法设计简单直观,便于安全测试工程师在不同平台、不同系统上快速上手。
- 跨平台:主流脚本语言几乎都支持多种操作系统,有助于在不同系统间无缝运行测试脚本。
- 丰富的生态:很多脚本语言都拥有大量安全测试相关的第三方库,能够大大提高开发效率。
常见脚本语言:
- Python:最广泛应用的脚本语言之一,拥有丰富的渗透测试和网络库,例如
Scapy
、Requests
等,常用于编写扫描器、漏洞探测工具。 - JavaScript:广泛用于 Web 应用的脚本语言,前端的跨站脚本(XSS)攻击往往利用它,Node.js 也可以进行服务器端测试。
- PHP:因其大量用于 Web 后端开发,很多 Web 攻击利用 PHP 实现,编写 Web shell 也是 PHP 的常见用途。
- Lua:轻量级嵌入式脚本语言,广泛用于游戏开发和网络设备中,Nmap 扫描器即采用 Lua 编写部分扩展脚本。
- Go:虽然是编译型语言,但在网络编程和工具开发中表现优越,且语法简洁,常被用于编写轻量化的渗透测试工具。
尽管 Go 是一种编译型语言,但由于其快速编译的特性、简洁的语法和强大的并发处理能力,它在很多开发场景中表现出接近脚本语言的灵活性。Go 的编译速度几乎可以媲美解释执行的脚本语言,开发人员能够快速构建、测试和部署工具,因此在网络编程和渗透测试工具开发中常被选用。同时,Go 可以轻松跨平台编译成独立的可执行文件,省去了依赖管理问题,使其在渗透测试场景中具备“脚本化”的便利性。
BAT/PowerShell脚本
在 Windows 操作系统中,批处理文件(.bat) 和 PowerShell 脚本(.ps1) 是最常用的两种脚本工具。BAT脚本是Windows的批处理文件,适合执行一系列命令;而PowerShell更强大,支持复杂的自动化和系统管理任务。
.bat 脚本:
- 功能和限制:.bat 文件主要用于执行 DOS 命令或 Windows 命令提示符(CMD)中的一系列简单命令。它语法简洁,执行效率较高,但功能相对有限,只适合简单的系统管理和自动化任务。
- 强大之处:许多 Windows 病毒的核心实际上就是简单的 .bat 脚本,病毒的本质不过是特定指令的代码组合。相比起复杂的编程语言,Windows API 对病毒编写更为适合,能够直接调用系统功能,实现起来不仅更简单高效,而且天然具有良好的免杀效果。
PowerShell 脚本(.ps1):
- 强大的对象导向架构:PowerShell 是基于 .NET 框架的脚本语言,其核心优势在于完全的对象导向设计。PowerShell 处理的所有数据都是 .NET 对象,而非纯文本(如 .bat 脚本)。这意味着 PowerShell 能直接处理系统中的复杂数据结构,如用户、进程、服务等,并可以对这些对象的属性和方法进行操作。这种设计为数据处理和系统管理带来了极大的便利和灵活性。
- 丰富的内置命令和模块:PowerShell 内置了数百个功能强大的 cmdlet(命令),支持文件系统、注册表、网络、进程、服务等全面的系统管理操作。PowerShell 还可以加载外部模块或使用自定义模块,从而无限扩展其功能,甚至可以调用低层次的 Windows API。
- 跨系统远程管理:PowerShell 支持 Windows 远程管理协议(WinRM),能够远程连接和管理网络内其他计算机,这在内网渗透中尤为重要。通过 WinRM,渗透测试人员可以利用 PowerShell 在不同的机器之间横向移动,并跨系统执行命令,极大简化了渗透过程。
- 强大的自动化和脚本编写能力:PowerShell 支持复杂的控制流语句(如条件判断、循环等),并且可以封装函数、模块和脚本块,实现高度灵活的自动化流程。由于可以直接操作对象和调用 API,PowerShell 可以快速编写、调试和执行复杂的系统管理任务,使其不仅适用于渗透测试工具的开发,也适用于日常的系统维护和大规模自动化任务。
渗透测试中的应用场景
- 权限提升:BAT 脚本和 PowerShell 都可用于尝试发现并利用权限提升漏洞,获取更高权限的访问。
- 横向移动:PowerShell 支持在局域网内通过远程会话(Remote Session)访问其他计算机,常用于横向移动操作。通过获取当前系统中的凭证或敏感信息,渗透者能够借此接管其他系统。
- 持久化控制:PowerShell 的强大功能让它成为创建持久化后门的理想选择。渗透测试人员可以利用 PowerShell 编写自动化启动脚本,确保在目标系统重启后依旧保持访问。
概念辨析 :内网渗透
内网渗透与公网渗透原理相似,但内网渗透涉及的技术和方法通常比公网渗透复杂,如内网渗透中有域控制和权限管理等概念。
内网渗透不仅仅指域渗透,这样说太狭隘了,域渗透只是内网渗透的一部分。
木马与宏病毒
木马和宏病毒是两种常见的恶意软件类型,攻击者利用脚本语言实现远程控制和信息窃取。
-
木马程序:例如,PHP中的“一句话木马”通过极小的代码片段即可在服务器上实现远程控制。这类木马通常通过简单的网络请求与控制端通信,具有隐蔽性。JavaScript也可以通过BeEF等工具作为木马的一部分,在目标浏览器中执行恶意脚本。
-
宏病毒 (Macro):由VB或C#编写,常见于办公环境。攻击者使用如Metasploit等工具生成恶意宏,将其植入Office文档中。一旦用户打开含有恶意宏的文档,恶意代码将通过VB或C#脚本执行任意操作,达到攻击目的。
其他脚本病毒
-
CAD LISP:LISP是一种在CAD软件中使用的脚本语言,广泛应用于自动化图纸设计。然而,LISP脚本同样可被用作恶意工具,盗取机密CAD图纸。许多CAD用户可能因共享或下载图纸而无意中感染恶意脚本,而这些脚本因冷门常常不被杀毒软件识别。
-
AutoIt3:AutoIt是一种用于Windows自动化的脚本语言,尽管不如其他语言流行,但它可用于编写恶意脚本。攻击者可以利用AutoIt进行自动化的恶意操作,甚至远程控制目标计算机。
由于这种语言不常见,主流杀毒软件对其查杀能力较弱,使得用这种语言编写的病毒更难被
检测和清除。
BIOS病毒
与其他脚本语言病毒不同,BIOS病毒是一种更底层的威胁。它直接攻击计算机的硬件层,具有更高的隐蔽性和破坏力。编写此类病毒需要深入了解硬件和BIOS程序,但一旦成功,传统杀毒软件往往难以检测和清除。
由于BIOS病毒直接与硬件交互,它们可以在系统启动之前加载,这使得它们非常难以被发现和移除。
结语
脚本语言的力量不可小觑,既可以用于合法的自动化工具开发,也可被用于编写恶意程序。对于安全从业者而言,掌握这些语言的攻击与防御技术至关重要。持续学习和关注这些脚本,有助于我们在未来的安全工作中占据主动,提前识别并阻止潜在威胁。