XSS(跨站脚本)一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

类型:

  1. 反射型 XSS
  2. 存储型 XSS
  3. DOM 型 XSS

反射型 XSS(GET)

有输入框我们就可以试试一些 js 代码

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

输入进去,我们可以看到,前端限制了长度

这个简单,这种就是用了 HTML 的语法限制。我们浏览器调试一下。把 maxlength 改成 100 甚至更大。

解决

这个题目有一个 GET,就是通过 URL 进行传输信息。

说明我们不仅可以通过修改 HTML 语法进行绕过,还可以通过修改 URL 进行绕过。

方法

  1. 修改 HTML
  2. 修改 URL

反射型 XSS(POST)

先看一下提示,我们获得了一个账号。

我们进去之后,可以输入那串 js 代码即可。

存储型 XSS

看到一个文本框,老规矩,先输入我们的 js 代码。

ok 可以。

并且每次刷新也不会消失。

DOM 型 XSS

可以看到,这次简单输入 js 代码不行了。

我们通过浏览器调试查看一下代码。

可以看到有一个 id 为 dom 的 div 框,里面将输入框里的文字放到了 href 里,就成了超链接。

解决办法

我们可以将 href 进行封闭,我们想要的的是:

1
<a href=""></a><script>alert("hello");<script>

之类的,我们再看看代码发现有一个 onclick=”domxss()”

我们进行搜索,可以发现函数

1
2
3
4
5
6
7
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行

最重要的是

1
"<a href='"+str+"'>what do you see?</a>"

失败案例

1
'</a><script>alert(1)</script><

看一下浏览器解析的,也没错,怎么没有弹窗?

当我们点击按钮时,发现我们的浏览器并没有刷新,自然 js 代码也不会被执行。

成功案例

我们需要写一些可以手动激活 alert 的 HTML 代码。比如 onlick 或者鼠标操作。

1
' onclick="alert(1)"><

我们点击超链接,我们就手动激活了事件。成功!

DOM 型 XSS-X

这个一样用上面的

1
' onclick="alert(1)"><

这个通过 GET 请求到 URL 上,然后通过 javascript 获取 URL 的 text 数据,最后放在超连接中。

XSS 之盲打

我们这次通过输入普通字符和一般的 js 代码都不会输出字符或者跳出弹窗。浏览器调用发现表单是 POST 请求的,没啥信息。看看提示,有一个后端。

进入,之后就有弹窗了。空白处就是弹窗的字符。

**原理:**通过 POST 请求保存在服务器上,可以在工作人员打开后端时执行 xss 代码。

XSS 之过滤

输入 1 是这样的

1
别说这些'1'的话,不要怕,就是干!

输入<

1
别说这些'<'的话,不要怕,就是干!

输入<script

1
别说这些''的话,不要怕,就是干!

输入script>

1
别说这些'script>'的话,不要怕,就是干!

可以发现,如果<script 的话,就会进行过滤。

方法 1:不用 JS

1
</p>"<a href="#" onclick="alert(1)"</a>

直接通过 DOM XSS 那章的知识进行绕过。

方法 2:使用 JS

使用 JS 那一般都需要