xss-labs通关大详解

目录

level1

 level2

level3

level4 

level5

 level6

level7

 level8

level9

 level10 

level11

level12 

 level13

level14

level15

level16​

 level17


xss-labs

level1

 观察三处箭头,可以发现它是向服务器提交了一个name参数,值为“test”,从页面

回显来看,将neme参数的值显示在了页面上,并且显示了name参数值的字符长度

接下来,查看源码

 他将name的参数值放到了<h2></h2>之间

将name的参数重新赋值:<script> alert('xss')</script>

 level2

 

与第一关相比,增加了“输入框”和“搜索”

使用第一关的方法

 发现不成功,查看网页源代码

可以看到在<h2> </h2>标签之中的恶意代码被编码了。其中<>都被编码成了html字符实体。 

 要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。将keyword的参数值重新赋值"><script>alert('xss')</script>//

 左边的">去闭合原先的"
右边的//去注释原先的">

level3

 尝试制造弹窗

 报错了,查看网页代码

 箭头所指的两处都将<>字符编码成了html字符实体

查看level3.php的代码

 发现这两处都使用了htmlspecialchars()函数进行了处理。

构造代码:level3.php?keyword='onfocus=javascript:alert('xss') > //&submit=搜索 

 

发现没有直接弹窗,这是因为onfocus事件的特殊性造成的 

onfocus 事件在对象获得焦点时发生。

onfocus 通常用于 <input>, <select>, 和<a>.

最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以

输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此

点击当前页面的输入框就可以完成弹框了。

level4 

上弹窗代码测试一下

 输入框中与我们提交的参数值有出入,<>没有了

查看网页源代码

箭头1处直接将<>编码转换了

箭头2处却是把<>删除了

但是,事件触发却不需要使用这两个符号。

用上一关的代码:level4.php?keyword="onfocus=javascript:alert('xss')"

level5

弹窗代码测试

报错,查看网页源代码

箭头1处:应该是被htmlspecialchars()函数将<>进行了编码处理

箭头2处:在显示位可以看到,它在我们的恶意代码<script>中添加了一个_符号

 用之前事件触发的代码进行测试:?keyword="onfocus=javascript:alert('xss')"

没有成功弹出提示框

查看网页源代码

 这里对onfocus这一类的事件字符也进行了防范

所以此处既然无法通过<script>标签或触发事件来执行js代码的话,那么可以换一个标

签来执行js代码。

继续构造如下代码:?keyword="> <a href=javascript:alert('xss') > xss</a> //

从页面回显可以看到一个xss的链接

点击链接即可触发弹窗的js代码

 level6

 尝试搜索恶意代码<script>alert(‘xss’)</script>

 

 查看网页源代码

上面则还是<>被编码了

下面则是在script字符中插入_破坏语义。

尝试上一关中的方法?keyword="> <a href=javascript:alert('xss') > xss</a> //

 发现还是不行,查看代码也是一样的原因

我们可以试试大小写混写来尝试能不能绕过

还是标签:?keyword="> <a HrEf=javascript:alert('xss') > xss</a> //

同样还是点击了页面回显的xss链接

我们这里改动的是<a>标签中的href属性的大小写,而在html中对大小写是

不敏感的。

level7

输入恶意代码,查看网页源代码

箭头1:将<>进行编码处理了

箭头2:把script字符直接删除了

 再试试事件触发:?keyword="onfocus=javascript:alert('xss')//

 可以看到onfocus事件直接把on字符删除了,javascript中的script字符也被删除了。尝试大小写也不对,尝试双写关键字

 level8

用test测试,查看源码

 提交的参数值一个会插入到<input>标签的value属性值中,

一个会插入到下方<a>标签的href属性值中。

输入<script>alert('xss')</script>

<>被编码了

在href属性值中script字符被插入了_字符破坏语义

事件触发测试:?keyword=" οnfοcus=javascript:alert('xss')>//&submit=添加友情链接

用来闭合引号的引号也被编码了。

onfocus一类的事件也被破坏了

大小写绕过,失败了

因为此处没有对关键字进行删除,所以就不进行双写测试了

其实还可以将我们要提交的js代码进行编码

 

 

level9

提交的参数值插入到了标签的value属性值中

但是在<a>标签的href属性中却并没有出现该参数值,

而是显示的 "您的链接不合法?有没有!"这样的字符串。

猜测这里可能对url地址做了匹配。

只有包含正常的url地址才能添加到href属性值中

构造一个有正常url地址的恶意代码:?keyword=javascript:alert('xss')http://www.baidu.com

 语句虽然显示在了href属性值中,但是javascript字符被插入了_

尝试大小写绕过

然而并没有成功

那么尝试对关键字进行编码

http://www.baidu.com之间需要插入//,否则不会成功执行弹窗。

 level10 

尝试输入<script>alert('xss')</script>

查看网页源代码

这里有三个<input>标签的话,也就意味着是三个参数

看看哪一个标签能够被突破

构造语句?keyword=<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

从页面响应来看,有一个<input>标签的状态可以被改变。这个标签就是名

t_sort<input>标签,之前都是隐藏状态,但是通过构造参数响应发现只

有它里面的值被改变了。

因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。

构造如下代码:?keyword=<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')

 

level11

查看网页源代码

可以看到如同第十关一样有隐藏的表单

不同的是多了一个名为t_ref<input>标签。

尝试用上一关的方法看看能不能从这几个标签进行突破注入代码。

构造代码:?keyword=good job!&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text

页面没有反应

看看网页源码

 

 

原来t_sort仍然是接受参数值的,但是里面的双引号被编码了

这样浏览器只能正常显示字符但是却无法起到闭合的作用了。

进行抓包

可以看到在原始的请求数据包中并没有referer这个请求头,那么我们可以自

己给它加上

构造代码:referer:"type="text" οnclick="alert('xss')

 

 

 可以看到我们添加的referer头的值出现在了t_ref标签的value属性值中了。

接下来就是从这里突破注入恶意代码了,恶意代码成功插入了value属性值

中,接着将这个请求的响应放行到浏览器试试

成功弹窗了,说明通过referer头来提交恶意代码触发了xss

level12 

查看网页代码

 

 看到了t_ua这样一个标签

burp抓包

数据包中User-Agent头的值和value属性的值相同

那么接下来尝试先闭合前面的value属性,然后构造恶意代码看看

"type="text" οnclick="alert('xss')

 

 level13

查看页面代码

 

出现一个新标签

抓包测试

 

可以看到抓取的数据包中cookie头是有值的,而且这个值在响应的网页

源码中的t_cook标签中出现了。

尝试在cookie的值中进行构造语句

 "type="text" οnclick="alert('xss')

level14

level15

 查看网页代码

 

AngularJS框架,发现这个一个包含,包含的是一个页面

构造代码

?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'

因为这里参数值算是一个地址,所以需要添加引号。

但是level1.php不是一个php文件吗?

这里解释一下

这是因为我们不是单纯的去包含level1.php,而是在后面添加了name参

数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的

html文件给包含进来的意思。
成功弹窗

level16

 查看源代码,用最基本的弹窗代码测试一下

关键字script以及 / 和空格都被编码成同样的空格字符实体了。

这样也没办法去闭合前面的标签了。

可以用回车来将它们分开。

而且这里/符号也被编码了,所以我们需要的是一个不需要闭合的标签,比

如之前所用过的<img>

构造的语句为level16.php?keyword=%3Cimg%0Dsrc=x%0Donerror=alert(%27XSS%27)%3E

,使用了%0d代替空格,%0d是十六进制的回车,成功弹框,进入下一关

 level17

查看网页源代码

我们提交的两个参数的值出现在了<embed>标签的src属性值中

猜测该标签应该就是突破口,然后用基本的弹窗代码测试

直接修改源码中该超链接 a 标签中的 href 为:javascript:alert(1),点击成功绕过

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值