CornerShot如何实现无权限网络探测?

11 人参与

想象一下,你是一名渗透测试人员,已经拿下了内网中的一台主机A,但你的最终目标X似乎被层层防护隔离,从A直接访问X的尝试全部石沉大海。传统的横向移动思路是不断寻找新的跳板机,但哪台主机能通往X?难道要盲目地一台台试过去吗?CornerShot的出现,就是为了回答这个看似简单却极其关键的问题:在不具备目标主机任何权限的情况下,如何判断网络中的哪台机器能“看见”它?

核心原理:借“眼”观“靶”

CornerShot的精妙之处在于其命名——“拐角射击”。它不要求你本人(攻击者)拥有瞄准目标的视野,而是利用一个你可以控制的、被称为“载体”(Carrier)的主机,让它替你“探头”去看。这个过程的本质,是滥用Windows域环境下的MS-RPC(特别是IStorage接口)协议调用

具体来说,当你在载体主机B上执行CornerShot指令,指定探测目标X的某个端口(如445)时,工具会利用你提供的域凭据,通过MS-RPC请求B去尝试与X建立指定端口的连接。关键在于,这个连接尝试是由B发起的,评估的也是B到X的网络可达性。作为攻击者,你仅仅是在远程“询问”B:“嘿,你能连上X的445端口吗?” B通过RPC响应告诉你结果:开放、关闭、被过滤,或是未知。

技术实现拆解

  • 凭证与认证:工具需要一组有效的域用户凭据(用户名、密码、域名)。这组凭据用于通过SMB协议认证到载体主机,并建立后续MS-RPC通信所需的安全上下文。权限要求并不高,普通域用户往往就足够了。
  • RPC调用封装:CornerShot底层依赖于Impacket库的强大功能。它并非进行全端口扫描,而是构造特定的IStorage::OpenStorage RPC请求,该请求在尝试访问远程命名管道时,会触发载体主机向目标IP和端口发起一个TCP连接。这个连接尝试是判断网络可达性的核心。
  • 状态判断逻辑:根据RPC调用的响应错误码和TCP连接的行为,工具能精确区分四种状态:
    • 开放:目标端口接受连接,即使后续认证失败(这恰恰是我们想要的网络层信息)。
    • 关闭:目标主机返回TCP RST包。
    • 过滤:连接超时或收到ICMP不可达错误,通常意味着中间有防火墙拦截。
    • 未知:RPC通信本身出现问题,无法判断网络状态。

“无权限”探测的边界与价值

必须澄清一点,这里的“无权限”特指对目标探测主机X无需权限。你仍然需要对作为探针的载体主机拥有基本的网络访问和RPC调用权限。这恰恰是内网渗透的典型场景:你控制了一点(几个入口),需要摸清从这一点能辐射到哪些其他区域。

它的价值是战术性的。在BloodHound这类工具给你展示出数百万条基于ACL和组关系的逻辑攻击路径后,很多路径在实际网络中可能因为防火墙规则而根本走不通。CornerShot的作用就是进行物理路径验证。它能告诉你:“从你已掌控的主机B出发,能直接触碰到的目标有哪些?” 这直接将抽象的权限图,映射到了真实的网络拓扑上。

一个实用的场景是:在拿到第一台域成员主机后,安全团队可以快速用它作为载体,扫描一系列关键服务器(域控、文件服务器、数据库)的特定管理端口。生成的报告会立即揭示出哪些关键资产暴露在了当前已失陷主机的直接网络访问范围内,从而优先对这些路径进行加固和监控。这种从“可能被利用”到“确实可通达”的转变,对于缩短威胁响应时间至关重要。

所以,下次当你面对一片黑暗的内网时,不必让你的攻击载荷盲目乱撞。不妨先找个立足点,装上CornerShot这把“拐角镜”,看清火力能覆盖到的范围,再决定下一步迈向哪里。

参与讨论

11 条评论
  • 绝望咏叹

    这工具原理有点意思,借壳探测是吧

    回复
  • 深海独白

    普通域用户就能用?那内网真得小心了

    回复
  • 柳絮

    求问下这个IStorage接口调用会不会被EDR抓?

    回复
  • 无情

    前几天刚搞完横向移动,要是早知道这工具能省好多事

    回复
  • 光子刺客

    hhh,说白了就是让别人帮你敲门看开不开

    回复
  • 寒灯独影

    感觉还行,比盲扫靠谱多了

    回复
  • 夺命母猩猩

    那如果载体主机本身网络受限呢?还能准吗?

    回复
  • 红泪垂

    又是Windows协议的锅,RPC真是万能后门啊

    回复
  • 玄冥策士

    试过一次类似思路,不过没这么系统化,绝了

    回复
  • 亡者之握

    666,物理路径验证确实比纯权限图实在

    回复
  • 幽影浮生

    有没有人试过在高防火墙环境下效果咋样?

    回复