网络安全与渗透测试学习笔记

从 Web 安全漏洞到渗透测试实战,系统理解攻防原理与安全实践。


1 · 安全基础

1.1 CIA 三要素

  • 机密性(Confidentiality):数据不被未授权访问
  • 完整性(Integrity):数据不被未授权篡改
  • 可用性(Availability):服务不被中断

1.2 安全设计原则

  • 最小权限:只给必要的权限
  • 纵深防御:多层安全措施,不依赖单一防线
  • 失败安全:默认拒绝,出错时进入安全状态
  • 不要信任用户输入:所有输入都要校验
  • 安全默认配置:开箱即安全

1.3 渗透测试流程

信息收集 → 漏洞发现 → 漏洞利用 → 后渗透 → 权限维持 → 编写报告

测试类型:

  • 黑盒测试:不知道内部信息
  • 白盒测试:有源码和架构
  • 灰盒测试:部分信息已知

图 1 \xb7 渗透测试流程


2 · Web 安全

2.1 XSS(跨站脚本攻击)

攻击者注入恶意脚本,使其在用户浏览器中执行。

反射型 XSS:恶意脚本在 URL 中,服务端反射到页面。 存储型 XSS:恶意脚本存入数据库,其他用户访问时触发,危害最大。 DOM 型 XSS:前端 JS 操作 DOM 时引入恶意代码,不经过服务端。

防御:

  • 输出编码:< → &lt;," → &quot;
  • CSP:限制脚本来源
  • HttpOnly Cookie:禁止 JS 读取 Cookie
  • 现代前端框架自动转义

2.2 CSRF(跨站请求伪造)

攻击者诱导已登录用户执行非预期操作。

防御:

  • CSRF Token
  • SameSite Cookie(Strict / Lax)
  • Referer / Origin 校验
  • 关键操作二次确认

2.3 SQL 注入

恶意输入拼接进 SQL 语句,执行非预期操作。

-- 正常查询
SELECT * FROM users WHERE username = 'admin' AND password = 'xxx'

-- 注入后
SELECT * FROM users WHERE username = 'admin' --' AND password = 'xxx'

防御:

  • 参数化查询(预编译语句):根本方案
  • ORM 框架自动参数化
  • 输入校验 + WAF
# 安全写法
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (user, pwd))

2.4 SSRF(服务端请求伪造)

攻击者让服务端发起任意请求,可访问内网或云元数据。

防御:

  • 白名单限制可请求的域名/IP
  • 禁止访问内网 IP 段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.169.254)
  • 禁用不需要的协议(file://、gopher://)

2.5 反序列化漏洞

不受信任的数据被反序列化时执行恶意代码。

受影响:Java(Fastjson、Jackson)、Python(pickle)、PHP(unserialize)。

防御:

  • 不反序列化不受信任的数据
  • 使用 JSON 等安全格式
  • 白名单限制可反序列化的类

2.6 文件上传漏洞

上传可执行文件到服务器并访问执行。

防御:

  • 白名单校验扩展名
  • 校验文件 Magic Number
  • 上传文件存储到非 Web 目录
  • 重命名文件

2.7 命令注入

用户输入被拼接到系统命令中执行。

// 危险
Runtime.exec("ping " + userInput);

// 安全
ProcessBuilder pb = new ProcessBuilder("ping", userInput);

3 · OWASP Top 10

排名 漏洞 说明
A01 访问控制失效 越权访问
A02 加密失败 明文传输、弱算法
A03 注入 SQL / NoSQL / 命令 / LDAP
A04 不安全设计 缺乏威胁建模
A05 安全配置错误 默认密码、目录列出
A06 脆弱过时组件 已知漏洞的依赖
A07 认证失败 弱密码、会话固定
A08 软件与数据完整性 CI/CD 污染
A09 日志与监控不足 攻击无法被发现
A10 SSRF 服务端请求伪造

4 · 认证与授权

4.1 Session vs Token

Session:

  • 服务端存储状态
  • Cookie 携带 Session ID
  • 可以主动失效

Token(JWT):

  • 无状态
  • 客户端存储
  • 服务端无法主动失效(需黑名单)

JWT 结构:Header.Payload.Signature

4.2 OAuth 2.0

授权码模式流程:

  1. 客户端请求授权
  2. 用户登录授权服务器
  3. 授权服务器返回授权码
  4. 客户端用授权码换 Access Token
  5. 客户端用 Access Token 访问资源

PKCE:移动端防止授权码被截获。

4.3 密码安全

  • 禁止明文存储密码
  • 使用 bcrypt / Argon2 / scrypt 加盐哈希
  • 实施密码复杂度要求
  • 启用 MFA

5 · 信息收集

5.1 被动信息收集

  • WHOIS:域名注册信息
  • 子域名枚举:Sublist3r、amass、OneForAll
  • DNS 记录:A、CNAME、MX、TXT
  • Google Hacking:site:example.com filetype:pdf
  • Shodan / Fofa:公网设备和服务搜索
  • GitHub 泄露:搜索 password、AKIA 等关键词

5.2 主动信息收集

Nmap 端口扫描:

nmap -sS -sV -O target.com           # SYN 扫描 + 版本 + OS
nmap -p- target.com                    # 全端口扫描
nmap -sV --script=vuln target.com      # 漏洞扫描脚本

目录扫描:

dirsearch -u http://target.com -e php,asp,jsp
gobuster dir -u http://target.com -w wordlist.txt

指纹识别:

whatweb http://target.com

6 · 漏洞利用工具

6.1 Burp Suite

核心模块:

  • Proxy:拦截和修改请求
  • Repeater:重放请求
  • Intruder:自动化模糊测试
  • Scanner:自动漏洞扫描(付费)
  • Decoder:编码/解码

6.2 SQLMap

# 检测注入点
sqlmap -u "http://target.com/page?id=1" --batch

# 列出数据库
sqlmap -u "http://target.com/page?id=1" --dbs

# 列出表
sqlmap -u "http://target.com/page?id=1" -D mydb --tables

# 导出数据
sqlmap -u "http://target.com/page?id=1" -D mydb -T users --dump

6.3 Metasploit

msfconsole
search type:exploit name:apache
use exploit/multi/http/xxx
set RHOSTS target.com
set RPORT 80
exploit

6.4 其他工具

工具 用途
Nikto Web 服务器漏洞扫描
Hydra 暴力破解
Hashcat / John 密码哈希破解
BeEF 浏览器漏洞利用
Empire PowerShell 后渗透

7 · 后渗透与权限维持

7.1 Linux 提权

常见方法:

  • SUID 二进制文件滥用
  • sudo 配置错误(sudo -l)
  • Cron 任务利用
  • 可写敏感路径
  • 内核漏洞(Dirty COW、Dirty Pipe)
# 查找 SUID 文件
find / -perm -4000 -type f 2>/dev/null

# 查看 sudo 权限
sudo -l

7.2 Windows 提权

  • 内核漏洞(MS16-032、PrintNightmare)
  • 服务配置错误
  • DLL 劫持
  • 令牌窃取
  • UAC 绕过

7.3 权限维持

Linux:

  • Cron 任务
  • SSH 公钥
  • systemd 服务
  • PAM 后门

Windows:

  • 注册表自启
  • 计划任务
  • 服务
  • WMI 事件订阅

Web 后门:

  • Web Shell(PHP JSP ASP)
  • 内存马

8 · 防御与加固

8.1 Web 应用加固

  • WAF:ModSecurity、云 WAF
  • 输入校验:白名单优于黑名单
  • 输出编码
  • 安全响应头:
    • X-Frame-Options: DENY
    • X-Content-Type-Options: nosniff
    • Strict-Transport-Security
    • Content-Security-Policy
  • CORS 白名单,不用 *

8.2 服务器加固

  • 及时更新补丁
  • 关闭不必要端口
  • SSH 安全配置:禁用密码登录、禁用 root、改端口
  • 防火墙最小开放
  • 文件最小权限
  • 日志审计

8.3 安全监控

  • 日志:Nginx / 应用 / 系统日志集中收集
  • IDS/IPS:Suricata、Snort
  • HIDS:OSSEC、Wazuh
  • SIEM:ELK、Splunk
  • 蜜罐:HFish、Cowrie

8.4 SDL(安全开发生命周期)

  • 威胁建模
  • 安全编码规范
  • 代码审计
  • 安全测试
  • 应急响应预案