Bootstrap

xss靶场通关笔记

什么是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。

完结。

;