文章目录

level 1

观察题目,发现用户名在url处被提交,且输出用户名的长度为4
2. 查看源码,发现参数未进行任何过滤,猜测为反射型xss
3. 修改name参数为
<script>alert("xss")</script>

level 2——闭合标签

- 观察页面提示,发现依然为反射型
xss,但是与上一关不同之处在于有了搜索框。 - 尝试添加与上一关相同的参数

- 查看源码,发现
<和>被HTML字符实体化为<、>,"被HTML字符实体化为"
猜测在服务器端对keyword这个参数使用了htmlspecialchars()函数,但是value参数中的值未被恶意编码,其中输入的payload被赋值给value,可以考虑闭合value的参数值。 - 显示在页面上的恶意代码不可以改变,于是尝试从标签中的属性进行突破,将属性中的
>和<进行闭合
"><script>alert('xss')</script>//

level 3——单引号闭合并添加事件
- 尝试提交一个随便的参数,查看
url中是否有提示
- 输入构造的弹窗测试语句
<script>alert("xss")</script>
查看页面响应并查看网页源代码
发现于上一关基本相同,区别在于value值也被转义。
4. 对照服务器端的源码,
keyword和value两个参数均使用了htmlspecialchars()函数,且参数value的闭合方式为单引号。
5. 最后的< 和 > 均被转义,无法逃出<input>标签,因此考虑事件驱动。
'οnfοcus=javascript:alert('xss')>
没有直接跳转,而是考虑onfocus事件属性,需要点击输入框才能出现弹窗

level 4——双引号闭合并添加事件
-
尝试输入
<script>alert('xss')</script>
发现依然为get传参。 -
查看网页源码,
<h2>标签处的将<和>进行了转义,而参数value将<和>删除了。
-
查看服务器端的源码,其中
value的闭合方式为双引号
-
但事件触发不使用这两处的符号,于是用上一关的方法
"onfocus=javascript:alert('xss')>//

level 5——javascript伪协议
- 输入语句
<script>alert("xss")</script>进行测试,发现依然为get方式传参。
- 查看网页源码,发现
<h2>标签处进行转义,而参数value的标签<script>中被恶意添加了下划线。
- 我们尝试上一关触发事件的
payload
"onfocus=javascript:alert('xss')>
查看网页源码发现onfocus也被恶意添加了下划线。
4. 查看服务器端源码,闭合方式为双引号
- 将get方式传递到服务器端的keyword参数的值进行全小写的转换,然后赋值给str变量。
- 通过str_replace()函数来破坏变量值中的敏感字符的语义。
- 通过htmlspecialchars()函数处理之后显示到网页上,
- 直接将进行敏感字符处理之后的变量值插入到
<input>标签的value属性值中。
- 因此我们可以换一个标签来执行js代码
"> <a href=javascript:alert('xss') > xss</a> //

点击xss链接即可出现弹窗。
level 6——大小写绕过
- 使用弹窗语句测试
<script>alert("xss")</script>
依然为get传参。
2. 查看网页源码,发现<script>标签依然被恶意添加了下划线
3. 使用onfocus事件测试,
"οnfοcus=javascript:alert("xss")>
同样被恶意添加了下划线
4. 使用<a href=" ">标签来测试,
"> <a href=javascript:alert('xss') > xss</a> //
同样href被恶意添加下划线
5. 对href尝试大小写绕过
"><a HrEf=javascript:alert("xss")>xss</a>//

6. 查看服务器端源码
- 将
get方式传递到服务器端的keyword参数的值赋值给str变量。 - 用字符
<script去匹配我们提交的参数值,如果匹配到了就进行替换来破坏原来的语义导致无法实现xss。此处能够防范的是<script> </script>这一类的恶意代码。 - 可以看到是用字符
on去匹配参数值,如果匹配到了就进行替换破坏原有语义。这里主要防范的是利用带有on字符的事件来触发恶意代码,比如前面用到过的onfocus事件。 - 可以看到是用字符
src去进行匹配,得提到<img>标签。
在标签中引用图片会用到一个属性就是src。正常的引用图片就是将待引用图片的地址赋值给src属性。但是在js中如果src属性的值不正常或者无法访问到时就可以触发一个onerror事件来执行js代码。
<img>标签代码:?name=<img src=111 onerror=alert('xss')>
- 用字符
data进行匹配的,比如如果在实际情况中,javascript、script等关键字被过滤掉了之后,可以用如下语句进行尝试
data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=
和
javascript:alert("xss")
或者
<script>alert("xss")</script>
的作用是一样的。
- 可以看到是用
<a> </a>标签中的字符href来进行匹配,防止通过在href属性中插入js代码来点击执行。 - 用
htmlspecialchars()函数对变量str进行处理后显示到网页上。 - 直接将
str变量值插入到了标签的value属性值中
level 7——双写绕过
- 使用弹窗语句
javascript:alert("xss")
进行测试,并查看网页源码
发现<h2>标签中的双引号被转义处理,且参数value中的script也被删除。
2.
"onfocus=javascript:alert('xss')>// on被删除

"><a href=javascript:alert("xss")>xss</a>//

"><a HrEf=javascript:alert("xss")>xss</a>// 均转化为小写

"><a hrehreff=javascriscriptpt:alert("xss")>xss</a>// 双写关键字

3. 查看服务器端代码

- 对参数值转换成了小写
- 将基本的关键字都删除了,但是均只执行了一次 所以可以双写关键字绕过
level 8——unicode编码绕过
- 测试语句并查看网页源码,提交的参数值一个会插入到
<input>标签的value属性值中,一个会插入到下方<a>标签的href属性值中。
javascript:alert("xss")

2. 依然为get方式传参,且<a>标签中javascript被恶意添加下划线,参数value中的双引号也被转义
3.
"onfocus=javascript:alert('xss')>//

onfocus也被恶意添加了下划线
4. 闭合语句的引号被编码;onfocus、javascript均被恶意破坏语义;未删除关键字,则双写关键字绕过也不可以;大小写绕过也不可以;
考虑使用加密的方法
5. 将弹窗语句进行unicode编码为javascript:alert('xss')

level 9——检测关键字存在
- 尝试弹窗语句
javascript:alert('xss')
并查看网页源代码
2. 本关依旧为get方式传参,提交的参数值插入到了标签的value属性值中,发现value值的单引号被转义。
3. 但是在<a>标签的href属性中却并没有出现该参数值,而是显示的 "您的链接不合法?有没有!"这样的字符串,猜测这里可能对url地址做了匹配。只有包含正常的url地址才能添加到href属性值中,因此构造一个有正常url地址的恶意代码:
javascript:alert('xss')http://www.qq.com

javascript被恶意添加下划线
4.
javAsCript:alert('xss')http://www.qq.com //尝试大小写绕过

javascriscriptpt:alert('xss')http://www.qq.com //双写关键字绕过

javascript:al
ert('xss')htt
p://www.qq.co
m
//全部编码

javascript:
alert('xss
')【javascript:alert('xss')的unicode编码】//http://www.bbaidu.com

5. 查看服务器端的代码
判断如果字符中没有http://的话就会返回false,接着在href属性值中就会出现”您的链接不合法?有没有!”判断成功后,返回第一次出现的位置,将该字符插入到href属性值中了
level 10
- 尝试在url中输入测试语句并查看网页源码。
<script>alert('xss')</script>

<h2>标签中的< 和 >被转义,并发现了三个看不懂的<input>标签
-
查看服务器端的源码

$str22说明是接收t_sort参数值的。$str33会删除t_sort参数值中的<和>。
这一关就只能是将js代码插入到<input>标签的属性值中来执行,而不能通过闭合<input>标签引入新的标签来触发xss了。 -
t_sort的<input>标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。
<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')
