xss攻击原理(个人理解):在可插入点中插入js脚本语言,插入到web服务器,在对方管理员浏览时会执行所写的脚本语言
xss攻击可以分为三类:
1、反射型:攻击数据不会存储在对方服务器上,只与该网站进行一次交互(在后端语言处理)
2、存储型:攻击数据会存储在对方服务器上,持续对该网站进行攻击(也是在后端语言处理)
3、DOM型:在url上攻击,也可以说是GET上,只与前端交互,不与后端交互
xss攻击危害:
1、窃取cookie
2、未授权访问
攻击方法:
1、找xss插入点
2、黑盒测试,收集过滤信息
3、构造payload来绕过过滤,然后进行攻击
这里结合一下xss靶场讲一下攻击手段,以及原理和绕过方法
首先可以看到url上有?keyword=这些,这里就可以确定这是DOM型攻击,只与前端交互
我们可以尝试用js语言看看可以
payload:
第一关,啥也没有做,直接插入js脚本就行,可能有些人会问窃取cookie怎么弄,这里就是在alert()这修改下就行,或者利用xss平台也可以,xss平台会给payload,不用自己构造,xss平台有很多,在网上搜xss平台就行,看你自己个人用那个xss平台
我用的是这个 xss平台:http://xsscom.com//index.php?do=login
首先还是利用上面payload测试下
通过看回显的页面源码发现,插入的语句插入在input的标签中,没有触发该js脚本,因此我们可以闭合掉input标签来实现该js脚本触发
paylaod:">
接着看下一关
发现我们传进去的参数部分被实体化了,<"> ,但是它的闭合方式跟上一关的不一样,这关事单引号,那我们就试一下单引号闭合看下,要注意的是咋们要绕过实体化,所以我们重新构造一个payload
payload:'οnfοcus=javascript:alert() ’
接着看下一关的绕过方式,还是一样,首先测试一下过滤的啥字符
可以看到<> 被替换成空,所以我们就使用 onfocus 事件看下
我们结合源码来看下这关过滤了啥
发现这关就是将 < > 替换成了空,绕过着俩个 < > 就行
好,接着看下关
通过测试发现,on 和 script被过滤了,再接着测试下大小写过滤了没
发现也被过滤,因此这里要利用其他标签来绕过这个过滤,标签有很多,看自己想用那个就用那个,但是要注意的是这里是input标签要先闭合input标签,然后在插入其他标签
payload:“>test<”
这里要点test才可以进行跳转
接着下一关,我就不一个一个测试了,直接审计源码
这里可以看到
接着看下一关源码
这里也是替换,但是它是把这些替换成空,因此我们可以利用双写来绕过
payload:“>alert(1)<”
接着下一关,这关跟前面有点不一样
这里就是多了一个双引号过滤,而且这里还是插入到a标签的超链接中,因此我们这就要利用a标签的隐藏属性,a标签自动Unicode解码,因此我们利用unicode编码来绕过
paylaod:javascript:alert(1) 然后就是unicode进行编码
javascript:alert(1)
接着下一关,还是审计代码
过滤手段一样,但是这里有一点的是,这里多了一个判断,判断写入的url有没有https:// ,没有的话直接出错,有的话才能插入,所以这里要利用html的一个特性,就是注释的代码也会被执行,所以我们吧http://注释掉来绕过
payload:javascritp:alert()/http:/// 还是进行编码
javascript:alert(1)/http:///
接着下一关
看这关的源码发现多出来很多隐藏标签,这点很重要
通过给的来传参数发现不可行,这里就要用到隐藏的参数了
然后分析一波源码
发现原理有俩个传参数的值,但是插入到语句的是t_sort这个传参的值,因此这里要用到t_sort来传参
payload:?t_sort=" οnfοcus=javascript:alert() type="text
这里写type=text是为了让隐藏了的input的标签显示出来
后面的几关也是先看页面源码
这关也是隐藏的标签应该跟上一关差不多,但是你看这个源码,t_ref这个标签,ref有点像referer的HTTP请求头,为什么这样猜呢,因为你看它后面接了http://127.0.0.1这个请求,想着跟请求的,基本上都是HTTP请求里面的请求头
过滤信息还是分析源码
就过滤了<> ,因此我们利用onfocus事件来触发
payload:" οnfοcus=javascript:alert() tyep="text
继续看下一关的绕过
这关很明显是跟上关一样,就是改了一下它插入的地方,这里显示是 t_ua 明显就是user-agent 这个HTTP请求头
,过滤这些也是直接看源码分析
跟上面的的过滤手法一样,就不用我多说了吧
这里就是换成了user-agent
看下一关
这里看到t_cook,cook有点像cookie,先盲猜一下,接着审计一下源码
果然真是cookie,我们直接利用开发者工具来修改cookie,然后刷新一下就可以了
下一关由于跳转到网站已经挂了,所以这关没必要做,直接下一关
先看页面源码
看到了一个ng-include,这个ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
那我们包涵第一关来看看能成功吗
paylaod:?src=‘level1.php’
接着就用利用第一关的传参点来来进行xss攻击
这里也可以包含其他关,但是第一关简单,我们就从简单入手,太难了现在也弄不明白
来看下一关
可以看到插入的信息插入在center标签中
过滤信息还是审计源码
发现过滤script、空格、/、空格绕过方法有 %0a、%09 (tab) 、 ${IFS} 、 $IFS%09 等很多种方法
payload:
下面的关都是利用flash,这里很多浏览器不支持,所以我就不测试了