一、初识XSS 1、什么是XSS XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。当用户浏览改页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等。
2、XSS产生原因、漏洞原理 形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
3、XSS会造成那些危害? 攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户。当一个Web程序的用户输入点没有进行校验和编码,将很容易的导致XSS。
1、网络钓鱼,包括获取各类用户账号 2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; 3、劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等 4、强制弹出广告页面、刷流量等 5、网页挂马; 6、进行恶意操作,如任意篡改页面信息、删除文章等 7、进行大量的客户端攻击,如ddos等 8、获取客户端信息,如用户的浏览历史、真实p、开放端口等 9、控制受害者机器向其他网站发起攻击; 10、结合其他漏洞,如csrf,实施进步危害; 11、提升用户权限,包括进一步渗透网站 12、传播跨站脚本蠕虫等
4、XSS的防御 形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理: 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入; 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
5、XSS常见出现的地方 1、数据交互的地方
get、post、cookies、headers
反馈与浏览
富文本编辑器
各类标签插入和自定义
2、数据输出的地方
用户资料
关键词、标签、说明
文件上传
6、XSS的分类 反射性XSS 又称非持久型XSS,这种攻击方式往往具有一次性,只在用户单击时触发。跨站代码一般存在链接中,当受害者请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码通常不存储服务端
常见注入点: 网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。
漏洞产生原因一般是网站只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输岀,导致输岀的欻据中存在可被浏览器执行的代码数据
攻击方式 攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
反射型XSS攻击的流程如下:
1.攻击者寻找具有漏洞的网站 2.攻击者给用户发了一个带有恶意字符串的链接 3.用户点击了该链接 4.服务器返回HTML文档,此时该文档已经包含了那个恶意字符串 5.客户端执行了植入的恶意脚本,XSS攻击就发生
存储型XSS 存储型XSS( Stored xss Attacks),也是持久型XSS,比反射型XSS更具有威胁性。。攻击脚本将被永久的存放在目标服务器的数据库或文件中。这是利用起来最方便的跨站类型,跨站代码存储于服务端(比如数据库中)
常见注入点 论坛、博客、留言板、网站的留言、评论、日志等交互处。
造成漏洞原因一般是由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据信息保存在服务端的数据库或其他文件形式中。
攻击方式 攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了 恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。
存储型ⅩSS攻击的流程如下 1.用户提交了一条包含XSS代码的留言到数据库 2.当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来 3.浏览器发现有XSS代码,就当做正常的HTML和JS解析执行
DOM型XSS DoM是文档对象模型( Document Object Model)的缩写。它是HTML文档的对象表示,同时也是外部内容(例如 JavaScript)与HTML元素之间的接口。解析树的根节点是“ Document"对象。DOM( Document object model),使用DOM能够使程序和脚本能够动态访问和更新文档的内容、结构和样式。
它是基于DoM文档对象的一种漏洞,并且DOM型XSS是基于JS上的,并不需要与服务器进行交互。
其通过修改页面DOM节点数据信息而形成的ⅩSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的 Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
一种基于DOM的跨站,这是客户端脚本本身解析不正确导致的安全问题
注入点 通过js脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所 以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
攻击方式 用户请求一个经过专门设计的URL,它由攻击者提供,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存 在XSS漏洞。
它的流程是这样的: 1.攻击者寻找具有漏洞的网站 2.攻击者给用户发了一个带有恶意字符串的链接 3.用户点击了该链接 4.服务器返回HTML文档,但是该文档此时不包含那个恶意字符串 5.客户端执行了该HTML文档里的脚本,然后把恶意脚本植入了页面 6.客服端执行了植入的恶意脚本,XSS攻击就发生了
反射型XSS与DOM型区别:
1、反射型XSS攻击中,服务器在返回HTML文档的时候,就已经包含了恶意的脚本;
2、DOM型ⅩSS攻击中,服务器在返回HTML文档的时候,是不包含恶意脚本的;恶意脚本是在其执行了非恶意脚本后,被注入到文档里的
通过JS脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
xss靶场详解
一、

源码

查看源码发现
用户通过 name 参数提交的数据($_GET["name"])直接插入到 <h2> 标签中。
如果用户输入的内容包含恶意脚本(如 JavaScript 代码),这些脚本会被浏览器执行,导致 XSS 攻击。
构造url
当name=<script>alert('XSS')</script>

当用户访问该 URL 时,$_GET["name"] 的值为 <script>alert('XSS')</script>

二、

源码

htmlspecialchars($str) 对 $str 进行了转义,防止了在 <h2> 标签中的 XSS 攻击。
然而,$str 在 <input> 标签的 value 属性中直接使用,没有进行转义,导致这里存在 XSS 漏洞。
url:keyword="><script>alert('XSS')</script>

当用户访问该 URL 时,$_GET["keyword"] 的值为 "><script>alert('XSS')</script>。该值直接插入到 <input> 标签的 value 属性中

三、

源码

分析 相比较二,$str都通过htmlspecialchars()进行了转义,将特殊字符(如<, >, ", ', &`)转换为 HTML 实体,例如 < 转换为 <
上下文错误:如果输出上下文不是 HTML 文本或属性值(例如 JavaScript 代码或 URL),htmlspecialchars() 可能无法完全防御 XSS。
字符集问题:如果字符集设置不正确(例如未指定为 UTF-8),某些特殊字符可能无法被正确转义。

四、

源码

$str3 直接插入到 <input> 标签的 value 属性中,且未对双引号 (") 进行转义,导致攻击者可以通过闭合 value 属性注入恶意代码。
当用户访问该 URL 时,$_GET["keyword"] 的值为 " onmouseover="alert(1)。经过过滤后,$str3 的值为 " onmouseover="alert(1)。
当用户将鼠标移动到输入框上时,会触发 onmouseover 事件,执行 alert(1)

五

源码

$str3 直接插入到 <input> 标签的 value 属性中,且未对双引号 (") 进行转义,导致攻击者可以通过闭合 value 属性注入恶意代码。
a"><a href="javascript:alert(1)>aaaaaaa</a>

六、

源码

$str6 直接插入到 <input> 标签的 value 属性中,且未对双引号 (") 进行转义,导致攻击者可以通过闭合 value 属性注入恶意代码。


七

源码

$str6 直接插入到 <input> 标签的 value 属性中,且未对双引号 (") 进行转义,导致攻击者可以通过闭合 value 属性注入恶意代码。
在 <input> 标签的 value 属性中,虽然对 script、on、src、data 和 href 进行了移除,但并未对其他特殊字符(如 ", ', &)进行处理
a"oonnclick="alert(1)

将鼠标再次点击输入框即可完成

八

源码

$str7 直接插入到 <a> 标签的 href 属性中,且未对单引号 (') 进行转义,导致攻击者可以通过闭合 href 属性注入恶意代码
javascript:alert(1)
添加后我们点击友情链接即可完成

九

源码

$str7 直接插入到 <a> 标签的 href 属性中,且未对单引号 (') 进行转义,导致攻击者可以通过闭合 href 属性注入恶意代码
javascript:alert('http://')
然后点击友情链接即可完成

十

源码

$str33 直接插入到 <input> 标签的 value 属性中,且未对双引号 (") 进行转义,导致攻击者可以通过闭合 value 属性注入恶意代码。
keyword=test&t_sort=a"%20οnclick=alert(1)%20type="text
加载后点击输入框即可完成

十一

源码

Referer 字段的值未进行完整的 HTML 实体编码或 JavaScript 编码,可能导致 XSS 漏洞。攻击者可以构造恶意 Referer 头,插入 JavaScript 代码

很少用这个插件,导致点击后无任何变化,找不到原因,所以失败,本来点击后会出现输入框,点击即可成功

3192

被折叠的 条评论
为什么被折叠?



