pikachu)
概述全称Cross-Site Scripting简称“CSS”取名XSS为了与CSS层叠样式表区分本质攻击者将恶意脚本注入到正常网页中当用户访问该页面时脚本在受害者浏览器内执行注意web漏洞前端攻击目标是访问网站的用户不是网站服务器本身原理网站没有对用户输入的内容做足够过滤/转义直接把用户可控数据输入到HTML页面里受害者打开页面浏览器分不清这段内容是正常代码还是恶意脚本就会执行恶意JS输入过滤对输入进行过滤不允许可能导致XSS攻击的字符输入输出转义根据输出点的位置对输出到前端的内容进行适当转义常见危害1.盗取用户Cookie、Session劫持账号、页面操作 2.窃取页面敏感信息手机号、卡号、密码) 3.伪造页面弹窗欺骗用户输入账号密码钓鱼 4.诱导跳转至恶意网站 5.配合其他漏洞进一步内网渗透目的攻击者输入内容被浏览器弹出弹窗证明此处可以执行JS存在XSS漏洞反射型XSSget定义非持久型恶意代码放在GET请求的URL参数中原理攻击者构造恶意URL把payload放在GET参数里把这个链接发给受害者通过聊天、邮件、钓鱼等服务器代码直接取出GET参数请求q参数携带恶意脚本传给服务器服务器不经转义拼到HTML页面中返回受害者浏览器收到页面解析标签执行恶意JS步骤1.F12打开查看器定位到发现最大长度只有20修改为100input classxssr_in typetext maxlength20 namemessage2.常用测试语句scriptalert(123)/script3.输入语句到输入框出现弹窗知识一.URL→统一资源定位符结构【协议//域名端口/路径查询参数#片段】二.?qxxx→GET查询参数;多个参数值用隔开可以直接写在URL出现在浏览器地址可复制转发三.HTML脚本script开始/结束/标签目的告诉浏览器里面的内容是JavaScript代码需要执行四.alert‘123’JS内置函数作用是浏览器弹出弹窗显示内容123显示内容可随意无危害只证明反射型XSSpost定义非持久型恶意payload放在POST请求的表单参数里提交表单后服务器读取直接反射输出到页面恶意代码不会存入数据库原理恶意代码不会出现在浏览器地址不能直接把带payload的链接发给别人两者比较本质一样服务器直接回显用户输入只是传参方式不同步骤1.输入暴力破解的账号密码admin/123456Login2.输入常用测试语句出现弹窗查看POST参数放在HTTP请求体body一.浏览器打开网页按 F12右键→检查调出开发者工具切换到 Network网络面板勾选 Preserve log保留日志防止页面跳转后请求消失在页面提交表单输入 payload点提交在网络列表找到Method 为 POST的那一条请求点击它切换到 Payload载荷 标签普通表单application/x-www-form-urlencodedForm Data表单数据二.抓包工具Burp Suite抓包代理浏览器流量经过 Burp可以直接查看 / 修改 POST 请求体改 payload 测试 POST XSS存储型XSS定义也叫持久型XSS攻击者提交恶意payload恶意脚本被保存到服务器的数据库/文件中。当其他用户访问该页面时服务器从数据库读取恶意内容输出网页浏览器执行JS触发XSS与反射型XSS比较在服务端保存不是一次性的所有访问页面的用户都会中招不需要钓鱼链接场景留言板、评论区、发帖论坛、个人签名、博客评论步骤1.输入常用测试语句scriptalert(123)/script2.出现弹窗辅助判断查看页面源代码F12源码可以找到scriptalert(123)/script存入数据库DOM型XSS定义基于文档对象模型的XSS整个过程恶意代码不会传给服务器服务器返回正常页面。漏洞发生在浏览器前端由JavaScript操作DOM时把可控数据插入页面导致JS执行步骤1.随便输入一串字符串456在F12页面源代码可以发现,超链接标识a href456 what do you see? /a2.点开超链接发现页面跳转4043.直接在页面源代码进行注入超链接标签改动构造onclick点击时触发让XSS弹窗在点击超链接后面input idtext nametext typetext value 空白 input idbutton typebutton valueclick me! οnclickdomxss()4.上面代码是提示输入框输入 οnclickalert(123)5.出现 what do you see? ,点击超链接出现弹窗知识在XSS攻击事件处理器常用于触发恶意JS代码①onclick点击时触发②onerror加载失败时触发③onmouseover鼠标悬停时触发DOM型XSS-X定义DOM型XSS-X属于DOM型XSS的变种其核心是把URL参数直接拼到a href用户可控数据里面步骤1.输入框输入 οnclickalert(123)2.点击文字出现弹窗两者对比项目普通 DOM XSSDOM 型 XSS-X数据来源location.hash#不发给服务器location.search?GET 参数发给服务器注入位置页面文本内容a 标签 href 属性内触发方式页面加载完成自动执行需要用户点击生成的链接Payloadscriptalert(1)/scriptjavascript:alert(1)伪协议XSS盲打定义属于特殊场景的存储型XSS其特点是注入点和触发页面分开前端提交完看不到弹窗攻击者不知道payload有没有生效等管理员去后台查看数据触发步骤1.留言板输入恶意payload大名随意scriptalert(123)/script2.只提示谢谢参与没有弹窗3.最右边的提示信息中有后台地址进入有新提示信息登录账号和密码admin/1234564.登录成功出现弹窗知识盲打用alert只能管理员自己看到弹窗攻击者拿不到信息实战多用脚本把管理员Cookie发送到攻击者服务器管理员一打开后台页面Cookie自动发送到攻击者接收平台XSS过滤定义输入层防御服务器在接收用户提交的数据时对输入内容进行检查、删除、替换等试图阻止恶意payload提交到服务器之前的scriptalert(123)/script被过滤掉没有用了可用示例(还有其他)1.大小写绕过sCrIPTalert(123)/ScRiPt2..事件绕过过滤 script 标签用img srcx onerroralert(123)都分别出现弹窗知识输入过滤不能作为防御XSS的唯一手段很容易被绕过攻击者可以构造变形payload绕过正则过滤正则过滤正则表达式Regular ExpressionXSS 过滤 和 输出转义 的区别输入过滤在接收用户输入的时候做清洗危险内容容易被绕过是辅助防御输出转义HTML 实体编码在数据输出到 HTML 页面时做把 转成实体让浏览器把内容当成纯文本从根源阻止浏览器解析标签是最可靠的主防御方案XSS之htmlspecialchars定义htmlspecialchars是PHP的函数输出转义函数作用把HTML特殊字符转换成HTML实体编码让浏览器只当成纯文本显示不会解析成HTML标签转换规则→amp// →lt// →gt// →quot// →#039原始payloadscriptalert(123)/script转义后lt;scriptgt;alert(1)lt;/scriptgt;输入οnclickalert(123)即可出现弹窗利用单引号闭合原有的属性注入新事件XSS之href输入定义可控输入写入a标签href属性通过JavaScrit伪协议执行JS专门在链接属性中使用输入Javascript:alert(123)或者Javascript:alert( 123 )点击后出现弹窗知识alert函数只会弹出对话框只显示字符串内容不显示引号如需应在外加一层XSS之js输入定义用户可控数据放到script/script标签内部解释→闭合前面字符串//→注释掉后面剩余引号步骤1.根据提示输入tmac2.右键查看页面源代码在923行之后可以看到有输入变化利用此进行标签闭合3.输入;javascript:alert(123)//出现弹窗部分内容由AI辅助生成个人观点仅供参考