XSS跨站脚本攻击
XSS漏洞简介
XSS全程(跨站脚本攻击),其原理是攻击者利用浏览器执行前端代码(html,css,js)的特性将恶意js代码插入到web页面中,当用户浏览到该页面时这些嵌入在web页面的代码就会被执行从而达到攻击者的目的
漏洞产生原理
形成xss漏洞主要原因时:因为web应用程序对用户输入的内容和程序输出的内容,没有经过严格的校验和过滤,导致攻击者构造恶意代码带入后,又被程序当作正常的代码输出至前端页面,浏览器当作有效代码解析执行从而产生危害
#漏洞概念
目标未对用户从前端功能点输入的数据与输出的内容未进行处理或者处理不当,从而导致恶意的JS代码被执行造成窃取 用户信息/劫持WEB行为危害的WEB漏洞!
前端功能点:留言/搜索框/转发/...(输入/x)
SQL注入目标: --->获取目标网站的数据库铭感信息或其网站的控制权限
XSS攻击目标:--->浏览存在XSS漏洞网站的用户的浏览器的信息(cookie等)/钓鱼攻击
漏洞危害
#产生危害
网站挂马(webshell) ---->攻击性网马(google)
非法转账(cookie窃取)
强制发送电子邮件
控制受害者像其他网站发起攻击
盗窃企业重要的具有商业价值的资料
控制企业数据,包裹读取,篡改.添加.删除企业敏感数据的能力
盗取各类用户账号,入机器登陆账号,用户网银账号,各类管理员账户
#危害类型
窃取用户浏览器中的信息
劫持用户浏览器做非法的操作
钓鱼
#注意
漏洞在web服务端产生,攻击的主要对象时客户端浏览器
漏洞分类
xss漏洞可以分为三种类型:反射型,存储型,DOM型xss
反射型xss
漏洞介绍
定义:反射型xss又称非持久性xss,反射型xss的恶意代码在web应用的参数,需要诱骗受害则点击范围跟含有恶意代码的连接,从而触发xss攻击
特点:反射型xss攻击方式是一次性的
攻击方式:需要欺骗用户自己去点击含xss的连接,才能触发xss攻击
攻击者通过发送右键或诱导等方式,将含有恶意xss代码的连接发送给目标用户,当目标用户访问该连接时,服务去接受用户的请求并进行处理,任何服务器把带有xss恶意脚本的代码发送给目标用户浏览器,浏览器解析恶意代码,触发xss攻击
攻击过程:
反射型xss,属于交互触发的漏洞,需要用户主动点击才能触发,所以需要攻击者主动将包含恶意代码的url发送给用户
#流程解析
1. 攻击者将Payload放置在URL连接中(针对的是GET型反射XSS)
2. 通过社会工程学使用户点击改恶意链接
3. Web服务器将XSS代码(JavaScript代码)视图返回给客户端
4. 客户端解析视图以及XSS代码(JavaScript代码),并执行结果发送到XSS平台
5.攻击者访问xss平台,读取窃取到的用户敏感信息(cookid)
存储型xss
漏洞介绍
存储型xss又称永久性跨站脚本,持久性体现在xss代码不在某个参数中,而是写进数据库或文件中存储型xss通常发生在留言板,发布文章的地方.如果插入数据时没有经过严格过滤,那么恶意代码被存储到数据库中,当用户访问该页面\文章\留言内容时触发代码加载执行
特点:攻击者脚本将被永久性的存放在目标服务器的数据库或文件中,具有很高的隐藏性
漏洞产生原因: 由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据 信息保存在服务端的数据库或其他文件形式中。
攻击方式: 这种攻击常见于论坛、博客、留言板等,攻击者在写入内容时连同恶意代码一同写入到文件或数据库 中,恶意脚本被永久性得存放在服务器得后端存储器中,当其他用户浏览到这个页面时,恶意脚本会在用 户浏览器中加载执行造成XSS攻击。
攻击过程
# 攻击过程:
1. 攻击者向Web界面插入恶意的XSS攻击代码
2. Web服务器会将其结果保存到数据库中
3. 用户正常访问Web页面
4. Web页面将数据库的数据以及视图返回给前端,前端渲染并加载恶意的数据
5. 客户端渲染视图,加载XSS代码并向攻击者的Web服务器发送敏感信息
6. 攻击者读取用户的敏感信息
DOM型xss
DOM:动态访问更新文档内容、结构和样式。 BOM:控制浏览器的
DOM介绍
DOM全称Doucment Object Model(文档对象模型),使用DOM可以使程序和脚本能够 动态访问更新文档内容、 结构和样式。 HTML的标签都是节点,而这些节点组成了DOM的整体结构 --> DOM树 。HTML DOM树中的所有节 点均可以通过JavaScript进行访问。所有HTML元素均可被修改、创建、删除、查找。
漏洞介绍
DOM型XSS与其他两种XSS在原理上有本质的区别,它的攻击代码并不需要服务器解析响应,触发XSS靠的 是浏览器端的 DOM解析 ,当JS脚本从URL或页面中获得数据并将其传递到支持动态代码执行的接收器时,就会产生基于DOM的XSS漏洞。
漏洞原因: 基于DoM文档对象的一种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进行交互。
# 具体攻击流程
1. 攻击者将Payload放置咋URL链接中(针对GET型反射XSS)
2. 用户点击恶意链接,并打开浏览器
3. 此时浏览器客户端并不会发起HTTP请求到WEB服务器,而是在浏览器客户端执行XSS代码
4. 此时将XSS代码执行结果发送给攻击者的恶意服务器
5. 攻击者访问自己的XSS平台并读取用户的敏感信息
攻击方式: 用户请求一个经过专门设计的URL,而且其中包含XSS代码。当用户请求URL时,服务端不会返回任何 恶意代码。当浏览器DOM处理这个响应时, 浏览器的DOM对象就会获取XSS代码,并将其输出到页面中导致XSS 攻击。
XSS攻击类型区别
xss类型 | 存储型 | 反射型 | DOM型 |
触发过程 | 1.黑客构造xss脚本 2.正常用户访问携带xss脚本的页面 | 正常用户访问携带xss脚本的url | 正常用户访问携带xss脚本的鹅url |
数据存储 | 数据库 | url/post参数中 | url |
谁来输出 | 后端web应用程序 | 后端web应用程序 | 前端js |
输出位置 | http响应中 | http响应中 | 动态构造的dom节点 |
xss测试语句
在网站是否存在 xss 漏洞时,应该输入一些标签如<、>输入后查看网页源代码是否过滤标签,如果没过滤,很大可能存在 xss 漏洞;
常用的xss语句
<script>alert(1)<script>
<script>console.log(1)<script>
<img src=x οnerrοr=alert(1)>
<svg οnlοad=alert(1)>
<svg/οnlοad=setTimeout('\x61\x6C\x65\x72\x74\x28\x31\x29')>
XSS绕过与挖掘
在程序里如果使用 html 实体过滤,在 php 会使用 htmlspecialchars()对输入的字符进行实体化,实体化之后的 字符不会在 html 执行。把预定义的字符 "<" (小于) 和 ">" (大于)转换为 HTML 实体,构造 xss 恶意代码大 多数都必须使用<或 者>,这两个字符被实体化后在 html 里就不能执行了;
# 预定义字符
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
>(大于)成为 >
但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签: javascript:alert(1) onclcik
<input type="text" name="username" value="" οnclick=" javascript:alert('xss');"/>
$lt;script>alert("xss")</script>
xss绕过方法
1.过滤alert
# 当页面过滤 alert 这个函数时,因为这个函数会弹窗,不仅很多程序会对他进行 过滤,而且很多 waf 都会对 其进行拦截。所以不存在 alert 即可;
<script>prompt(/xss/);<script>
<script>confirm(1);<script>
<script>console.log(1);<script>
<script src=