🌀 鱼油のB10g

✦ 不定期更新技术随想

✦ 分享奇妙发现

📌 近期动态:

探索AI和工具使用...

初级XSS漏洞复现与修复全流程 🛠️

0x01 靶场搭建:XSS-Labs环境准备

步骤:

  1. 安装PHPstudy(Win环境一键部署Apache+PHP+MySQL)

    • 官网下载安装包,默认安装路径D:\phpstudy_pro\
    • 启动后确保Apache和MySQL亮绿灯 ✅
  2. 部署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>您输入的参数是:&lt;script&gt;alert(&#039;XSS&#039;)&lt;/script&gt;</h2>
这时浏览器只会显示文本,不会执行脚本!

总结与思考

漏洞本质:信任了用户的输入!
防御哲学:

  • 所有输入都是不可信的!
  • 既要过滤输入,也要编码输出!
  • 防御要像洋葱一样多层(输入校验+输出编码+CSP)

一些常见坑:

  • 过度依赖正则过滤(总有漏网之鱼)
  • 忘记不同场景需要不同编码方式(HTML/JS/URL)
  • 没有测试变异Payload(如<Svg/onload=alert(1)>)
posted on 2025-05-05 17:32  鱼油YOU  阅读(140)  评论(0)    收藏  举报