同源策略
百度:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源的意思是指域名,协议,端口相同。不同源的客户端脚本(JavaScript,actionscript)再没明确授权的情况下,不能读写对方的资源。
如果两个页面的协议,端口和域名都相同,则两个页面具有相同的源。
以百度为例:https://www.baidu.com
URL | 是否同源 | 原因 |
---|---|---|
https://www.baidu.com/s?wd=1 | 是 | 协议,端口,域名都相同 |
http://www.baidu.com/s?wd=1 | 否 | 协议不同 |
https://www.sougou.com/s?wd=1 | 否 | 域名不同 |
https://www.baidu.com:8080/s?wd=1 | 否 | 端口不同 |
利用XSS漏洞,我们可以通过在目标网站上执行我们自己的脚本(JavaScript脚本),从而突破同源策略的限制。
XSS
XSS攻击是在网页中嵌入恶意的脚本代码,这些代码一般是用javascript语言编写。
我们可以利用XSS攻击盗取用户的账号密码、Cookie,改变网页内容,URL跳转,水坑攻击等。
XSS类型
XSS大致分为三种类型:反射型,存储型,DOM型。
我直接通过打靶场(DVWA)的方式来给大家一个直观的讲解
反射型XSS
打开DVWA,在DVWA Security中将难度调整为low,然后点击反射型xss,可以看到这样的一个页面。
可以看到这里有一个输入框,我们用F12来看下它的输入框的标签属性,找到它是用name变量来接收我们输入的值,然后再往上看,可以看到是用GET传值来传输变量。
当我们在语句中输入xss语句时,看效果会如何,在输入框中输入弹窗语句:<script>alert(1)</script>
,这句话的作用是弹窗显示数字1,如下图:
再让我们更加深入去了解反射型xss,我们查看网络,找到该页面的文件,查看响应,查找我们输入的xss语句,发现是xss语句是存在相应包的。且可以看到我们输入的语句,<script>
被浏览器认成标签进行渲染。所以才导致xss语句被执行。
接下来我们随意点击一个页面,然后返回到反射型xss页面中,可以发现并没有弹窗。
那么我们这里可以总结以下特点:
1,反射型xss大多数用GET传值,传值是经过后端的(因为响应包里存在js语句)。
2,反射型xss的代码是只有一次性的,而并不是持久性的(从随意点击一个页面返回并没有弹窗可看出)。
3,反射型xss漏洞一般着重于在可以传值的地方中(类似于输入框)查找,说不定就存在xss漏洞了。
那么怎么利用反射型xss攻击呢,首先是我们找到该页面存在反射型xss漏洞,然后构造好恶意的xss语句,将该链接转发给正常的用户,以某种方式让用户点击链接,则攻击成功。
存储型XSS
访问存储型XSS页面,可以看到是一个留言板的页面。
我们看下是利用什么传值。
通过定位的操作可以看到是POST传值,POST传值相对于GET传值有几个好处:
1,比GET传值更加安全。
2,GET传值有限制值的大小,而POST没有。
3,GET传值输入的值是在URL中,而POST传值是在消息体中。
接下来写入xss弹窗语句<script>alert(1)</script>
。
点击sign Guestbook,发现弹窗。
可以看到留言板中有我们输入的留言,但是内容是空的我们查看响应包,发现存在我们输入的xss语句,为什么我们的留言是空的呢?因为浏览器将其作为标签并将标签内的内容执行了,也就是我们看到的弹窗。
那么我们点击其他页面再返回存储型XSS,发现这次是会弹窗的。
这里总结下存储型的特点:
1,存储型XSS一般存在留言板,帖子,个人信息这类页面中,这些页面很有可能存在存储型xss漏洞。
2,存储型xss恶意语句会经过后端再保存到数据库中(我们的xss语句之所以可以永久存储,是因为我们的代码存放在了数据库中,正常用户访问这个页面,后端会将我们的xss恶意语句发送给用户,使用户遭受到xss攻击)。
3,相对于其他xss类型,存储型xss的隐秘性更高,因为其他都需要点击攻击者构造好的链接,而存储型不需要。
利用存储型xss攻击其实很简单,只需要找到页面的留言板,帖子,个人信息等这种将值存放在数据库中的页面,监测如果存在xss漏洞,则插入xss漏洞,坐等用户去访问这个页面或者诱骗用户访问该页面即可。
DOM型XSS
打开DOM型xss页面,点击select。
可以看到url中有一个default的传值,值为English。
我们将值修改成xss弹窗语句<script>alert(1)</script>
输入完后回车,触发弹窗。
查看响应包,查找xss语句,发现并没有找到。
说明DOM型XSS漏洞并不会将xss语句传入到后端中。
通过F12定位代码,可以看到default值在前端中定义的,我们输入的值会在<script>标签中的代码过一遍后输出。在<script>标签中将我们输入的xss语句直接输出到浏览器中,浏览器将其作为标签渲染后,执行我们的xss语句。
点击其他页面,再返回DOM型XSS漏洞页面,发现并不会弹窗。
总结下DOM型XSS的特点:
1,输入的值并不经过后端,而是在前端中执行。
2,用URL传值,构造方法和反射型相同。
3,xss语句为一次性,跟反射型相同。
攻击方法也与反射型相同。唯一的区别是反射型的payload是经过后端的,而DOM型则是在前端的。
三者的区别
XSS类型 | 反射型 | 存储型 | DOM型 |
---|---|---|---|
触发原理 | 用户访问带有XSS语句的URL | 用户访问携带有xss语句的页面 | 用户访问带有XSS语句的URL |
数据存储 | 存放在URL中 | 存放在数据库中 | 存放在URL中 |
经过位置 | 后端 | 后端,数据库 | 前端 |
输出位置 | HTTP响应 | HTTP响应 | DOM节点 |
以上是xss的基础内容,如果有表哥需要补充或修正的,请私信我哈~