ps:sql xss 文件包含上传部分之前已经单独发 需要另取

一、Brute Force(暴力破解)

Low 级

  • 源码逻辑:没有任何防护,直接接收用户名密码查询数据库。

  • 攻击流程:

    1. 浏览器打开 DVWA Brute Force 页面,输入任意账号密码,提交。
    2. Burp Suite 开启拦截,抓到 GET /vulnerabilities/brute/?username=admin&password=123&Login=Login​。
    3. 右键 Send to Intruder,Clear §,选中 password 值添加§。
    4. Payloads 加载字典,Start Attack。
    5. 根据响应长度差异找出正确密码。
  • 防御思维:应限制单位时间内登录尝试次数,加入验证码,或锁定账户。

Medium 级

  • 源码逻辑:登录失败后 sleep(2)​ 延迟响应。
  • 攻击流程:使用相同爆破方法,只是速度变慢,依然可破。
  • 防御缺陷:只增加时间成本,未限制尝试次数。

High 级

  • 源码逻辑:加入 Anti-CSRF token,每次登录页面生成一个随机 token,表单提交时需带上,否则拒绝。

  • 攻击流程(Burp Macro 自动获取 token):

    1. Burp 抓到登录请求,发现参数 user_token​。
    2. Project options → Sessions → Macros → Add,录制获取登录页面(GET 请求)的宏。
    3. 在宏中提取响应里的 user_token​ 值(使用正则:name='user_token' value='(.+?)'​)。
    4. 设置 Session Handling Rule,让每次 Intruder 请求前先执行宏,将提取的 token 替换到请求中。
    5. 再启动爆破,每次自动携带最新 token。
  • 防御缺陷:token 可被工具自动获取,防御强度依赖于 token 的不可预测性和一次性。可结合验证码或账户锁定。

Impossible 级

  • 防御逻辑:账户锁定机制(3次失败锁定15分钟)+ 强密码策略 + Anti-CSRF token。
  • 攻击者视角:无法暴力破解,只能尝试社会工程学或密码喷洒(用极常见密码,不触发锁定)。
  • 正确防御:限制登录频率、账户锁定、多因素认证。

二、Command Injection(命令注入)

Low 级

  • 源码:shell_exec('ping ' . $target);​

  • 攻击流程:

    1. 输入框填 127.0.0.1 & whoami​,直接执行额外命令。
    2. Windows 可尝试 127.0.0.1 && net user​。
  • 防御思维:避免调用系统命令,必须使用时对参数进行严格白名单校验。

Medium 级

  • 源码逻辑:str_replace(array('&', ';'), '', $target)​,只过滤 &​ 和 ;​。

  • 攻击流程:

    1. 输入 127.0.0.1 | whoami​,管道符未被过滤,命令执行。
    2. 或 127.0.0.1 || whoami​。
  • 绕过思维:黑名单总有遗漏,攻击者会尝试所有可能的命令连接符(|​, ||​, &&​, %0a​ 等)。

High 级

  • 源码逻辑:更复杂的正则,过滤 |​, &​, ;​, ​(空格)等。

  • 攻击流程:

    1. 尝试换行符注入:127.0.0.1%0awhoami​(需要手动修改请求,Burp 中 URL-encoded 后发送)。
    2. 或使用 $(whoami)​ 命令替换(Linux)。
    3. 通过编码绕过:空格用 ${IFS}​ 或 <​ 重定向等。
  • 防御缺陷:黑名单正则几乎不可能覆盖所有可能,必须使用白名单。

Impossible 级

  • 防御:IP 地址白名单验证(filter_var​ 检查是否为合法 IP),并使用 escapeshellarg​ 转义参数。
  • 攻击者视角:无注入点,只能通过其他漏洞获取命令执行。

三、CSRF(跨站请求伪造)

Low 级

  • 源码逻辑:修改密码接口直接接收 password_new​、password_conf​,无任何校验。

  • 攻击流程:

    1. 攻击者制作一个页面,包含自动提交的表单:

      <form action="http://dvwa/vulnerabilities/csrf/" method="GET">
        <input type="hidden" name="password_new" value="hack">
        <input type="hidden" name="password_conf" value="hack">
        <input type="hidden" name="Change" value="Change">
      </form>
      <script>document.forms[0].submit();</script>
      
    2. 诱导受害者访问该页面,其浏览器会携带 DVWA 的 Cookie 自动提交,密码被改为 hack。

  • 防御思维:任何敏感操作必须加入攻击者无法预知的 token。

Medium 级

  • 源码逻辑:检查 HTTP_REFERER​ 头,确保请求来自本域名。

  • 攻击流程(隐藏 Referer):

    1. 使用 <meta name="referrer" content="no-referrer">​ 构造攻击页面,这样浏览器不会发送 Referer 头。
    2. 有些环境直接不发送 Referer,即可绕过。
    3. 或利用 data: URI 发起请求(部分浏览器不发送 Referer)。
  • 防御缺陷:Referer 头可由浏览器策略控制,不是可信防御手段。

High 级

  • 源码逻辑:生成 Anti-CSRF token 存在 session,表单提交时验证。

  • 攻击流程:

    • 如果没有 XSS,无法直接获取 token,CSRF 基本不可行。
    • 但若网站存在反射型 XSS,可编写 JS 自动获取页面 token 并发起修改密码请求(XSRF 结合)。
  • 防御评价:token 是最基础的防御,但需确保不泄露,并设置 SameSite Cookie。

Impossible 级

  • 防御:要求输入 当前密码 才能修改,token 单次有效。
  • 攻击者视角:不知道原密码,无法伪造请求。
  • 正确防御:关键操作必须验证用户凭证(二次认证)。

四、Insecure CAPTCHA(不安全的验证码)

Low 级

  • 源码逻辑:密码修改分两步,第一步输入密码,第二步显示验证码页面,但后端不校验验证码,可直接跳过第二步。

  • 攻击流程:

    1. Burp 抓取正常修改密码的第一步请求。
    2. 分析参数,发现可以直接提交 step=2&password_new=abc&password_conf=abc&Change=Change​。
    3. 跳过验证码步骤,直接修改密码。
  • 防御思维:验证码的验证必须与核心操作原子绑定。

Medium 级

  • 源码逻辑:验证了 g-recaptcha-response​ 参数是否存在,但未向 Google reCAPTCHA 服务器验证其有效性。

  • 攻击流程:

    1. 伪造请求,添加 g-recaptcha-response=1​ 即可绕过。
  • 防御缺陷:验证形同虚设。

High 级

  • 源码逻辑:向 Google reCAPTCHA API 真实验证,但验证成功后只设置 $_SESSION['captcha']​ 为 true,后续修改密码时只检查这个 session 标记。

  • 攻击流程:

    1. 攻击者在自己的浏览器中正常完成一次验证码验证,使自己的 session 中标记为已验证。
    2. 然后利用 CSRF 漏洞,诱导受害者在同一个浏览器(共享 session)下点击攻击链接。
    3. 由于 session 已验证,密码修改成功。
  • 防御缺陷:验证未与具体请求绑定,可被复用。

Impossible 级

  • 防御:验证码验证结果以一次性 token 形式绑定到修改密码的请求,用后即失效,且需要原密码。
  • 正确方案:状态机设计严谨,每次敏感操作都独立验证。

五、Weak Session IDs(弱会话 ID)

Low 级

  • 源码逻辑:Session ID 可能是自增数字或简单时间戳。

  • 攻击流程:

    1. 用浏览器查看自己的 Cookie,PHPSESSID=100​。
    2. 推测其他用户的 ID 可能是 99、101 等。
    3. 修改 Cookie 为 101​,刷新页面即可劫持他人会话。
  • 防御思维:会话 ID 必须高熵、不可预测。

Medium 级

  • 源码:md5(time())​ 生成 Session ID。
  • 攻击流程:获取服务器时间(可通过 HTTP Date 头),在一个小时间窗口内计算可能的 MD5 值,暴力枚举。

High 级

  • 源码:md5(uniqid(rand(), true))​,熵增加,但 uniqid 基于微秒和服务器时间,rand() 可能可预测。
  • 攻击可行性:理论可预测,实践难度大。

Impossible 级

  • 防御:使用 PHP 原生 session_start()​ 生成的真随机 ID,且设置 HttpOnly​, Secure​, SameSite​ 属性。
  • 正确方案:使用框架提供的强加密随机数生成器。

  • 六、JavaScript Attacks(JavaScript 攻击)

    ​核心思路​:前端通过 JS 生成 token 并与 phrase 绑定,提交时验证 token。攻击者需绕过 token 校验,通过浏览器控制台手动执行 JS 函数重新生成匹配的 token。

    Low 级

    源码审计
    前端直接包含生成 token 的 JS 代码:

    • 页面加载时,调用 generate_token()​ 基于默认 phrase 生成 token。
    • 用户提交时,后端会对比 token​ 和 phrase​ 是否匹配(实际检测在服务端,但 token 生成逻辑全在客户端)。

    攻击流程

    1. 在输入框直接提交 success​,抓包发现返回 “Invalid token”。
    2. 因为修改了 phrase,token 还是原来默认 phrase 生成的,所以不匹配。
    3. ​浏览器 F12 → Console​,输入 generate_token()​ 并执行。
    4. 函数会根据当前输入框中的 phrase​(即 success​)重新计算 token 并更新到隐藏字段。
    5. 再次提交,成功。
    6. 若 Console 执行后仍失败,可手动抓包修改 token 值为执行函数后的值。

    Medium 级

    源码审计
    JS 代码被抽出到单独文件,且经过压缩。核心逻辑:

    • ​do_something(e)​ 函数:字符串反转。
    • ​do_elsesomething(e)​ 函数:将传入参数 + phrase + "XX" 拼接,反转后设置为 token。
    • 页面加载 300ms 后执行 do_elsesomething("XX")​。

    攻击流程

    1. 提交 success​,token 错误。
    2. 抓包查看当前 token,为 "XXsuccessXX"​ 的反转。
    3. 打开 ​F12 Console​,手动输入 do_elsesomething("XX")​ 执行。
    4. 函数重新生成与 success​ 匹配的 token。
    5. 提交即可通过。

    High 级

    源码审计
    JS 经过高度混淆,需反混淆后得到逻辑:

    • ​do_something(e)​:字符串反转。

    • ​token_part_1(a, b)​:将 phrase 反转后赋给 token。

    • ​token_part_2(e = "YY")​:将 e​ + 当前 token 值做 sha256 后赋给 token。

    • ​token_part_3(t, y = "ZZ")​:将当前 token 值 + y​ 做 sha256 后赋给 token。

    • 执行顺序:

      1. 立即执行 token_part_1("ABCD", 44)​ → token = 反转(phrase)
      2. 300ms 后执行 token_part_2("XX")​ → token = sha256("XX" + token)
      3. 点击提交时触发 token_part_3()​ → token = sha256(token + "ZZ")

    攻击流程

    1. 输入 success​,直接点击提交肯定失败。

    2. 在控制台按顺序手动执行:
      javascript

      token_part_1("ABCD", 44);
      token_part_2("XX");
      

      这会在后台生成正确的 token 值。

    3. 再点击提交按钮(此时会触发 token_part_3()​),最终生成的 token 与服务端校验逻辑一致,通过。

    Impossible 级

    ​官方说明​:无法做到 Impossible,因为任何发送给用户的客户端代码都可被操纵或绕过。因此本模块没有 Impossible 等级,​永远不要信任客户端验证​。


    七、CSP Bypass(内容安全策略绕过)

    ​核心思路​:利用 CSP 头允许的脚本来源,将恶意 JavaScript 放在被信任的源上,通过 <script>​ 标签加载执行。

    Low 级

    CSP 策略

    php

    $headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;";
    

    允许从 self​ 及 pastebin.comhastebin.com 等外部源加载脚本。

    源码逻辑
    用户提交 include​ 参数后,页面直接插入:

    html

    <script src="用户输入URL"></script>
    

    攻击姿势

    1. 找一个 CSP 允许的外部站点,如 pastebin.com​,新建一个 paste,内容为 alert(1)​。
    2. 点击 raw 获取纯文本 JS 文件地址。
    3. 复制该地址,在输入框中提交。
    4. 页面生成 <script src="https://pastebin.com/raw/xxxxx"></script>​,CSP 放行,弹窗成功。

    Medium 级

    CSP 策略

    php

    $headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";
    

    使用固定 nonce 值,仅允许带此 nonce 的内联脚本执行。

    源码逻辑
    用户输入直接作为 HTML 插入到页面中(echo $_POST['include']​)。

    攻击姿势
    构造如下 payload:

    html

    <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert('xss')</script>
    

    输入后,因带有正确的 nonce,浏览器会执行该内联脚本,弹窗成功。
    (nonce 值也可从 HTTP 响应头的 CSP 中直接复制)

    High 级

    CSP 策略

    php

    $headerCSP = "Content-Security-Policy: script-src 'self';";
    

    仅允许同源脚本。

    源码逻辑
    页面包含一个按钮,点击时动态创建 <script src="source/jsonp.php?callback=solveSum">​。
    JSONP 接口 /vulnerabilities/csp/source/jsonp.php​ 会根据 callback​ 参数返回对应的函数调用。

    攻击姿势
    由于 callback​ 参数完全可控,可以构造:

    text

    <script src="source/jsonp.php?callback=alert('xss')"></script>
    

    提交该 payload 后,浏览器加载同源脚本,返回 alert('xss')({})​,触发弹窗。
    绕过点:CSP 信任同源脚本,但同源下存在未过滤回调的 JSONP 接口。

    Impossible 级

    CSP 策略
    仍为 script-src 'self'​,但 JSONP 接口不再接受 callback 参数,改为固定函数名 solveSum​。
    ​impossible.js​ 中硬编码了 s.src = "source/jsonp_impossible.php";​,不接收任何用户可控参数。

    防御效果
    无法通过构造回调来执行任意代码,CSP 与接口均安全。

    完美防御。

总结:攻击与防御思维全景图

攻击阶段 攻击者行为 防御者策略
信息收集 目录扫描、报错探测、源码泄露 关闭错误回显,移除调试信息
输入探测 提交特殊字符、超长数据、编码绕过 白名单验证、类型强制、正则限制
漏洞利用 SQL注入、XSS、文件包含等 参数化查询、输出编码、白名单包含
提权/扩大 上传 Webshell、横向移动 最小权限、应用隔离、WAF
持久化 定时任务、后门文件 文件完整性监控、日志审计

核心三原则:

  1. 永不信任用户输入
  2. 数据与代码分离(参数化、输出编码)
  3. 纵深防御(多层防护叠加,CSP+Token+加密+审计)

更多推荐