web漏洞扫盲 && 计算机网络相关 && 密码学

协议

HTTP/HTTPS

  • HTTP

    • 请求响应结构

      • 起始行:方法(get post)路径 版本
      • 头部:键值对,元数据(user-Agent Cookie Host)
      • 主题body:实际数据
    • 常见方法

      • GET 从服务器获取资源,?id=1
      • POST 向服务器提交数据。参数放在body里,更安全
    • 状态码

      • 1xx 信息性响应
      • 2xx 成功 200 OK
      • 3xx 重定向 301 永久移动 302 临时移动
      • 4xx 客户端错误 403 forbidden 无权限 404notfound 对应资源找不到
      • 5xx 服务器错误 500 Internal Server Error 后端崩溃 502 Bad Gateway 错误网关/连接超时
    • 流量结构

      • 请求结构

        • 请求行,请求头,空行,请求体

        • POST /api/v1/login HTTP/1.1              <-- 1. 请求行 (Method, Path, Version)
          Host: example.com                        <-- 2. 请求头 (Headers)
          Content-Type: application/json
          Content-Length: 27
          User-Agent: Mozilla/5.0
                                                   <-- 3. 空行 (CRLF, \r\n)
          {"username":"admin","pw":"123"}          <-- 4. 请求体 (Body)
          
          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

          - 请求行:

          - Method (方法): `GET` (获取), `POST` (提交), `PUT` (更新), `DELETE` (删除), `OPTIONS` (预检)。
          - Path (路径): 目标资源的 URL 路径及查询参数。
          - Version (版本): `HTTP/1.1` 或 `HTTP/2`。

          - 请求头: 键值对形式,告知服务器客户端的环境、预期的格式(Accept)、认证信息(Cookie/Authorization)等。

          - 空行: 必须存在,用于标识 Header 结束和 Body 开始。

          - 请求体: 实际传输的数据。`GET` 请求通常没有 Body。

          - 响应结构

          - ```
          HTTP/1.1 200 OK <-- 1. 状态行 (Version, Status Code, Phrase)
          Date: Sat, 10 Jan 2026 14:00:00 GMT <-- 2. 响应头
          Server: Apache
          Content-Type: text/html; charset=UTF-8
          Content-Length: 155
          <-- 3. 空行
          <html> <-- 4. 响应体
          <body>Hello World</body>
          </html>
    • 关键Header

      • Cookie / Set-Cookie: 维持会话状态,是 CSRF 和会话劫持的核心。
      • Referer / Origin: 标识请求来源,常用于 CSRF 防御。
      • User-Agent: 客户端特征,常用于爬虫识别或漏洞精准投放。
      • Content-Length / Transfer-Encoding: 涉及 HTTP 请求走私 (Request Smuggling) 漏洞的关键字段。
      • X-Forwarded-For: 标识原始 IP(在经过代理/负载均衡时),常被用于绕过 IP 限制。
    • 流程

      • 输入http://www.baidu.com/123 后 发生了:

      • DNS解析

        • 浏览器缓存——操作系统缓存——路由器缓存——ISP递归DNS。。。
        • 可能发生DNS劫持
      • 建立连接(TCP三次握手

        • SYN: 客户端:“你好,我想连接你(序号 x)。”
        • SYN-ACK: 服务端:“收到,我也准备好了(序号 y,确认号 x+1)。”
        • ACK: 客户端:“太好了,那我们开始吧(确认号 y+1)。”
      • 发送HTTP请求

        • GET /api/user HTTP/1.1
          Host: http://www.baidu.com/123
          Cookie: session_id=12345
          User-Agent: Mozilla/5.0...
          
      • 服务器处理并返回响应

  • HTTPS

    • HTTP是明文传输的,意味着任何中间人都能看到密码等敏感数据

      • HTTPS解决了以下问题:

        • 机密性 (Confidentiality): 内容加密,中间人看不懂。

        • 完整性 (Integrity): 内容不可篡改,改了就会被发现。

        • 身份认证 (Authentication): 证明你访问的确实是真正的目标网站,而不是钓鱼网站。

    • 流程

      • 在三次握手之后 进行TLS握手
        • Client发送支持的加密列表和随机数A
        • Server发送选择好的加密算法,数字证书和随机数B
      • 证书校验
        • 浏览器检查证书是否过期,域名是否匹配,CA签名是否合法
        • 证书包含CA的数字签名 使用CA的公钥解密能解开才通过完整性校验
      • 生成预主密钥
        • 浏览器从证书中获取公钥,生成随机数C 用公钥加密后发送给服务器
      • 生成会话密钥Session key
        • 现在都有ABC 双方通过协商好的算法 把这三个混合成一个会话密钥
      • 开始对称加密通信
        • 使用这个会话密钥加密http数据 进行传输
        • 先用非对称协商密钥 再用对称快速通信

image-20211204165055568

OWASP TOP 10

XSS

  • Cross Site Scripting 网站中注入恶意脚本 导致浏览器执行任意代码(通常JS
    • 反射型:服务端直接返回到html,存储在url参数里
    • 存储型:存到数据库里,服务端读取后返回到html,危害大
    • DOM型:不经过服务端,客户端js/url localstorage解析时触发
  • 钓鱼 内网探测 配合CSRF 劫持表单 盗取cookie等
  • 防御:
    • 输出转义,HTML实体编码
    • HttpOnly:禁止JS读取cookie 防止窃取
    • 内容安全CSP:限制域名白名单,禁止内敛脚本等
    • 输入验证

CSRF

  • Cross-site Request Forgery 跨站请求伪造
    • 核心是网站对用户浏览器的信任,攻击者诱导受害者访问一个恶意页面,该页面利用浏览器自动携带cookie的特性来获取cookie 导致盗号等,本质是利用用户权限来进行非法操作
  • 防御
    • Anti-CSRF token 服务器嵌入一个随机生成的token,客户端请求时必须携带该token。攻击者无法获取这个token 无法伪造请求
    • 属性:将Cookie设置为SameSite=LaxStrict,限制第三方网站请求携带 Cookie。
    • 验证Referer/Origin:检查请求来源是否可信(可以主动隐藏, )https跳http也会丢失referrer
    • 二次验证,短信验证码/支付密码

SSRF

  • Server-Side Request Forgery 服务端请求伪造
    • 核心原理是:攻击者利用服务端提供了“从外部获取资源”的功能(如图片上传、URL 预览),伪造请求让服务器去访问其内网资源
      攻击目标: 绕过防火墙,探测服务器所在的内部网络、读取敏感配置文件、攻击内网其他脆弱服务。
  • 防御
    • 黑名单 白名单限制协议,域名,ip等
    • 验证内网ip
    • 防止DNS重绑定:直接对校验过的ip发起连接
    • 网络隔离:业务服务器和内网隔离

SQL注入

  • 数据与命令未分离,用户输入直接拼接进SQL语句里导致的非法执行
    • 联合注入 UNION SELECT
    • 报错注入
    • 盲注:布尔盲注 时间盲注
    • 宽字节注入
      • 原理:当后端使用 addslashes 等函数转义单引号时(' 变为 \'),如果数据库编码是 GBK,攻击者输入 %df%27。转义后变成 %df%5c%27。由于 GBK 认为 %df%5c 是一个汉字,导致反斜杠被“吃掉”,单引号逃逸。
      • 防御:使用 mysql_set_charset('gbk') 统一字符集,或直接使用 预编译
    • 二次注入
      • 原理:第一步攻击者输入的恶意数据经过转义存储到了数据库中(此时是安全的)。第二步,程序再次调用该数据并拼接到另一个 SQL 语句中执行,此时恶意数据生效。
      • 防御:永远不要信任从数据库里取出的数据,二次调用时依然要进行预编译或转义
    • 所有参数都可以预编译吗?
      • 不可以! 预编译只能处理 占位符(Data Literal)
      • 无法预编译的场景ORDER BY [字段名]GROUP BYLIMIT、表名、列名。
      • 解决方案:这些位置必须使用 白名单 校验,或强制类型检查
  • 现在哪还有sql注入啊。。

密码学

AES

  • 分组密码,每次处理16字节
  • 工作模式
    • ECB 每个块独立加密,可以明文统计
    • CBC 每个块与前一个密文块xor 再加密
    • CTR 对一个递增的计数器加密 再与明文xor (iv不可重复
    • GCM :CTR+GMAC消息验证码,有密文防篡改 推荐使用

对称加密 V.S 非对称加密

image-20260110231254346

  • 非对称加密主要依靠复杂的数学难题(大数分解,椭圆曲线点运算)来实现

    • C = E_publickey(P), P = D_privatekey(C)
  • RSA

    • 基于大数分解
    • 至少需要2048位才安全
    • 核心步骤
      • 选两个超大质数pq 计算n = pq
      • 计算phi(n) = (p-1)(q-1)
      • 公钥e 与phi(n)互质
      • 计算 e 关于phi(n) 的模反元素私钥d image-20260110232034302
      • 这样就有了公钥对n e 私钥对n d
      • image-20260110232132853
  • ECC

    • 定义曲线:例如常见的 y^2 = x^3 + ax + b。

      基点 G:曲线上一个已知的点。

      私钥 k:一个巨大的随机数。

      公钥 K:通过“标量乘法”计算出的点 K = kG。

  • Diffie-Hellman

    • image-20260110232310875