跨站脚本攻击利用

盗取Cookie

前提条件

-目标网站没有使用http-only
-受害者可以访问到接收端
-获取到cookie后目标用户没有退出登录

Cookie是一种存储在计算机浏览器目录中的文本文件。当用户浏览某个站点并注册帐号,就会生成一个Cookie文件用于记录登录信息。目前,大多数网站都会应用Cookie技术,这既能给用户提供一个好的网络环境,又能方便收集访客信息。

攻击方法

方法一

攻击者视角

首先在公网服务器启动一个用于接收Cookie的WEB服务,既可以使用python启动,也可以使用Apache启动。

因为受害者与攻击者处于各自的局域网之中,两者之间是无法通信的。如果你想要获取到受害者的Cookie,则必须要使得受害者能与攻击者进行通信,所以攻击者需要在公网里启动

python3启动WEB服务:

1
python3 -m http.server --bind 0.0.0.0 2333

image-20230410210007661

然后在XSS漏洞的地方插入攻击代码

image-20230410212121530

JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。 window.open 常用来在新的window或新的tab页打开一个页面或文件(如图片、PDF等)。 btoa 进行base64编码

以本地dvwa为例子

image-20230410212325649

可能复制的时候会复制不全

就是前端做了限制

image-20230410212638404

一开始maxlength为50,可以删掉,也可以增加长度

上传后

image-20230410213114487

image-20230410212842020

image-20230410212848985

受害者视角

受害者访问了攻击者插入了xss代码的网页,触发了漏洞,在浏览器打开新的一个页面,并将浏览器的cookie发送到攻击者服务器。

用无痕模式打开dvwa
输入账号:smithy
密码:password

打开页面发现弹出这个窗口

image-20230410213609901

image-20230410213704251

image-20230410213814052

base64解码得出

我们可以重新打开login.php

image-20230410214101040

把security改为low,phpsessid改为刚刚解码得到的值

然后重新再访问

/DVWA/vulnerabilities/xss_s/
这个页面

可以无需输入账号密码即可登入

方法二

利用现有的XSS平台,XSS平台是一个测试XSS漏洞获取cookie的平台,XSS可以做JavaScript能做的所有事,包括但不限于窃取cookie、后台增删改文章、钓鱼、利用XSS漏洞进行传播、修改网页代码、网站重定向、获取用户信息等。

攻击者视角

首先准备一个XSS平台用以接收Cookie,在网上其实有很多这种平台,但其实有的平台存在黑吃黑的 现象。所以为了安全起见可以自行搭建。

下载BlueLotus_XSSReceiver,解压后放到虚拟机里。 这里使用docker搭建xss平台

第一步:拉取docker镜像

1
sudo docker run -d -p 9944:80 -v ./01-bluelotus:/var/www/app romeoz/docker-apache-ph p:5.6

第二步:利用镜像启动一个容器并挂载xss平台的目录

1
sudo docker run -d -p 9944:80 -v ./01-bluelotus:/var/www/app romeoz/docker-apache-php:5.6

第三步:修改配置

1
2
3
mv ./01-bluelotus/config-sample.php ./01-bluelotus/config.php
chmod -R 777 ./01-bluelouts/data
chmod -R 777 ./01-bluelotus/data

第四步:访问http://your-ip:port/login.php

比如我XSS平台的宿主机IP为192.168.247.133,docker的 端口为9944

则访问http://192.168.247.133:9944/login.php 密码为:bluelotus

image-20230410223045280

第五步:在【我的JS】里选择插入【default】模板,文件名随意

第六步:修改模板里的“网络地址”为平台的地址,并点击【新增】

这里平台搭建完成。

image-20230410223245697

点击新增,和生成playload

image-20230410223320291

把这个复制到dvwa里

受害者视角

依旧使用smithy账号登入

虽然正常访问无弹窗,但依旧收集到cookie信息

image-20230410223744448

网络钓鱼

钓鱼网站是指欺骗用户的虚假网站。“钓鱼网站”的页面与真实网站界面基本一致,欺骗消费者或者窃取访问者提交的账号和密码信息。钓鱼网站一般只有一个或几个页面,和真实网站差别细微。钓鱼网站是互联网中最常碰到的一种诈骗方式,通常伪装成银行及电子商务、窃取用户提交的银行账号、密码等私密信息的网站。 网络钓鱼是犯罪分子最容易实施的网络攻击方式之一,也是最容易上当的方式之一。它还可以为黑客提供所需的一切,以洗劫其目标的个人和工作帐户。 网络钓鱼也是网络攻击者传播恶意软件的一种流行方法,通过鼓励受害者下载一个文件或访问一个链 接,秘密安装恶意有效载荷,从而进行传播木马恶意软件、勒索软件或各种破坏性和破坏性攻击。

Flash钓鱼

Flash

flash player是一种广泛使用的、专有的多媒体程序播放器。Flash Player使用矢量图形的技术来最小化文件的大小以及创造节省网络带宽和下载时间的文件。因此Flash成为嵌入网页中的小游戏、动画以及图形用户界面常用的格式。

Flash官网页面伪造

真实的flash官网

image-20230410225718087

虚假的,除了网址不同其他都相同

image-20230410225736826

攻击者视角

1、首先下载相关文件,解压后将Flash相关文件放到WEB网站根目录里,这里以安装了apache的docker镜像为例

1
sudo docker run -d -p 9945:80 -v ./02-fakeflash:/var/www/app romeoz/docker-apache-php:5.6

2、再将index.html重命名为index.php

1
mv index.html index.php

3、编辑flash.js文件

将window.location.href修改为index.php的url地址,该文件的作用为插入一个iframe内联框架

image-20230410225246131

4、向存在XSS漏洞的地方插入payload

image-20230410225033138

受害者视角

image-20230410225147985

如果没有太大的警觉心就会觉得确实是flash版本太低了,点击确定就会跳转到攻击者伪造的flash官网页面

image-20230410225347719

然后就会下载攻击者生成的恶意文件并安装执行

Cobalt Strike钓鱼

Cobalt Strike(简称为CS)是一款团队作战渗透测试神器,是一种可以用来进行横向移动、数据窃取、鱼叉式钓鱼的后渗透工具,分为客户端和服务端,一个客户端可以连接多个服务端,一个服务端也可以对应多个客户端连接。

克隆网站

首先将Cobalt Strike程序下载下来,然后放到kali里(需要有jdk环境,kali自带)

给程序执行的权限并启动服务端

1
2
chmod +x teamserver
sudo ./teamserver kali的ip 密码

image-20230411174551012

启动客户端

1
2
chmod +x cobaltstrike
sudo ./cobaltstrike

image-20230411192223280

Host填写服务端的IP
Port默认50050
User随意填写
Password为启动时的密码

开始克隆

选择攻击 –> 钓鱼攻击 –> 克隆网站

image-20230411193028992

这里clone url我选择我dvwa的登入界面

image-20230411193913999

可以输入这个网址,打开钓鱼网站

image-20230411194047837

image-20230411194031587

创建eval.js
window.location.herf填入你攻击机的ip地址

image-20230411194338819

image-20230411194705901

1
python3 -m http.server 1234

在存在xss漏洞的地方插入payload

image-20230411201754236

受害者视角

image-20230411195041675

攻击者视角

image-20230411195142471

Beef钓鱼

Beef(The Browser Exploitation Framework)是浏览器攻击框架的简称,是一款专注于浏览器端的渗透测试工具。

攻击原理

BeEF 提供一个 Web 界面来进行操作,只要访问了嵌入 hook.js 的页面,抑或执行了 hook.js 文件的浏览器,就会不断地以 GET 的方式将其自身的相关信息传到 BeEF 的服务端。

服务器端:beef作为服务端管理,管理访问运行了hook的客户端
客户端:运行于客户端浏览器的 Javascript 脚本(hook),也就是beef生成的payload。
beef将运行了hook的web浏览器钩住,进行管理

攻击手段

配合xss,将hook插入到存在xss的注入处;
直接诱使客户端访问含有 hook 的伪造站点
结合中间人攻击注入 hook 脚本

使用

最新的kali系统已经不会默认安装 BeEF,需要我们自行安装。

1
sudo apt install beef-xss

启动beef

可以使用命令

1
sudo beef-xss

或者直接打开

image-20230411175138423

第一次启动需要配置密码
默认账户是beef
密码要改成不用beef的密码

image-20230411175225946

如果出现错误,则可以尝试以下命令进行重装

1
2
3
4
5
6
apt remove ruby 
apt remove beef-xss
apt-get install ruby
apt-get install ruby-dev libpcap-dev
gem install eventmachine
apt-get install beef-xss

利用beef进行攻击钓鱼

实际上启动界面已经给了攻击代码了

image-20230411201738495

image-20230411200350513

攻击者视角

image-20230411201312029

受害者视角

image-20230411201254606

image-20230411201410059

流量劫持

流量劫持是指利用一些软件或者木马修改浏览器不停的弹出新的窗口强制性的让用户访问指定的网站。

在漏洞处插入payload:

image-20230411201718534

跨站脚本攻击漏洞修复

输入过滤

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

输出转义

在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。htmlspecialchars():把预定义的字符转换为 HTML 实体 预定义的字符如下:

& (和号)成为 &
“ (双引号)成为 “
‘ (单引号)成为 ‘
< (小于)成为 <
>(大于)成为 >

使用http-only

HttpOnly是加在cookies上的一个标识,用于告诉浏览器不要向客户端脚本(document.cookie或其他)暴露cookie。当你在cookie上设置HttpOnly标识后,浏览器就会知会到这是特殊的cookie,只能由 服务器检索到,所有来自客户端脚本的访问都会被禁止。
HttpOnly:禁止javascript读取,如果cookie中的一个参数带有httponly,则这个参数将不能被javascript获 取;httponly可以防止xss会话劫持攻击。

配合csp

CSP(Content Security Policy)指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。
CSP 本质上是建立白名单,规定了浏览器只能够执行特定来源的代码;即使发生了xss攻击,也不会加载来源不明的第三方脚本。