什么是xss
xss是指网页中嵌入客户端脚本,对客户端进行攻击,受害者为这个站点的使用用户。
如果站点由后端管理员登录,那么数据就会泄露,从而造成危害。
xss出现漏洞的原因
最常见的攻击代码就是javascript语言,当然也有其他的语言。
只要是浏览器能够解析的就可以。
漏洞出现的原因是对输入和输出的控制不太严格,没有经过一些过滤,导致精心构造的脚本代码在输入以后,在输出到浏览器前端中被解析从而造成危害。
xss的分类
1——存储型
xss我们一般在输入的窗口中输入js代码,如果在发送到服务端后,又会发送到数据库中,那么这种就叫做存储型xss,这种是持久性的。
2——反射型
反射型就是发送给服务端后,就会直接返回给客户端,不会储存在数据库当中,这种是一次性的,一旦刷新之后之前提交的数据就看不到了。
在xss中,弹出对话框,即意味着成功通关。
3——DOM型
DOM为一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档内容,结构和样式。当创建好一个页面并加载到浏览器以后,DOM就产生了,它会把网页文档转化为一个文档对象,主要功能是处理网页内容。
一般不与后台服务器产生数据交互,但是也存在存储型。
domxss就是通过js代码操作dom型文档对象模型时出发的漏洞。
xss可能出现的地方
html位置,属性位置,URL位置,style位置,script位置。
xss测试方法
1工具扫描
2手工测试
xss的几个攻击示例
以下在pikachu中xss完成
1——(cookie获取)
攻击者利用XSS在网站中插入恶意脚本,一旦用户访问该网页,cookie就会自动地发送到攻击者的服务器中去。
攻击者服务器搭建一个php页面,用于接受被害者远端传过来的cookie
2——反射型xss(post)获取cookie
如果是get请求我们可以伪造一个链接。
如果是post请求(xss)我们可以伪造一个html页面。(我们先伪造一个网址,其中写好我们的攻击逻辑,然后想办法让别人打开,要想办法让自动触发)
3——钓鱼
前提是页面渲染足够的逼真
我们还是往网站中插入一段js代码,然后用户在点击的时候,就会被我们所写的js代码攻击,然后就会将用户的一些信息发送到攻击者的电脑上。
4——获取键盘记录
我们在网站中输入一段js代码,然后受害者在打开这个网站以后,输入的内容就会发送到黑客的电脑上面,从而获取数据。
level-1
在网站中我们点击F12查看源代码,发现网站上方的url中的test就是我们h2标签中的test
于是我们就进行修改,将url中的test进行修改,构造语句,就会弹出下面的对话框
name=<script>alert(1)</script>
level-2(闭合)
我们还是尝试输入一下第一关的代码,发现无响应
我们查看一下源代码吗,发现我们输入的内容被html实体化了
HTML实体编码,格式 以&符号开头,以;分号结尾
我们查看一下前端的代码,发现我们输入的值在value里面
于是我们在这里进行大胆的猜测, 联想到之前pikachu靶场中的xss,我们可以在这里尝试一下闭合语句,先把前面的input闭合,在搜索框中输入下列内容。
"><script>alert(1)</script>
htmlspecialchars()函数特殊字符转换为HTML实体,即:“ < ”,“ > ”,“ ” ”字符均会被过滤
但在input标签中,value未存在过滤措施,故可以利用此处进行测试
成功弹出弹窗
level-3(闭合+触发)
我们继续尝试前面两关的script代码,发现没有弹窗
查看后端代码,我们发现input标签也被hmtl实体化了,但是默认支队双引号和一些特殊符号进行编码,没有对单引号进行编码
只有加上下列的参数,才会进行编码
于是我们尝试构造其他的闭合
我们在这里输入
' onclick='alert(1)'
点击搜索之后,我们再点击一下搜索框,就会出现弹窗。
我们还有onfocus事件,是用来获取鼠标光标的,只要鼠标光标在上面,就会一直显示弹窗。
还有onblur事件,当鼠标点击输入框时是没有效果的,当我们点击页面的其他地方的时候,就会出现弹窗,也就是光标离开事件。
level-4
我们还是先把上一关的代码输入进去,点击F12查看前端代码,发现我们没有将value的值给闭合掉,于是我们就再添加一个双引号进行尝试,发现成功。
level-5
我们先将第三关的代码输进去,发现没有闭合成功,我们再将第四关的代码输入进去,发现闭合成功,但是我们却发现o和n之间出现了一个下划线_,而且结果如下
我们再尝试了一下其他的on标签和js代码,发现依然不行,会出现下划线。
于是我们换一种思路,我们添加一个a标签。
'"><a href='javascript:alert(123)'>
我们再点击一下蓝色部分,弹窗成功
我们查看一下源代码,发现对on和script做了一下的修饰。
level-6
我们先将第五关的代码拿过来尝试,结果发现href属性被加工了,
那么我们在这里就考虑大小写的问题,是不是只小写进行了加工还是对大写也进行了加工呢。
'"><a HREF='javascript:alert(123)'>
我们发现并没有对大写进行了一个加工,成功弹窗。
查看一下源代码,发现没有对大写进行替换。
level-7
将第六关的代码输入,说明进行了一个scrip标签的替换
既然之前我们已经尝试过了大小写的替换,那么我们现在尝试一下双写字母替换
'"><a HRhrefEF='javascript:alalertert(123)'>
发现成功的绕过。
level-8
我们将前几关的代码都输入进去,发现都无法成功,大小写双写都不可以。
然后我们发现我们的内容直接输出到了a href标签中,于是我们不用添加a href标签了
我们直接javasript即可。输入下面内容javascript:alert("lizhiwei")。
我们发现双引号被编码了。
那么我们在这里就尝试一下编码绕过。
使用网站Unicode编码转换工具,ASCII与Unicode互转 - 在线工具集 (gitapp.cn)
将下面的代码复制进去,发现成功完成。
level-9
我们先随便输入一个,会进行提示,您的链接不合法
那么我们输入一个合法的链接,输入个https发现不行,我们再输入一个http,发现可以,说明服务端那边进行了一个判断,也就是有没有http协议。
我们输入javascript:alert("lizhiwei")//http://,发现js被替换了
我们对javascript进行一个编码
然后发现 成功添加。
点击
level-10
我们发现页面中是没有输入框的,而且我们在上面的url中输入内容会随之改变,当我们输入一些代码时发现也没有作用。
那吗我们看一下源代码,发现有三个隐藏的标签属性
那么我们就在上面的url中搞事情
我们输入(t_link=1&t_history=1&t_sort=1)
发现下面的t_sort显示了1
于是我们输入 t_sort='"type='text'οnclick='alert(123)'
将hiden属性去掉,使得出入框弹出。先使用双引号将前面的value闭合掉。然后成功通关。
这个type属性,谁在前面就用谁。
level-11
我们查看源代码,发现还是有隐藏的标签
我们还是在上面输入t_link=1&t_history=1&t_sort=1
发现t_sort有了value
将上一关的代码输入
发现没有闭合掉
其实这里已经没有漏洞了,我们仔细观察一下第十关跳转到第十一关的发,发现下面的ref那里有值。
那么我们就可以修改里面的内容,我们在这里使用bp ,开启拦截。
我们将Referer里面的值修改,我们换成和第十关一样的payload,t_sort='"type='text'οnclick='alert(123)'
点击放行,然后就成功完成。
level-12
我们还是开启抓包,刷新一下第十二关,发现ua里面的值
我们还是用第十关的payload替换掉 然后ok。
level-13
还是开启抓包,我们修改cookie的值即可
level-14
这一关的题本身就有问题,跳过
level-15
进入15关发现报错了,这是怎么回事呢?
其实是上面的路径报错了,我们稍加修改即可。
我们发现上面的nginclude我们并不认识,我们输入的内容展示在了这了,那么我们先去了解一下这个是什么意思 。
我们先引入第一关的php
既然这个是引进一个html文件的,那么我们把第一关的引用过来并且构造一个payload,但是发现script标签被过滤了
那么我们就换一个标签,比如img标签
%27http://127.0.0.1/xsslab/level1.php?name=1<img%20src=1%20οnerrοr=alert("lizhiwei")>%27
level-16
输入上一关的payload,查看源代码,我们发现空格被编码了,在html里面,不管你输入空格还是回车都会变为一个空格,那么我们可以输入回车,我们将回车进行url编码
然后发现成功
level-17
看到这里我们可以闭合一下src,给他添加一些事件属性
'οnmοuseοver='alert("lizhiwei")',即可成功
level-18
将上一关的payload输入,发现就ok了
这两关就是用的那个embed标签。 level-19andlevel-20
这两关是基于flash进行的,但是由于flash漏洞实在是太多了,所以一些浏览器就禁用flash了。
我电脑上也没有flash。这两关pass。
完结。