XSS(Cross-site Scripting),中⽂名跨站脚本攻击。其原理是攻击者利⽤浏览器执⾏前端代码 (HTML、CSS、JavaScript)的特性,将恶意的JavaScript代码插⼊到⻚⾯中,当⽤户浏览⻚面时,导致恶意代码被执⾏。
level1
在name参数上尝试用简单的JS代码进行XSS攻击,看到下面代码执行成功
<script>alert()</script>
level2
我们还是执行简单的JS代码,发现没有反应
查看源码发现我们的语句被过滤
使用"> <"闭合
"> <script>alert()</script> <"
level3
输入简单js语句发现页面没反应
查看源代码发现不光<>被实体化,符号也被实体化了,我们使用onclick
'οnclick='alert(1)
然后再点击输入框触发onclick事件即可
level4
我们还是先输入简单的js语句,页面没反应
看看页面源代码发现我们的<>被注释掉了
我们继续使用onclick ,这次是"闭合
"οnclick="alert(1)
level5
我们还是先输入简单的js语句,页面没反应
查看页面源代码,发现我们的语句被破坏
使用onclick试试 ,发现on变成了o_n
可以用a标签的href 属性来构造
"><a href=javascript:alert(1)>test</a>
level6
我们还是先输入简单的js语句,页面没反应
查看源码发现和上一关一样,语句被破坏
使用a标签的href也被破坏
查看源码发现过滤了好多关键字
尝试看使用大小写能不能绕过,果然可以
"><a hRef=javascript:alert(1)>test</a>
level7
我们输入关键字看看什么情况,发现输入的href,script都被过滤了
看看大小写能不能绕过
还是不行,大写自动转换为小写了
既然如此,我们就试试双写绕过,比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script,果然成功
"><a hrhrefef=javascscriptript:alert(1)>test</a>
level8
我们先看看过滤了啥关键字,可以看到输入的值插入到了两个地方:input和href,可以发现, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"(双引号)
但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议
javascript:alert()
利用在线工具进行Unicode编码
https://www.matools.com/code-convert-unicode
点击"友情链接"即可
level9
先看看屏蔽了什么关键字
这里提示链接不合法,我们有必要去看看源码了
我们发现不仅屏蔽了很多关键字,还加了if语句
这个意思就是当传入的值没有http://就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗
加入http://并注释掉进行编码即可
javascript:alert()/* http:// */
level10
没有输入框了,我们看看源码怎么个事
这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签,但是我们还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload
?t_sort=" οnfοcus=javascript:alert() type="text
点击输入框弹出
level11
我们先查看源代码,发现多出了一个input标签
猜测这是和referer头有关的 ,我们抓包构造闭合,构造鼠标移动事件
Referer: 1" οnmοuseοver=alert(1) type="text
level12
页面没输入框,老规矩我们先看看源代码
查看源代码发现还是多出来一个input标签,但是它的名字是t_ua,所以推测这是和User-Agent有关的,而且这一关对引号和on之类的没有进行过滤
我们抓包,从agent实现xss攻击
User-Agent: 1" οnfοcus=alert(1) type="text
level13
我们先查看源代码,根据前两关的经验,猜测这是和cookie相关的
我们按F12打开这个网页的cookie,cookie名为user,我们直接在这里改一下就好
" οnclick=alert() type="text
刷新以下点击框即可弹出
level14
我们先查看页面源代码,会定时跳到一个不存在的网站
再来看看网站源码,和页面源码一样
跟网站源码一样,这题本来是利用跳转到别的网站,在那网站去上传一个属性里面含有xss代码的图片,以达到弹窗的效果,网站挂掉了,就不做演示了
level15
这关没有回显和输入框,查看页面源码发现有ng-include
ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
所以我们把存在漏洞的第一关上传上去
?src='/level1.php'
可以看到是成功包含进来的,尝试构造语句
?src='/level1.php?name=<img src=1 οnmοuseοver=alert()>'