发现单引号被变成双引号, 也就是说, 输入的值是被单引号闭合起来再传入标签中的, 在网页源码也可以看到:
所以我们要绕过单引号,方法如下:
' οnfοcus=alert('拈花倾城')> // a标签内部加属性 '> <img src="" onerror=alert('拈花倾城')> // 闭合出a标签, 将img标签嵌入上一级div执行
五、 DOM型XSS-X
这个题目和上个题目是一样的,payload也是一样的,主要分析一下网页请求过程。当随便输入内容并点击按钮后,发现url新增了一个test参数,点击链接, 调用domxss()函数,解析url提取出test参数值, 然后嵌入到新的a标签中。
六、XSS盲打
意思就是我们看不到弹窗,但是管理员是可以看到弹窗的。
我们发现内容是无法在网页前端显示出来, 也就是没有写入到前端页面, 而是提交到了后台当中。
倘若我们注入xss, 是无法得知是否xss被执行, 但是管理员在后台查看时, 当我们注入了xss代码, 同时管理员又访问了后台, 且后台把我们的内容输出, 那么后台管理员可能遭受到我们的XSS攻击。
这也是称为Xss盲打的原因。
管理员地址为:
pikachu/vul/xss/xssblind/admin_login.php
七、Xss之过滤
我们试着插入这个payload:
<script>alter('拈花倾城')</script>
发现并没有弹窗,而且我们上传的内容是没有显示的。f12看看网页内容:
继续分析, 发现是对script关键字进行了过滤:
漏洞利用
绕过方式有很多:
<ScRiPt>alert(’拈花倾城‘)</ScRipt> // 大小写混合绕过 <img src="" onerror=alert(’拈花倾城‘)> // img标签
八、XSS之htmlspecialchars
htmlspecialchars() 函数
PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
& 成为 & " 成为 " ' 成为 ' < 成为 < > 成为 > 可用引号类型 ENT_COMPAT:默认,仅编码双引号 ENT_QUOTES:编码双引号和单引号 ENT_NOQUOTES:不编码任何引号
分析
输入内容, 发现被写入了bjernsen标签作为了一个链接:
那么继续用闭合绕过的思路, 发现 " , <, >等都被转义和HTML编码了:
但是发现单引号没有被过滤掉 (htmlspecialchars函数默认是不过滤单引号的)
漏洞利用
hack' οnfοcus='alert('拈花倾城') // 单引号闭合+事件标签 javascript:alert('拈花倾城') // JavaScript伪协议
九、XSS之href输出
用户输入的url会作为a标签的href属性值:
查看网页源代码,发现左右尖括号和单引号都被html编码了,这样的话,闭合标签或者闭合属性都行不通了。
但也不是没办法了,W3School中对 标签的href属性有以下描述:
标签的 href 属性用于指定超链接目标的 URL:
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了 标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。
从上述描述可见,这边可以利用JavaScript协议,输入payload:
javascript:alert(document.cookie)
十、XSS之js输出
输入内容被动态生成到网页的js代码中了:
我们输入tmac试试:
漏洞利用
观察js代码, 发现可以用
</script><script>alert('PiKaChu-Xss完结撒花')</script>
这个漏洞的输出点是在JS中,通过用户的输入动态生成了JS代码
JS有个特点,它不会对实体编码进行解释,如果想要用htmlspecialchars对我们的输入做实体编码处理的话, 在JS中不会把它解释会去,虽然这样解决了XSS问题,但不能构成合法的JS
所以在JS的输出点应该对应该使用 \ 对特殊字符进行转义。
希望大家可以有所收获哦!