文章目录
- [Day11 - XSS](#Day11 - XSS)
- [Day12 - 钓鱼](#Day12 - 钓鱼)
- [Day13 - YARA规则](#Day13 - YARA规则)
- [Day14 - 容器](#Day14 - 容器)
- [Day15 - Web攻击取证](#Day15 - Web攻击取证)
- [Day16 - 注册表取证](#Day16 - 注册表取证)
- [Day17 - 学习使用CyberChef](#Day17 - 学习使用CyberChef)
-
- [0. CyberChef介绍](#0. CyberChef介绍)
- [Day18 - 混淆](#Day18 - 混淆)
- [Day19 - ICS/Modbus](#Day19 - ICS/Modbus)
- [Day20 - 竞争条件](#Day20 - 竞争条件)
- [Day21 - 恶意软件分析](#Day21 - 恶意软件分析)
- [Day22 - C2探测](#Day22 - C2探测)
- [Day23 - AWS安全性](#Day23 - AWS安全性)
- [Day24 - 利用cURL](#Day24 - 利用cURL)
Day11 - XSS
XSS,跨站脚本攻击,攻击者在可控输入字段中注入恶意代码,通常是JavaScript脚本代码。当Web应用不能正确验证用户输入时,输入可能被当作代码执行。恶意代码会窃取凭据、篡改页面或冒充用户。
- 反射型XSS:通常通过钓鱼,诱导用户点击恶意链接。从而窃取凭据。
例如:https://trygiftme.thm/search?term=<script>alert( atob("VEhNe0V2aWxfQnVubnl9") )</script>- 存储型XSS:恶意脚本存储在服务器上,每次有用户访问该页面,都会触发攻击者的脚本。
例如:提交一个包含恶意脚本的评论。每次有人访问会触发。
html
POST /post/comment HTTP/1.1
Host: tgm.review-your-gifts.thm
postId=3
name=Tony Baritone
email=tony@normal-person-i-swear.net
comment=<script>alert(atob("VEhNe0V2aWxfU3RvcmVkX0VnZ30="))</script> + "This gift set my carpet on fire but my kid loved it!"
防范XSS:
- 禁用危险的
- 设置Cookie的HttpOnly、Secure、SamSite属性。分别是禁止JavaScript获取Cookie、Https传输、阻止跨域信息泄露的风险。
- 对输入进行过滤,对输出进行编码。
Day12 - 钓鱼
网络钓鱼是最有效的社会工程手段之一。随着邮件过滤和安全工具的防御加强,攻击者也在不断调整战术。
钓鱼的核心在于精准和说服力,精心设计模拟真实门户、流程,欺骗即使足够谨慎的用户。
凭据盗窃;恶意软件传播;数据外泄;金融欺诈(欺骗用户转账)。
垃圾邮件和钓鱼的区别:
- 垃圾邮件是大量噪音,而钓鱼是精准攻击。
- 垃圾邮件目的是促销、诈骗、吸引流量、数据采集。
网络钓鱼的主要技术:
- 模仿:假扮个人(如HR、领导)、部门甚至服务的角色来诱导用户,获取用户信任。
- 我们可以通过查看发件人的邮箱是否与公司标准域名匹配,识别。
- 社会工程学 :社会工程学编造可信的故事、电子邮件、电话或聊天消息,利用人的情绪(好奇、紧张、恐惧、助人等)诱导受害者。
- 例如:Emergency/紧急/注意!等词汇、VPN访问/供应链邮件等真实场景(贴合受害者的日常工作生活)。
- 相似域名:例如(githud.com)
- Punycode是一种特殊的编码格式 ,能够将Unicode字符转换为ASCII。在浏览器输入punycode时,会被翻译成ASCII,这是DNS接受的格式。
3、4都可能攻击缺乏注意力的用户。- 欺骗邮件:通过精心构造的标题,像是从公司域名发来的邮件(现在可以轻松被拦截)。
例如:from paypal.com,可以在AUTHENTICATION-RESULTES、RETURN-PATH发现端倪。- 恶意附件:最典型的钓鱼邮件,是结合社会工程学,诱导用户点击运行恶意附件。
由于恶意邮件过滤机制和用户防范意识的增加,现代的钓鱼技术隐藏在OneDrive等受信任服务后,例如,提出一个有吸引力的共享文件,诱导用户访问伪造的登录页面,从而窃取凭据。
- 通过极具吸引力的提议欺骗用户。
- 伪造登录页面。
- 侧信道通信。攻击者可能会提议将会话从邮件转移到其它渠道(如短信、微信、电话等),例如BOSS直聘骗术先加微信。 从而在不受攻击安全防御控制的平台上继续进行社会工程。
总结,常见的钓鱼邮件特征:
- 冒充身份(可信个体,如领导、同事,关键在可信人)。
- 域名仿冒/PunyCode编码。
- 制造紧迫感。24小时、紧急处理、最后一小时等。
- 伪造发件人(伪造发邮件的地址,邮件头From字段被修改,关键在可信源)。
- 虚假发票。发送伪造的付款请求,诱导点击或转账。
- 恶意附件。
- 伪造登录页面。窃取凭据。
- 社会工程话术。
- 外部发件人域名。非公司域名(好识别)
- 侧信道尝试。诱导用户通过非官方渠道交流。
例题:
- 邮件1伪造Paypal支付邮件,利用了伪造发件人、虚假支票、制造紧迫感,三种技术。
- 邮件2利用恶意附件(application/octet-stream)、伪造发件人(邮箱)、冒充身份(同事)。
- 邮件3利用社会工程(结合蓝队身份的欺骗、结合VPN场景的欺骗)、身份冒充、制造紧迫感(urgent)
- 邮件4利用社会工程、身份冒充、外部邮件域名
- 邮件5只是在宣传,属于垃圾邮件
Day13 - YARA规则
YARA,是用来检测恶意软件的开源工具。
- 定义规则:这些规则描述了恶意软件可能出现的特定"模式"(如特殊的代码、字符串、加密特征等)。
- YARA不收集新数据,而是利用已有规则去扫描系统中的文件、内存(运行中的进程)、磁盘镜像等。目的是匹配已知的恶意模式。
- YARA允许自定义规则,根据自己的经验去调整规则。
常见用途:
- 事后分析。核实恶意软件痕迹是否横向渗透。
- 威胁狩猎。在系统和端点搜索恶意软件痕迹。
- 基于情报的扫描。利用共享的YARA规则,检测入侵迹象。
- 内存分析。
YARA规则由几个关键要素组成:
- 元数据:关于规则本身的信息,谁创建了它目的是什么。
- 字符串:YARA搜索的线索,可以是正则表达式。
- 条件:规则触发的逻辑。
例如:
yara
rule Malware_Trace
{
meta:
author = "SOC"
description = "Detects traces of Malware"
date = "2025-12-30"
strings:
$s1 = "rundll32.exe" fullword ascii
$s2 = "msvcrt.dll" fullword wide
$url1 = /http:\/\/.*malware.*/ nocase
condition:
any of them
}
在YARA中,字符串主要有三种:
- 文本字符串
nocase,不区分大小写;
wide ascii,宽字符字符串(unicode等2字节字符 )
xor,YARA自动检查字符串所有可能的单字节异或变体 。
base64,解码搜索原始内容。
十六进制字符串
rule HexDetect
{
strings:
mz = { 4D 5A 90 00} hex_string = { E3 41 ?? C8 G? VB}
condition:
mz and hex_string
}正则表达式
rule RegexDetect
{
strings:
url = /http:\/\/.*malware.*/ nocase cmd = /powershell.*-enc\s+[A-Za-z0-9+/=]+/ nocase
condition:
url and cmd
}
条件:
- 匹配单个:$xml
- 匹配任意:any of them
- 匹配所有:all of them
- 逻辑结合:(s1 or s2) and not $s3
- 结合文件大小:any of them and (filesize < 700MB)
运行YARA :
yara -r -s rules ./
- -r:递归目录, -s:打印匹配的字符串
Day14 - 容器
容器,container,是软件包,将代码及其所有依赖打包起来,使其能够在任何环境中可靠运行。
容器化通过将应用程序及其依赖打包在一个孤立环境解决配置复杂、环境冲突、安全性等问题。
微服务架构 :微服务是一种应用程序架构风格上的转变。过去,应用程序通常以单体(monolithic)方式部署------即整个应用作为一个单一单元构建,使用单一代码库,通常打包为一个可执行文件。
如今,越来越多的公司选择根据业务功能将应用程序拆分为多个独立的部分 。
这样一来,当应用程序的某一部分面临高流量负载时,他们可以仅对该部分进行扩展,而无需扩展整个应用程序。
这正是容器轻量级特性的优势:容器极易于扩展 ,能够快速应对不断增长的需求。
容器引擎,Container Engine,是一种软件,利用宿主操作系统的功能(如命名空间namespaces、控制组cgroups)来构建、运行、管理容器。
Docker
Docker是一个开源平台,使用Dockerfiles(定义环境和依赖关系的简单脚本)来构建、打包、跨不同系统一致地运行应用程序。
Container Escape Attack & Sockets
容器逃逸是一种使容器内运行的代码获取隔离环境之外的宿主机内核(或其它容器)权限的技术。
容器在主机上采用C-S架构。命令行CLI,作为客户端,向容器守护进程(container daemon)发送请求 。容器守护进程负责实际的容器管理工作。
容器运行时(runtime)通过Unix Sockets,运行时套接字(runtime sockets)暴露一个API服务器,用于处理命令行和守护进程之间的通信。
如果攻击者能够从容器内部与该套接字通信,那么就可能利用容器运行时发动攻击。
Docker基础命令
shell
# 1.检查正在运行的所有容器
docker ps
# 2.在已运行的容器中执行交互式shell
docker exec -it uptime-checker sh
# -i 交互式, -t tty伪终端
# uptime-checker 容器ID或容器名称
# 3.在docker shell继续执行命令
docker ps
# 4.
docker exec -it deploy bash (or) sh
Day15 - Web攻击取证
使用Splunk过滤风险。自动检测字符集base64解码。
- 搜索"Internal Server Error",如果形如url?md=powershell触发500错误,说明攻击者的攻击还未到达后端,在Web层面被拦截。
Day16 - 注册表取证
Windows注册表取证。
Windows注册表,包含了Windows操作系统运行所需的所有信息 。
注册表在磁盘上的实际文件,被称为配置单元(Hives)。
常见的配置单元有:
| 配置单元名称 | 存储位置 | 包含 |
|---|---|---|
| SYSTEM,存储系统启动和硬件配置信息 | C:\Windows\System32\config\SYSTEM |
Services、Mounted Device、Boot Configuration、Drivers、Hardware |
| SECURITY,存储安全策略 | C:\Windows\System32\config\SECURITY |
Local Security Policies、Audit Policy Settings |
| SOFTWARE,存储已安装软件的设置 | C:\Windows\System32\config\SOFTWARE |
Installed Programs、OS Version and other info、Autostarts、Program Settings |
| SAM,存储本地用户账户和安全信息 | C:\Windows\System32\config\SAM |
Usernames and their Metadata、Password Hashes、Group Memberships、Account Statuses |
| NTUSER.DATA,存储用户配置文件 | C:\Users\username\NTUSER.DAT |
Recent Files、User Preferences、User-specific Autostarts(用户特定的自启动文件) |
| USRCLASS.DAT,存储当前用户专属的文件类型关联、COM对象注册信息、部分Shell扩展设置 | C:\Users\username\AppData\Local\Microsoft\Windows\USRCLASS.DAT |
Shellbags、Jump Lists |
- 上面列出的包含项,只是例子。每个配置单元存储很多内容。
配置单元在Windows中映射的路径:
| 配置单元 | 映射路径 |
|---|---|
| SYSTEM | HKEY_LOCAL_MACHINE\SYSTEM |
| SECURITY | HKEY_LOCAL_MACHINE\SECURITY |
| SOFTWARE | HKEY_LOCAL_MACHINE\SOFTWARE |
| SAM | HKEY_LOCAL_MACHINE\SAM |
| NTUSER.DAT | HKEY_USERS\<SID> and HKEY_CURRENT_USER |
| USRCLASS.DAT | HKEY_USERS\<SID>\Software\Classes |
取证相关的注册表配置单元:
在Windows数字取证调查中,调查人员通过分析注册表、事件日志、文件系统数据、内存数据和其他相关数据来构建整个事件时间线。
| 取证注册表键(key) | 重要性 |
|---|---|
| HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist | 存储通过GUI启动的最近访问的应用程序的信息 |
| HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths | 将用户输入的所有路径和位置存储在资源管理器的地址栏中 |
| HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths | 存储应用程序的路径 |
| HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery | 将用户输入的所有搜索词存储在资源管理器的搜索栏中 |
| HKLM\Software\Microsoft\Windows\CurrentVersion\Run | 存储用户登录时设置为自动启动的程序信息 |
| HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs | 存储用户最近访问的文件的信息 |
| HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName | 存储计算机的名称 |
| HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | 存储安装程序的信息 |
Registry Explorer有许多开源的数字取证工具。
Day17 - 学习使用CyberChef
CyberChef是英国政府通信总部(GCHQ)开发并开源的多功能数据格式转换与加密解密工具。
核心功能是编码解码、加密解密、哈希计算、压缩解压、网络协议解析、文件分析、正则表达式操作等 。
完全基于Web运行,可离线使用。
0. CyberChef介绍
编码是转换数据 的方法,用于确保不同系统之间的兼容性。
- 编码目的:兼容性、可用性。编码具有标准,速度快不安全。
- 加密目的:安全和保密。加密关键在于算法和密钥,速度慢具有安全性。
CyberChef_Web、GitHub分别是在线Web和可自己部署的离线版本。
| Web区域 | 描述 |
|---|---|
| Operations | CyberChef的功能库 |
| Recipe | 对操作区域进行微调和链接 |
| Input | 提供Recipe的输入 |
| Output | Recipe的输出 |
- 将operations拖到recipe;
- Input输入内容;
- 可以不断添加operations,观察output变化。
Day18 - 混淆
混淆、加壳是为了让数据(代码)难以阅读和分析。
常见的混淆技术有:
- 字符移动、加密、编码。如ROT1、ROT13、Base64
- XOR,每个字符用字节表示,每个自己使用XOR。CyberChef即可完成此工作。选择XOR操作;输入内容;输入key为a,HEX格式。
- CyberChef有Magic操作,能够自动推测常见的编码。
- 多层混淆:例如gzip压缩、XOR、Base64
Day19 - ICS/Modbus
什么是SCADA?
SCADA用于远程监控和管理工业设备的软件系统。通过传感器和控制器接收实时数据(如温度、压力、流量),在中央操作站上显示,并允许操作员发出控制命令。
SCADA软件系统由四个关键部分组成。
- Sensors & actuators,传感器和执行器。传感器测量现实世界的条件,如压力、温度、重量等。执行器执行物理动作,如阀门打开、机械臂移动等。
- PLCs(Programmable Logic Controllers),可编程逻辑控制器,一种坚固耐用的工业计算机,用于执行自动化的逻辑控制任务。PLC读取传感器数据,根据用户编写的控制程序,快速响应。
- Monitoring systems,监控系统。可视化页面,提供即时的视觉反馈。
- Historians,存储数据以供后续分析,每个系统变化都会被记录。这些历史数据有助于识别模式、排除问题、复现攻击者的行为。
为什么攻击者要针对SCADA系统 ?
工业控制系统,如SCADA,已经成为网络罪犯注意的目标,原因如下:
- 许多SCADA系统是几十年前安装的,通常运行具有已知漏洞的遗留软件。
- 通常使用默认凭据。
- 可靠性优先,而不是安全性,工控系统大多被设计在安全的封闭网络中。身份验证、加密和访问控制在设计之初并未考虑。
- 工控系统控制着现实世界的重要活动,往往有巨大的破坏性。
- 大多数SCADA系统连接到业务网络,用于报告、远程管理和数据集成,因此很容易成为攻击的入口点。
- Modbus等工业设备间通信的协议,往往是为可信环境设计的,缺乏身份验证。
Modbus(端口502)是一种开放、简单、广泛使用的工业通信协议,允许PLC、传感器、HMI(人机页面)等设备通过串口(RS-485)或TCP/IP网络交换数据。
采用主-从(Master-Slave)模式。
2024年初,第一个ICS/OT恶意软件被发现,该软件可以直接通过Modbus TCP协议与工业控制系统进行交互,从而通过TCP 502端口对设备寄存器进行任意读写。
ICS,Industrial Control Systems,工业控制系统。
PLC介绍 :
PLC(可编程逻辑控制器)是一种工业计算机,设计用于在现实环境中控制机械和过程。与笔记本电脑或智能手机不同,plc是专门为极端可靠性和恶劣条件设计的机器。
- 极端环境运行。工业生产环境可能高温、潮湿、灰尘、电磁干扰。
- 连续运行无故障。当PLC开始运行时,预计会无预期地运行下去。
- 实时执行控制逻辑。
- 与物理硬件直接交互。
Modbus介绍 :
Modbus是工业设备用来相互通信的通信协议。它由Modicon(现为施耐德电气)于1979年创建,是世界上最古老、部署最广泛的工业协议之一。它的长寿并不是由于复杂的功能------恰恰相反。Modbus之所以成功,是因为它简单、可靠,而且几乎可以与任何设备兼容。
Modbus的主从结构流程是基本的请求 - 响应对话:
Client(计算机 ):PLC,寄存器0的当前值是多少?
Server(PLC):寄存器0当前保存值为1。
这种简单性使得Modbus易于实现和调试,但也意味着安全性从来没有被考虑过。没有身份验证,没有加密,没有授权检查。
Modbus的数据类型 :
Modbus将数据组织为4种不同类型,每种类型在工业自动化中都有特定的用途。
- Colis,数字输出(on / off),值为0 or 1。例如:机械臂运行吗?
- Discrete Inputs, 数字输入(on / off),0 or 1。例如:传感器触发了吗?
- Holding Registers,模拟输出(数字),0 ~ 65535。例如:电机转速。
- Input Registers,模拟输入(数字),0 ~ 65535。
输入和输出之间的区别很重要。Colis和存储寄存器是可写的,可以改变它们的值来控制系统。离散输入和输入寄存器是只读的,它们反映的是你观察到但不能直接修改的传感器测量值。
Modbus Addressing
Modbus中每个数据点都有唯一的地址,当需要读取或写入特定值时,可以通过地址编号引用。地址索引从0开始,Register 0,意思是第一个寄存器。
Modbus TCP vs Serial Modbus
最初,Modbus使用RS-232或RS-485电缆进行串行连接。设备在网络中是物理连接的,这种物理隔离提供了一定程度的安全性------需要物理访问线路来拦截或注入命令。
现代工业系统使用Modbus TCP,它将Modbus协议封装在标准TCP/IP网络数据包中。Modbus TCP服务器默认监听端口502。这使得远程监控、更容易与业务系统集成以及集中管理。但它也使这些历史上孤立的系统暴露于基于网络的攻击 。
Modbus TCP协议的安全问题:
- 没有身份验证。任何客户端都可以发起连接并发送命令。
- 没有加密。明文通信。
- 没有授权的概念。如果能够连接,就能够读写所有内容。
- 没有完整性检查 。不会校验命令是否被篡改。
现代的安全解决方案是通过VPN、防火墙、Modbus安全网关等附加组件。而不是从协议本身提高安全性。并且许多工业设备没有实施这些保护措施。
分析ICS、Modbus攻击,以无人机控制系统为例 :
Step 1:最初的侦察
shell
nmap -sV -p22,80,502 $ip
# 80开放HTTP服务、502TCP使用Modbus。没有进行UDP、TCP全端口扫描。
# 80 + 502,是典型的工控系统:用于监控的Web页面和用于PLC的Modbus
Step 2:进一步侦察 (针对开放服务)
使用pymodbus库,直接访问Modbus服务器。
shell
pip3 install pymodbus==3.6.8
python3 # 打开Python解释器
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('10.48.182.82', port=502)
if client.connect():
print("Connected to PLC Successfully")
else:
print("Connected Failed")
# 3.读取Holding寄存器
# 4.读取colis
# 5.了解Trap
完整脚本如下:
shell
vim reconnaissance.py
python
#!/usr/bin/env python3
from pymodbus.client import ModbusTcpClient
PLC_IP = "10.48.182.82"
PORT = 502
UNIT_ID = 1
# Connect to PLC
client = ModbusTcpClient(PLC_IP, port=PORT)
if not client.connect():
print("Failed to connect to PLC")
exit(1)
print("=" * 60)
print("TBFC Drone System - Reconnaissance Report")
print("=" * 60)
print()
# Read holding registers
print("HOLDING REGISTERS:")
print("-" * 60)
registers = client.read_holding_registers(address=0, count=5, slave=UNIT_ID)
if not registers.isError():
hr0, hr1, hr2, hr3, hr4 = registers.registers
print(f"HR0 (Package Type): {hr0}")
print(f" 0=Christmas, 1=Eggs, 2=Baskets")
print()
print(f"HR1 (Delivery Zone): {hr1}")
print(f" 1-9=Normal zones, 10=Ocean dump")
print()
print(f"HR4 (System Signature): {hr4}")
if hr4 == 666:
print(f" WARNING: Eggsploit signature detected")
print()
# Read coils
print("COILS (Boolean Flags):")
print("-" * 60)
coils = client.read_coils(address=10, count=6, slave=UNIT_ID)
if not coils.isError():
c10, c11, c12, c13, c14, c15 = coils.bits[:6]
print(f"C10 (Inventory Verification): {c10}")
print(f" Should be True")
print()
print(f"C11 (Protection/Override): {c11}")
if c11:
print(f" ACTIVE - System monitoring for changes")
print()
print(f"C12 (Emergency Dump): {c12}")
if c12:
print(f" CRITICAL: Dump protocol active")
print()
print(f"C13 (Audit Logging): {c13}")
print(f" Should be True")
print()
print(f"C14 (Christmas Restored): {c14}")
print(f" Auto-set when system is fixed")
print()
print(f"C15 (Self-Destruct Armed): {c15}")
if c15:
print(f" DANGER: Countdown active")
print()
print("=" * 60)
print("THREAT ASSESSMENT:")
print("=" * 60)
if hr4 == 666:
print("Eggsploit framework detected")
if c11:
print("Protection mechanism active - trap is set")
if hr0 == 1:
print("Package type forced to eggs")
if not c10:
print("Inventory verification disabled")
if not c13:
print("Audit logging disabled")
print()
print("REMEDIATION REQUIRED")
print("=" * 60)
client.close()
攻击事件:
- 未经身份认证的端口接入(502)
- 直接在协议级别操作配置值
- 禁用安全机制
- 实施了Trap,阻拦补救。
- 其它攻击措施。
Day20 - 竞争条件
当多个操作并发发生时 ,就会产生竞争条件,系统处理的结果取决于它们完成的顺序。
在 Web 应用程序中,这种情况通常发生在①多个用户或自动化请求并非访问或修改 ②共享资源 (例如库存或账户余额)时。
如果没有适当的同步机制,就可能导致意外结果,例如重复交易、超卖商品或未经授权的数据更改。
同步指的是协调多个并发执行单元(如线程、进程、请求等)对共享资源的访问顺序,以确保程序行为正确、一致和可预测。
竞争条件可分为三类:
- Time-of-Check to Time-of-Use(TOCTOU) ,当程序首先检查某些东西,然后使用它,但在这两者之间数据发生变化时,就会发生TOCTOU竞争条件。 例如:先检查是否有库存,然后购买。但检查库存时,其他人触发了购买。
- Shared resource,当多个用户或系统试图在没有适当控制的情况下同时更改相同的数据时,会发生这种情况。
- Atomicity violation ,原子操作应该一次性完成,要么完全完成,要么完全不执行。当一个进程的各个部分独立运行时,另一个请求可能会混入其中,导致结果不一致。 例如:支付商品,在系统确认前,管理员更改了价格。
竞争条件需要并发请求,使用burpsuite便于执行。
- 执行正常请求
- proxy histroy,移动到Repeater,创建Group、复制请求。
- Send Group in parallel(last-byte sync),发送准备。
- Send group(parallel),并发发送多个请求。可能会导致计时错误。
缓解竞争条件:
- 使用原子数据库事务。
- 为该请求实现幂等键,确保重复的内容不会多次处理。
- 使用速率限制或并发控制来限制同一用户、会话的快速重复尝试。
Day21 - 恶意软件分析
恶意软件分析一定要在沙箱进行。
HTA概述 :
2025年,勒索团队利用HTA文件伪装成伪造的验证页面来传播Epsilon Red勒索病毒。
HTA文件:HTML Application 的缩写,HTA就像使用常见Web技术(HTML、CSS、JavaScript)构建的小型桌面应用程序。
与在浏览器中打开的普通网页不同,HTA文件通过一个名为Microsoft HTML Application Host的内置组件直接在Windows上运行------mshta.exe。使得它们看起来和行为上都像具有自己的接口和操作的轻量级程序。在合法的使用场景中,HTA文件有几个实际用途:
- 自动化管理或设置任务
- 为内部脚本提供快速接口
- 测试小型而不构建完整的软件
- 提供日常使用的轻量级IT支持工具
HTA文件结构:类似HTML页面
HTA声明:定义为HTML Application,包括基本属性,如标题、窗口大小、行为。
界面(HTML and CSS):创建布局和视觉效果,如按钮、表单或文本。
脚本(VBscript or JavaScript):定义提了HTA打开时或与用户交互的操作。
<html> <head> <title>TBFC Utility Tool</title> <HTA:APPLICATION ID="TBFCApp" APPLICATIONNAME="Utility Tool" BORDER="thin" CAPTION="yes" SHOWINTASKBAR="yes" /> </head> <body>
一个简单的示例如下:Welcome to the TBFC Utility Tool
</body> </html>
恶意使用HTA的常见目的:
- 初始访问:HTA文件通过网络钓鱼传输,通过mshta.exe执行。
- HTA可以从C2下载并执行脚本
- HTA可以通过嵌入编码数据、使用简单的脚本片段或带有隐藏的进程来进行免杀规避。
- HTA通常调用内置的Windows工具。
在实践中,HTA通常会①下载并运行第二阶段的payload;或②打开C2通道。
Day22 - C2探测
Real Intelligence Threat Analytics (RITA),真实情报威胁分析,是一个开源框架,核心功能是通过分析捕获的网络流量和日志检测C2通信。
- C2 beacon检测
- DNS tunneling 检测
- 长连接检测
- 数据泄露检测
- 查看威胁情报
- 按严重程度评分
- 显示与外部特定IP通信的主机数量
- 显示外部主机首次在网络出现的时间
RITA只接受Zeek日志输入。Zeek是开源的网络安全监控(NSM)工具。它不是防火墙或IPS/IDS,只是通过配置的SPAN端口(将流量从一个端口复制到另一个端口进行监控)、物理网络Taps、或导入PCAP格式数据包观察网络流量。
然后Zeek将这些输入转换为结构化的输出,可用于事件检测和响应。
shell
# 将PCAP文件转为zeeklog
zeek readpcap test.pcap zeek_logs/asyncrat
导入Zeek log进入RITA进行分析
shell
rita import --logs ~/zeek_logs/asyncrat/ --database asyncrat
# 查看结果
rita view asyncrat
Day23 - AWS安全性
1.AWS IAM介绍(用户、组、角色和策略)
Identify and Access Management,IAM ,身份和访问管理是一个框架 or 过程,用于控制和保护组织的数字身份和用户访问。
Amazon Web Services,AWS,使用IAM管理用户对各种资源的访问,包括对资源执行的操作。错误的IAM配置会导致攻击者访问不该房屋的资源。
- IAM Users:在AWS中,用户代表一个单一身份。每个用户都有一组可用于访问资源的凭据,如密码或访问密钥。此外,可以在用户级别授予权限,从而定义用户可能具有的访问级别。
- IAM Groups:简化或用户的访问管理,组级别授予权限。例如,授予一个组访问数据库的权限。当某个用户需要权限时,将其加入组。权限到期时将其从组中移除。
- IAM Roles:角色是一种临时身份。临时授权,无法登录,必须附加给用户、服务、外部账户。通过亚马逊安全令牌服务(STS)获取。
- IAM Policies:对任何用户、组、角色的访问都通过IAM策略控制,IAM 策略是一个JSON文件,定义了:①允许执行的操作;②操作执行的客体(资源);③在什么条件下执行(Condition);④Principal(主体),被授权执行某项操作的实体。
例如:下面的IAM策略授予user/Alice(主体),从my-private-bucket(资源)获取对象(操作)的权限。无条件。
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSpecificUserReadAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Alice"
},
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-private-bucket/*"
}
]
}
2.枚举用户的权限
可以使用AWS CLI进行交互。
cat ~/.aws/credentials,查看凭据
aws sts get-caller-identity,查看为AWS CLI配置的用户信息。
用户枚举:
shell
# 1.列出所有用户
aws iam list-users
# 2.枚举用户策略
aws iam list-user-policies --user-name sir.carrotbane
#分配给用户的策略
aws iam list-attached-user-policies --user-name sir.carrotbane
#用户策略是与用户生命周期绑定的策略;附加策略/托管策略,是可以给多个用户、组、角色分配的策略。
#查看用户是否是组成员(枚举用户所属组)
aws iam list-groups-for-user --user-name sir.carrotbane
# 3.查看用户策略实际内容
aws iam get-user-policy policy_name --username sir.carrotbane
3.角色枚举
sts:AssumeRole,允许"扮演"roles相关角色。
shell
# 1.枚举roles
aws iam list-roles
# 2.查看角色对应的策略
aws iam list-role-policies --role-name role_name
#查看分配给这个角色的托管策略
aws iam list-attached-role-policies --role-name bucketmaster
# 3.查看策略对应的权限
aws iam get-role-policy --role-name bucketmaster --policy-name BucketMasterPolicy
# 4.获取临时凭据,行使角色
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/bucketmaster --role-session-name TBFC
4.S3简介
Simple Storage Service,S3,是AWS提供的对象存储服务 ,可以存储任何类型的对象,如图像、文档等。
S3中存储的任何对象都会放入一个"桶,bucket"中,可以将其视为存储文件的目录(云上)。
shell
# 1.列出可用的s3存储桶
aws s3api list-buckets
# 2.查看bucket/目录 内容/对象
aws s3api list-objects --bucket easter-secrets-12345
# 3.复制文件到本地
aws s3api get-object --bucket easter-secrets-12345 cloud_pass.txt cloud_pass.txt
Day24 - 利用cURL
curl是用于创建HTTP请求和查看原始响应的工具,适用于没有图形化界面的场景。
shell
# GET
curl http://ip
# POST + data(req body)
curl -X POST -d "username=user&password=user" http://ip/login.php
# 查看服务器响应的响应头
curl -i
可以通过①首次登录可以使用 -c 保存cookie到文件;②-b重复使用cookie
shell
curl -c cookie.txt -d "user=user&pass=pass" http://ip
curl -b cookie.txt http://ip
通过-A可以自定义U-A头
shell
curl -A "internalComputer" http://ip
