如何构造基于浏览器的端口扫描器
字数 1234 2025-08-27 12:33:43
基于浏览器的端口扫描器构造技术详解
0x00 概述
本文详细讲解如何利用现代浏览器特性构造可靠的端口扫描器,这种技术可用于从互联网区域探测内网服务。相比传统的时序攻击方法,本文介绍的技术更为可靠,且适用于Chrome、Firefox和Edge等主流浏览器。
0x01 技术背景
传统浏览器端口扫描技术主要依赖两种方法:
- Jeremiah Grossman提出的使用
<link>元素和时序分析 - Berend Jan Wever(Skylined)开发的lan扫描器,结合WebRTC和XHR技术
这些方法都基于时序攻击(timing attacks),存在可靠性不足的问题。本文介绍的技术则通过分析浏览器对不同端口响应行为的差异,实现了更可靠的端口探测。
0x02 Chrome浏览器实现原理
核心发现
当Chrome浏览器访问未监听的端口时:
- 浏览器会拒绝连接
- 实际URL会被更改为
chrome-error://chromewebdata/ - 无论目标端口是否有服务监听,
iframe的onload事件都会被触发
关键技术点
-
双重请求机制:
- 首次加载URL,捕获
onload事件并增加计数器 - 第二次请求相同的URL但添加
#片段标识符 - 有效端口只会触发一次
onload事件,无效端口会触发两次
- 首次加载URL,捕获
-
实现细节:
iframe.name = a.target = 'probe' + Date.now(); iframe.src = url + ":" + pos; a.href = iframe.src + '#'; iframe.onload = function(){ calls++; if(calls > 1) { clearTimeout(timer); next(); return; } a.click(); }; timer = setTimeout(function(){ validPorts.push(pos); next(); }, 5000); -
注意事项:
- 最新版Chrome使用
X-Frame-Options: DENY时会修改URL,会被误判为端口关闭 - 该方法主要适用于Web服务器扫描
- 最新版Chrome使用
0x03 Firefox浏览器实现原理
核心优势
Firefox的实现更为简单高效:
- 只有有效的Web服务器才会触发
onload事件 - 无需处理连接拒绝的情况
- 可以创建大量
iframe而不会造成性能问题
关键技术点
-
iframe池技术:
var id = 'iframe' + (pos % 1000), iframe = document.getElementById(id) ? document.getElementById(id) : document.createElement('iframe'), timer; -
简化的事件处理:
iframe.onload = function(){ validPorts.push(pos); clearTimeout(timer); next(); }; -
额外优势:
- 可以扫描无效响应场景,检测非Web服务(如Redis服务器)
- 扫描速度更快,可靠性更高
0x04 Edge浏览器实现原理
行为特点
Edge浏览器的行为与Chrome相反:
- 目标端口有效时:URL跳转到错误页面,触发
onload事件 - 目标端口无效时:只有哈希值改变,不触发
onload事件
实现代码
iframe.onload = function(){
calls++;
if(calls > 1) {
validPorts.push(currentPos);
return;
}
var a = document.createElement('a');
a.href = 'ms-appx-web://microsoft.microsoftedge/assets/errorpages/dnserror.html#123';
a.target = iframe.name;
a.click();
a = null;
if(calls === 1) {
next();
}
};
0x05 工具实现要点
- 异步JavaScript开发:提高扫描效率
- 多浏览器适配:根据浏览器类型自动选择最佳探测策略
- 错误处理:妥善处理各种边界情况和异常
0x06 防御措施
网站管理员可采取以下措施防范此类扫描:
- 对所有服务设置适当的
X-Frame-Options头 - 配置防火墙规则限制来自浏览器的异常请求
- 对内部服务实施严格的访问控制
0x07 总结
本文介绍的浏览器端口扫描技术相比传统时序攻击方法更为可靠,且能适应不同浏览器的特性差异。通过精心设计的请求机制和事件处理逻辑,实现了对内网服务的有效探测。理解这些技术原理不仅有助于安全测试,也能帮助管理员更好地防御此类探测行为。