Kali下Seeker+Ngrok实战:如何精准获取对方地理位置(附完整配置流程)
从零到一:构建高精度地理位置信息获取的实战演练
最近在和一些做安全研究的朋友聊天时,大家不约而同地提到了一个话题:在获得授权的前提下,如何验证一个在线服务或社交应用在位置信息处理上是否存在潜在风险。这让我想起了几年前参与的一个内部安全意识培训项目,当时我们需要一种直观的方式来演示,一个看似无害的链接背后可能隐藏的信息泄露风险。今天,我想抛开那些复杂的理论,从一个纯粹的技术实践角度,和大家分享一套完整的、基于开源工具的演练环境搭建与使用流程。请注意,本文所有内容均基于合法授权测试和安全研究学习的语境,任何技术的应用都必须严格遵守法律法规和道德准则。
这套流程的核心,在于巧妙地组合两个工具:一个用于“诱捕”和收集信息的前端,另一个用于将本地服务暴露到公网的后端通道。整个过程就像搭建一个数字化的“捕蝇草”,它静静地等待,一旦有访客进入,便能记录下关键的痕迹。对于从事应用安全审计、社交工程学防御演练或只是想深入了解现代浏览器位置API机制的朋友来说,这是一个非常值得动手实践的案例。
1. 环境准备与核心工具解析
在开始动手之前,我们首先需要理解我们将要使用的“武器库”。整个演练环境运行在一个主流的Linux发行版上,这里我们以安全研究人员常用的Kali为例,但其步骤同样适用于Ubuntu、Debian等系统。核心在于两个工具:信息收集端和网络隧道端。
Seeker 是一个用Python编写的开源情报收集工具。它的工作原理并非直接入侵设备,而是利用现代Web浏览器提供的标准API来请求信息。当用户访问由Seeker生成的网页时,页面会通过JavaScript调用浏览器的Geolocation API来请求位置权限。如果用户点击“允许”,浏览器便会将设备的地理坐标(经纬度)发送回来。除此之外,它还能收集设备类型、操作系统、屏幕分辨率、浏览器插件等基础信息。关键在于,这一切都发生在浏览器沙盒之内,遵循着正常的Web交互流程。
Ngrok 则解决了另一个关键问题:如何让互联网上的用户访问到你本地笔记本电脑上运行的Seeker服务?你的个人电脑通常没有公网IP。Ngrok作为一个反向代理,能在它的服务器和你本地机器之间建立一条加密隧道。当目标用户访问Ngrok提供的一个随机域名(如 https://abc123.ngrok.io)时,流量会通过这条隧道被转发到你本地运行的Seeker服务器上。这样,你无需配置复杂的路由器端口映射或购买云服务器,就能快速获得一个临时的公网访问入口。
重要提示:本文涉及的所有操作均应仅在你自己拥有完全控制权的设备、网络和虚拟环境中进行。用于测试的目标也必须事先获得明确授权。未经授权的信息收集行为是非法且不道德的。
1.1 基础系统与依赖安装
首先,确保你的Kali系统是最新的。打开终端,执行更新操作:
sudo apt update && sudo apt upgrade -y
接下来,安装一些必要的Python依赖。Seeker通常需要Python3和pip来管理包。
sudo apt install python3 python3-pip git -y
我们还需要一个轻量级的Web服务器来运行PHP脚本(Seeker的部分模板使用PHP记录结果)。Apache是一个不错的选择:
sudo apt install apache2 php libapache2-mod-php -y
sudo systemctl start apache2
sudo systemctl enable apache2
2. 部署信息收集端:Seeker的配置与定制
工具获取最直接的方式是从其官方源代码仓库克隆。这能确保我们拿到最新的版本和功能。
cd /opt
sudo git clone https://github.com/thewhiteh4t/seeker.git
cd seeker
进入目录后,先别急着运行。让我们花点时间了解一下它的目录结构,这对后续的定制和问题排查至关重要。
ls -la
你会看到类似以下的文件和文件夹:
seeker.py: 主程序文件。templates/: 包含多个不同伪装场景的网页模板,如“附近Wi-Fi登录”、“快递查询”等。install.sh: 自动化安装脚本(但我们更推荐手动步骤以加深理解)。php/或类似目录:用于处理和保存收集到的数据。
现在,手动安装Python依赖。查看项目根目录下是否有 requirements.txt 文件:
pip3 install -r requirements.txt
如果遇到权限问题,可以尝试使用 pip3 install --user 或 在虚拟环境中安装。
接下来,我们需要确保结果输出文件有正确的写入权限。假设结果保存在 templates/nearyou/php/ 目录下:
chmod 755 /opt/seeker/
sudo chown -R www-data:www-data /opt/seeker/templates/nearyou/php/
sudo chmod 755 /opt/seeker/templates/nearyou/php/info.txt
sudo chmod 755 /opt/seeker/templates/nearyou/php/result.txt
这里将文件所有者改为 www-data(Apache服务器的默认用户),是为了让PHP脚本能够顺利写入数据。
2.2 运行Seeker与模板选择
现在,我们可以首次运行Seeker了。它的交互式界面做得相当友好。
python3 seeker.py
或者指定使用手动模式,获得更多控制权:
python3 seeker.py -t manual
运行后,工具会列出所有可用的网页模板。每个模板都设计成模仿一个常见的、令人放松警惕的页面。例如:
- NearYou: 伪装成一个需要定位服务的“附近优惠”页面。
- Google Drive: 模仿谷歌网盘登录页面。
- WhatsApp: 仿造WhatsApp的Web版界面。
- Telegram: 仿造Telegram的登录页面。
通过输入编号来选择你想要的模板。选择后,Seeker会提示你输入一个“重定向URL”。这个URL的作用是:当目标在页面上执行了某些操作(如点击“允许”位置权限后,再点击一个按钮),页面会跳转到这个URL。你可以将其设置为任何一个无害的、真实的网站,比如 https://www.google.com,这能让整个流程看起来更自然。
输入重定向URL后,Seeker会在本地启动一个Web服务器(默认通常在8080端口),并给出一个本地访问地址,如 http://127.0.0.1:8080。此时,你可以在本机浏览器中访问这个地址,预览你选择的“诱饵”页面长什么样。切记,此时千万不要用你的真实手机点击“允许”位置权限,仅作预览。
3. 建立公网访问通道:Ngrok的配置与替代方案
现在,Seeker服务已经运行在本地了,但只有你自己能访问。我们需要Ngrok把它“映射”到公网。
首先,访问Ngrok官网注册一个免费账户。完成注册和邮箱验证后,登录到Dashboard。在左侧菜单找到 “Your Authtoken”。这个令牌是让你的本地ngrok客户端与账户关联的密钥。
在Kali终端中,下载并解压Ngrok的Linux版本。请注意,直接从官网下载是最安全的方式。
cd /tmp
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
tar -xzvf ngrok-v3-stable-linux-amd64.tgz
sudo mv ngrok /usr/local/bin/
将你的授权令牌配置到Ngrok中:
ngrok config add-authtoken 你的Authtoken令牌
令牌配置成功后,就可以启动隧道了。假设你的Seeker运行在8080端口:
ngrok http 8080
命令执行后,终端会显示一个动态更新的界面,其中最重要的信息是 “Forwarding” 一行。它会显示类似 https://a1b2c3d4.ngrok.io -> http://localhost:8080 的地址。这个 https://a1b2c3d4.ngrok.io 就是你的公网访问入口。
Ngrok的替代方案 虽然Ngrok非常方便,但免费版本有连接时长和域名随机变化的限制。对于更稳定或长期的需求,可以考虑以下替代品:
| 工具名称 | 特点 | 适用场景 |
|---|---|---|
| Cloudflare Tunnel | 免费、稳定、速度快,与Cloudflare生态集成好 | 需要长期、稳定的隧道,且有Cloudflare账户 |
| LocalXpose | 开源替代品,可自建服务器 | 注重隐私,希望完全掌控隧道服务器 |
| Serveo | 纯SSH隧道,无需安装客户端或注册 | 快速临时测试,利用现有SSH连接 |
| PageKite | Python编写,配置灵活 | 需要高度定制化隧道逻辑 |
例如,使用SSH本身就能创建一个简单的反向代理(需要一台有公网IP的服务器):
ssh -R 80:localhost:8080 user@your-vps-ip
或者使用 localhost.run 这个免费服务(在Seeker运行的终端里新开一个标签页):
ssh -R 80:localhost:8080 nokey@localhost.run
执行后,它会直接给出一个可用的 xxxxxx.lhr.life 域名。
4. 实战演练:流程执行与数据解读
一切准备就绪,让我们进入实战环节。假设你已经选择了“NearYou”模板,并且Ngrok隧道已成功建立,获得了公网地址 https://random-string.ngrok.io。
-
生成与分发链接:这个Ngrok地址就是你的“诱饵”链接。你可以通过短信、社交媒体消息、邮件(在授权测试中)等方式,将其发送给测试目标。为了增加迷惑性,可以使用短链接服务(如Bitly)对其进行伪装,让它看起来不像一串随机字符。
-
目标交互过程:当目标用户点击链接,会打开一个看似正常的网页,页面可能会显示“正在查找附近的Wi-Fi”或“为您推荐本地服务”。很快,浏览器会弹出提示:“此网站想要获取您的位置信息”。如果用户点击了 “允许”,那么关键的一步就完成了。
-
信息捕获与查看:此时,目标的经纬度坐标、设备信息等数据,会通过其浏览器自动发送回你本地运行的Seeker服务器。切换回运行Seeker的终端窗口,你应该能看到实时的日志输出,显示有新的连接和捕获的数据。 更详细的数据被写入到之前设置的PHP结果文件中。你可以直接查看该文件:
cat /opt/seeker/templates/nearyou/php/result.txt输出内容会是JSON格式或一行文本,包含类似以下信息:
IP: 102.89.xx.xx | OS: Android 10 | Browser: Chrome Mobile 91 | Lat: 40.7128 | Lon: -74.0060 | Accuracy: 30m | Timestamp: 2023-10-27 14:30:00
4.1 地理位置数据的处理与可视化
获取到经纬度坐标(例如:纬度 40.7128,经度 -74.0060)后,原始的数值并不直观。我们需要将其转换为可读的地址或在地图上标出。
-
使用在线地图服务:最快捷的方式是将坐标复制到谷歌地图或百度地图的搜索框。直接输入
40.7128, -74.0060,地图便会精准地定位到纽约市曼哈顿附近。许多在线地图API也提供反向地理编码服务,可以将坐标转换为结构化地址。 -
使用Python脚本进行批量处理:如果你在测试中收集了大量数据,手动查询效率低下。可以写一个简单的Python脚本,利用免费的
geopy库进行批量反向地理编码。from geopy.geocoders import Nominatim import time geolocator = Nominatim(user_agent="your_app_name") coordinates = ["40.7128, -74.0060", "34.0522, -118.2437"] # 示例坐标列表 for coord in coordinates: location = geolocator.reverse(coord) print(f"坐标 {coord} 对应的地址是: {location.address}") time.sleep(1) # 礼貌延迟,避免请求过快 -
精度理解:
Accuracy字段(单位:米)非常重要。它表示坐标的估计误差范围。一个显示为“30米”的精度通常来自手机的GPS,非常精确。而一个“5000米”的精度可能仅基于IP地址定位,只能确定城市级别的大致区域。在分析结果时,务必结合精度值来判断数据的可靠性。
5. 高级技巧、防御与伦理边界
掌握了基本流程后,我们可以探讨一些提升成功率和隐蔽性的技巧,同时从防御角度理解如何防范此类信息收集。
5.1 提升演练效果的技巧
-
模板深度定制:不要满足于Seeker自带的模板。仔细研究
templates/目录下的HTML、CSS和JavaScript文件。你可以修改文字、图片、LOGO,使其更贴合你模拟的特定场景(如模仿某个公司内网的登录页面风格)。越逼真,目标的警惕性就越低。 -
结合短域名与HTTPS:Ngrok免费版提供的域名是随机且明显的。可以购买一个简短、可信的域名,并在DNS设置中将其
CNAME记录指向Ngrok提供的地址。同时,Ngrok自动提供HTTPS,这非常重要,因为现代浏览器对非HTTPS网站的位置请求会显示更严厉的警告。 -
上下文诱导:链接的发放需要语境。在授权的社工演练中,可以设计一个完整的故事。例如,冒充IT部门发送“公司Wi-Fi安全检测通知”,或者冒充快递公司发送“包裹派送确认”,将链接嵌入到合情合理的文本中。
-
结果自动化处理:可以修改Seeker的PHP后端脚本,使其在接收到数据时,不仅保存到文件,还自动触发一个API调用,将数据发送到你的Slack频道、Telegram Bot或数据库中,实现实时告警。
5.2 从防御视角看位置信息保护
作为普通用户或安全从业者,了解攻击手法是为了更好地防御。以下是一些保护位置隐私的实用建议:
-
审慎对待位置权限:当任何网站,尤其是突然弹出的、非你主动访问的网站,请求位置权限时,第一反应应该是 “拒绝” 。思考这个网站为什么需要你的精确位置?地图、外卖、打车App需要,但一个新闻博客或下载站通常不需要。
-
检查浏览器权限设置:定期清理浏览器中已授予位置权限的网站列表。在浏览器设置的“隐私与安全”或“站点设置”中,可以查看和管理所有网站的权限。
- 在Chrome中:
设置 -> 隐私和安全 -> 网站设置 -> 位置信息。 - 在Firefox中:
选项 -> 隐私与安全 -> 权限 -> 位置信息 -> 设置。
- 在Chrome中:
-
使用操作系统级的位置模拟:一些操作系统允许你为应用程序提供模糊化的位置或自定义的虚拟位置。这可以在不暴露真实坐标的情况下,使用需要定位的服务。
-
关注链接来源:对任何来自陌生人、不熟悉联系人或上下文可疑的链接保持警惕。即使是熟人发来的链接,如果附带的文字不合常理,也应先通过其他渠道核实。
5.3 不可逾越的伦理与法律红线
最后,也是最重要的一部分,我们必须明确技术的边界。地理位置信息属于个人敏感信息。
-
授权是前提:任何形式的测试,都必须事先获得目标对象的明确知情和同意。未经授权的测试即等同于攻击。
-
目的必须合法:技术应仅用于安全研究、授权渗透测试、企业安全审计、教育培训等合法合规的目的。任何用于跟踪、骚扰、窥探他人隐私的行为都是非法且不道德的。
-
数据妥善处理:在授权测试中收集到的任何数据,在测试结束后都应立即、安全地销毁。不得存储、传播或用于测试目的之外的任何场景。
-
遵守平台政策:Ngrok等服务有其使用条款,禁止将其用于恶意活动。滥用可能导致账户被封禁,甚至承担法律责任。
技术的双刃剑属性在这里体现得淋漓尽致。Seeker这样的工具,在安全专家手中是评估风险、提升意识的利器;而在恶意分子手中,则可能成为侵犯隐私的凶器。作为学习者,我们的目标应该是前者——通过亲自动手理解其原理,从而在设计产品时更好地保护用户,在作为用户时更好地保护自己。真正的安全,源于深知风险所在,并为之筑起有效的围墙。
更多推荐
所有评论(0)