目录
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
![](https://img-blog.csdnimg.cn/2528aaf4ca6a4d60bed8d258767022cd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAc2hheWVidWRvbg==,size_20,color_FFFFFF,t_70,g_se,x_16)
查看源代码,用最基本的弹窗代码测试一下
关键字script
以及 /
和空格
都被编码成同样的空格字符实体了。
这样也没办法去闭合前面的标签了。
可以用回车来将它们分开。
而且这里/
符号也被编码了,所以我们需要的是一个不需要闭合的标签,比
如之前所用过的<img>
构造的语句为level16.php?keyword=%3Cimg%0Dsrc=x%0Donerror=alert(%27XSS%27)%3E
,使用了%0d代替空格,%0d是十六进制的回车,成功弹框,进入下一关
level17
查看网页源代码
我们提交的两个参数的值出现在了<embed>
标签的src属性值中
猜测该标签应该就是突破口,然后用基本的弹窗代码测试
直接修改源码中该超链接 a 标签中的 href 为:javascript:alert(1)
,点击成功绕过