从HTML注入到CSRF:一次漏洞组合拳实战
嗯,用户让我总结一下这篇文章的内容,控制在一百个字以内,而且不需要特定的开头。首先,我需要快速浏览文章,抓住主要点。 文章讲的是在某个社区平台的评论功能中发现了一个存储型HTML注入漏洞。虽然前端有输入过滤和WAF防护,但攻击者通过逆向加密逻辑并构造特殊payload绕过了这些防护。然后结合GET方式的登出接口,实现了CSRF攻击。 关键点包括:WAF规则的缺陷、换行符绕过、逆向加密逻辑、敏感操作使用GET方式的风险。最终导致用户点击恶意链接后被登出,造成数据丢失。 总结的时候要简洁明了,涵盖漏洞类型、绕过方法、攻击结果和关键建议。确保在100字以内表达清楚。 </think> 文章描述了一次针对某社区平台评论功能的HTML注入与CSRF登出漏洞复现过程。攻击者通过逆向前端加密逻辑、构造特殊payload绕过WAF防护,并利用平台存在的GET方式登出接口实现CSRF攻击。最终通过换行符绕过前端过滤,成功注入恶意链接导致用户被强制登出。 2026-1-6 06:43:5 Author: www.freebuf.com(查看原文) 阅读量:9 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

前言

免责声明:本文仅供安全学习研究,所有测试均在授权环境或自建靶场中进行。严禁用于非法用途,否则后果自负。

HTML注入 + CSRF登出漏洞实战复现

漏洞概述

在某社区平台的评论功能中发现存储型HTML注入漏洞。虽然前端做了输入过滤,且存在WAF防护,但通过逆向前端加密逻辑并构造特殊payload,成功绕过所有防护,注入恶意<a>标签。结合平台存在的GET方式登出接口,实现了点击即登出的CSRF攻击。

先在前端进行注入,发现有waf。

695478f2027e3931947f53d2.png

WAF规则存在以下缺陷:

  1. 标签名和<之间有空格可绕过

  2. 属性名大小写敏感

  3. 只检测小写href

构造绕过payload:

<!-- 原始payload -->
<a href="http://***.com">点击</a>
<!-- 绕过payload -->
< a HREF="http://***.com">点击</a >

695478f2027e3931947f53d3.png

695478f2027e3931947f53d4.png

但经过浏览器解析,< a不会被识别为标签。此时已经不想手动继续尝试了,准备写脚本看看到底哪些操作能绕过waf。

通过逐步测试,发现WAF检测规则:

001.jpg

写脚本过程:

695478f3027e3931947f53d5.png

对发表评论进行抓包,当我想模拟请求的时候发现请求体被加密了,这个时候就需要拿出我的逆向功底了

695478f3027e3931947f53d6.png

全局搜索sign,打断点发包。

695478f3027e3931947f53d7.png

【----帮助网安学习,以下所有学习资料加v~x:YJ-2021-1,备注“freebuf”获取!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

关键加密点:

const encrypted = encryptData(content);
const sign = generateSign(encrypted, timestamp);

content就是我们的评论内容,encrypted就是对我们的评论进行了加密,而sign签名则是将加密后的评论内容加上时间戳进行了二次加密。

695478f3027e3931947f53d8.png

进入encryptData函数,清晰明了的看到是AES加密,直接套库复现就行。

695478f4027e3931947f53d9.png

而签名函数则是md5加盐。

695478f4027e3931947f53da.png

拿加密之后的值去模拟发包,发现error报错了

695478f4027e3931947f53db.png

原来是没登录

695478f4027e3931947f53dc.png

携带登录的参数去测试发现换行符可以绕过WAF且浏览器正常解析! 最终绕过payload

695478f6027e3931947f53dd.png

# 使用换行符绕过(注意:前端输入框无法输入换行符,必须通过脚本发包)
payload = '<a\nHREF="/api/logout">点击领取优惠</a>'

脚本发送成功且没有被waf拦截,评论发布后刷新页面,恶意标签被浏览器解析渲染,显示为可点击的超链接,HTML注入成功!

695478f6027e3931947f53e1.png

点击之后直接重定向到了登出链接

695478f8027e3931947f53e6.png

695478f8027e3931947f53e7.png

往回跳一页,一刷新,这个时候就已经登出了,假如用户A正在写文章,同时浏览其他帖子时误点了恶意链接,触发登出。等他切回写作页面点击发布时,才发现session已失效,未保存的内容全部丢失。

695478f8027e3931947f53e8.png

用户点击后直接登出,实现CSRF攻击。虽然危害不算特别大,但足以证明漏洞的存在。

关键点

前端输入框里按回车是提交表单,没法输入真正的换行符 \n。所以必须:

  1. 先逆向前端加密逻辑

  2. 用Python脚本构造包含换行符的payload

  3. 自己加密、签名后直接发包

这就是为什么前端过滤 + WAF 都挡不住——攻击者根本不走前端,直接构造请求绕过所有客户端校验。最重要的就是敏感操作(登出、删除、修改)不应使用GET方式,否则容易被CSRF利用。

当时首次提交的时候,是重定向挂马攻击被打回了,第二次结合了敏感操作也是收录了中危一枚。

总结

单个漏洞可能危害有限,但组合起来可能产生更大影响:

  • HTML注入(低危)+ GET登出(低危)= CSRF攻击(中危)

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/vuls/465136.html
如有侵权请联系:admin#unsafe.sh