天天看点

xss攻击突破转义_跨站脚本攻击XSS笔记

xss攻击突破转义_跨站脚本攻击XSS笔记

简介

XSS:Cross Site Scripting

Cross Site(跨站):对于跨站的理解是,XSS攻击是发生在目标主机的浏览器上的

Scripting(脚本):XSS攻击重点在于“脚本”,在目标服务器执行恶意的Script脚本从而达到攻击目的。

为什么会出现XSS?

浏览器怎样解析页面?

浏览器页面的内容可由html、css、Javascript三者相互配合形成,其中html贯穿整个页面,负责内容展示,css作为样式表展现各部分的形式,而Javasript脚本语言可以定义在html的<head>标签和<body>标签中,用于控制页面中的元素。譬如:

<?php
​
echo $_GET['q'];
?>
           

也就是说在某些用户输入的位置,用户通过输入向网站注入了JS代码,而网站没有进行检查,就直接显示在网页上,这就导致了JS代码的运行。

对于这个网页,设计url赋值q为<script>alert(1);</script>,将q的值插入到html中,浏览器解析时遇到<script>会将该部分作为Javascript代码运行,此时就注入了JS代码。

分类

zoobar网页模拟一个具有社交及交易功能的网站,没有制定防御措施。用户可在home页面自定义profile,相当于自己的个人简介,每个用户初始化时具有10个zoobar,相当于该网页的钱,而用户可以通过transfer页面向其他用户发送zoobar来进行交易,也可以在users页面查询其他用户的zoobar和profile。本文利用这个网站进行XSS攻击及防御的演示。

反射型XSS

反射型XSS是简单的将用户输入的数据“反射”给浏览器。用户点击一个恶意链接时才会受到攻击。

实验平台没有反射型XSS的测试点,我们模拟一下,实际上这个还是存储型XSS。

用户名xss设置自己的profile为<script>alert(1)</script>,可以造成反射型XSS。

xss攻击突破转义_跨站脚本攻击XSS笔记

进入user界面查询自己账号时就会弹出窗口。

xss攻击突破转义_跨站脚本攻击XSS笔记

这就是反射型XSS的效果。测试网页是否存在XSS漏洞时通常用alert(1)来进行测试,如果修改alert的参数为document.cookie,就可以弹出cookie。

xss攻击突破转义_跨站脚本攻击XSS笔记
xss攻击突破转义_跨站脚本攻击XSS笔记

存储型XSS

存储型XSS是存储在服务器中的,比如在发表个人信息、发表评论等等地方插入代码,代码存储到服务器内,那么当有用户访问该页面的时候就会执行。

设定攻击者的profile如下:

xss攻击突破转义_跨站脚本攻击XSS笔记

该代码插入一张img图片,链接到一个特定的攻击者的地址,显然这个地址对应的并不是一张图片,但是img标签会对该地址发出请求,此时浏览器就会将cookie置于请求中发送给攻击者。

攻击者的php代码为:

xss攻击突破转义_跨站脚本攻击XSS笔记

这个代码将收到的cookie结合时间、ip地址等信息保存在本地的txt文本中。

获取到的txt文本为:

xss攻击突破转义_跨站脚本攻击XSS笔记

XSS Worm

存储型XSS可以用于造成蠕虫,实现更大规模的攻击与感染。

示例代码:

xss攻击突破转义_跨站脚本攻击XSS笔记

这个代码的效果是,当别的用户查询攻击者的账户信息时,会自动向攻击者发送1个zoobar,并且将自己的profile也改成同样的形式,这样,当其他人再访问受害者的页面时也会造成攻击,达到感染的效果。

DOM Based XSS

待补充。

防御

对于XSS的防御,基本的思路就是“输入过滤,输出转义”:

输入过滤:设定白名单/黑名单,将可能造成攻击的标签过滤;

输出转义:将<、>等转变为普通字符。

对于针对cookies的攻击,可以设定httponly,防止javascript访问cookie。