废话不多讲,有关xss的原理请自行百度,首先看到打开之后页面是如下的,
随便输入点什么,然后F12审查元素看下,在查找里输入随便输入的值查看输入值是否注入到页面。发现我们所输入的成功写入到页面内。
然后尝试构造一下payload输入,发现完整的payload输入不进去,然后我们看到限制我们输入的长度为20,我们改成100吧。
输入payload测试下。成功弹窗
<script>alert(/xss/)</script>
点开之后发现页面是这样子的,先登陆,点了一下提示知道了账号密码。然后我们登陆下。
post方式提交的内容并不会显示在url之内。问了一下大佬,说xss目的性比较强,达到你需要弹窗的目的就好了,反正我是觉得跟get没有什么太大的区别。跟上一关一样,输入然后看注入到页面。输入payload。
<script>alert(/xss/)</script>
存储型XSS和反射型XSS的原理一样,不同的是存储型XSS一般存在与数据库存在交互的地方,代码注入到后台存储起来,每次刷新都会执行,这样构成了更加持久的危害,例如留言板之类。
打开页面之后先随便输入了一点内容然后F12审查元素看下输入的内容有没有经过过滤,发现我们输入的内容被直接写入到标签中,然后我们可以构造payload。
<script>alert(/xss/)</script>
发现成功弹框,而且我们每一次刷新之后都会再次弹框,并且在留言板内发现一条看不见东西的内容。
还是老样子打开之后先随便输入点字符看看有没有经过过滤,查看源码发现并没有经过过滤,然后看到一段JS代码,发现我们可以通过拼接闭合的方式去构造payload。
构造的payload为,意思是单击,弹出xss,单击之后弹框。
' οnclick="alert('xss')">
还有一种payload是
'>
在输入之后可以看到下面出现了一个图片的符号,然后将鼠标移动过去之后就会弹框。
随便输入了点字符审查元素发现并没有被写入到页面内,然后查看源码:也是一段JS代码,将+替换为空格,利用 window.location.search获取内容然后赋值给str,还是看底下我们构造拼接就可以。
payload跟上面的一样。' onclick="alert('xss')">
单击之后弹框。
他更相当于是给你的一个模拟的场景,让你先以攻击者的身份构造payload攻击,然后以管理员的视角去操作。打开之后界面是这样。我们直接输入payload然后提交尝试。
以管理员身份进入后台查看。像下图。管理员地址账号密码在提示里面有,发现xss已经成功弹框。
真实场景下,或多或少都有一定的防护机制,但是过滤不严谨的话还是有很多的绕过方式。
“>
成功绕过">
有关于htmlspecialchars函数,请自行移步百度php手册。
我这里不知道为什么没有进行转义
然后单引号并没有被转换,所以构造payload为:
onclick='alert(/xss/)
看提示然后查看源码发现我们输入的内容用 htmlspecialchars() 进行处理,转义单引号、双引号和左右尖括号,用javascript协议来执行JS,构造payload,单击成功弹框。
javascript:alert(/xss/)
直接查看源码吧。
构造一个闭合,先用一个单引号和闭合掉页面中的
,然后再插入自己的JS代码。
</script><script>alert('xss')</script>