初级XSS漏洞复现与修复全流程 🛠️
0x01 靶场搭建:XSS-Labs环境准备
步骤:
-
安装PHPstudy(Win环境一键部署Apache+PHP+MySQL)
- 官网下载安装包,默认安装路径
D:\phpstudy_pro\ - 启动后确保Apache和MySQL亮绿灯 ✅
- 官网下载安装包,默认安装路径
-
部署XSS-Labs靶场
# 从GitHub克隆源码 git clone https://github.com/do0dl3/xss-labs # 解压到phpstudy的WWW目录(如:D:\phpstudy_pro\WWW\xss-labs)
3.**访问靶场 **浏览器输入http://localhost:8080/xss-labs/,点击图片开始闯关!🎮
0x02 漏洞挖掘:Level 1反射型XSS案例
目标: 让页面弹出alert('XSS')
那么我们就现在行动:
1、输入框尝试输入payload:
<script>alert('XSS')</script>
然后弹窗“XSS”
原理:输入 被直接拼接,并没有被过滤,浏览器按照JS执行了代码
2、查看源码验证漏洞点
<h2>您输入的参数是:<?php echo $_GET['name'];?></h2>
发现问题:输出位编码,直接回显用户输入!
现在基于以上漏洞复现,来思考一下怎么修复以上的漏洞(联系一下逆向思维 虽然这些漏洞很low)
修复思路
最开始的时候我之前有尝试过这种方法
$input=str_replace('<script>',",$_GET['name']);
好吧,其实不行,因为会被'<scr《script>ipt>'绕过...
tips:之所以用书引号是因为这个博客园把我的攻击代码给ban掉了,后面的文章直接不显示了(扶额)
还有一个不对的修复方式
$input = preg_replace('/[<> ]/', '', $_GET['name']);
攻击者改用'<img/src=1 onerror=alert(1)>'依然生效!
以下是正确示范
// 使用htmlspecialchars转义特殊字符 $name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8'); echo "<h2>您输入的参数是:{$name}</h2>";
修复后的效果
<h2>您输入的参数是:<script>alert('XSS')</script></h2>
这时浏览器只会显示文本,不会执行脚本!
总结与思考
漏洞本质:信任了用户的输入!
防御哲学:
- 所有输入都是不可信的!
- 既要过滤输入,也要编码输出!
- 防御要像洋葱一样多层(输入校验+输出编码+CSP)
一些常见坑:
- 过度依赖正则过滤(总有漏网之鱼)
- 忘记不同场景需要不同编码方式(HTML/JS/URL)
- 没有测试变异Payload(如<Svg/onload=alert(1)>)
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/18860268,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号