标签 内外网资产对应关系定位 下的文章

0x01 实战场景说明

实战中可能会经常遇到这样的情况,比如,前期在外网打点过程中肯定会搜集到非常多的目标敏感资产,包括跑在各种子域上的各类敏感Web业务系统,典型的,如, VPN, MAIL, OA, 运维管理平台, 财务系统, HR系统, SSO, 客户订单系统 , Citrix, 监控系统, 堡垒机 [这种一般也不大可能会直接把它暴露在外网,但不代表没有],各类EDR Web主控端, 防火墙/路由/视频监控设备的web管理端, 各种其它内部系统 等等等...ok, 问题来了,当我们费尽千辛万苦顶到内网之后,该怎么去快速精准定位刚刚在外网看到的这些敏感资产所对应的内网位置呢

在此之前有必要简要说明下为什么要去做这种定位,一方面,一般授权的渗透都是有明确目的的,比如,需要拿到目标内网的某某核心业务系统权限,某某集中控制系统权限,某某数据 等等等...要拿到这些东西的前提是,得先搞清楚这些资产都放在了什么地方,换句话说,万一后面从其它地方搞到了密码,总得有个入口试

另外,知道了这些资产的大概位置,对下一步具体该怎么更高效的搞也是有一定参考意义的,总的来讲,知道这些以后会让整个后渗透过程变得的更有针对性,也不至于搞着搞着就迷失放飞自我了[尤其当内网规模特别大的时候]

另一方面,则是考虑到后期把整个内网搞定之后,为了能挑个更合适的位置给自己布口子 [此处的口子,可以是个账号密码,也可以是个webshell,或者系统后门,甚至是人为构造的漏洞,并不局限],此处会介绍三种比较常用的内外网资产对应关系定位方式,其实非常简单,如下:

0x02 实操过程

第一种,就是把前期在外网搜集到的目标子域 [从外网搜集到的子域可能并不会非常多列表整理好,拿到内网循环ping,然后把解析到的ip截下来

1.png

如下便可清晰的看到各个资产所对应的具体内网ip,从中也可顺便发现一些通过其它手段可能并不太好发现的内网段,在后续渗透中如果遇到这些ip 着重下关注即可

for /f "delims=" %i in (host.txt) do @ping -w 1 -n 1 %i | findstr /c:"[10." /c:"[192." /c:"[172." >> C:/users/public/out.txt

2.png

第二种,dns 暴力枚举

通过第一种方式,确实可以定位到一些资产,但那个子域列表毕竟是从外网抓取的,漏一些在所难免,所以还需要在内网再进行一次dns枚举,内网抓到的结果肯定要比外网多的多,但前提是得先有个内网的dns ip, 怎么在目标找内网dns,方式无非两种,第一种,假设当前已控机在域内,系统网络配置里就有主备dns的ip,后续直接指明用这个ip来枚举即可

beacon> shell ipconfig /all

3.png

另一种,假设当前已控机不在域内,则可以直接扫下内网的53 [tcp & udp 53同时开的一般都是] 端口,或者看下当前机器的dns缓存,通常也是可以找到的。

beacon> portscan 192.168.137.0/24 53 none 256
beacon> shell ipconfig /displaydns

4.png

有了DNS ip,接着就可以拿着这些ip进行暴力枚举 [关于dns枚举的原理非常简单,不再废话,不清楚的弟兄请稍后自行谷歌,能找到多少,看字典],枚举完成后会自动存到csv,如下的工具是基于go的 [个人对于工具的原则,如果不是奔着纯练,学习别人代码或者商业化目的去的,建议能用开源的就用开源的,后面基于之上进行二次开发即可,没有太大必要所有事情都一定从0到1的重复劳动,不如把时间留在更有价值的地方,去创造而非模仿]

https://github.com/Q2h1Cg/dnsbrute (注: 工具有用到Crypt 360会杀)

down下来自行编译即可,关于go多说一点,编译后体积过大,实战中不好上传,都是没办法的事,虽然可以通过调参,upx压缩来减小体积,但upx [亦可用其他压缩壳代替] 这种360会杀,不过,我们可以自己用其他语言实现然后合到cs中,难度不大

beacon> shell dnsbrute.exe -domain tagetDomain.com -dict SubDomain.txt -rate 1000 -retry 1 -server 192.168.137.11:53
beacon> shell tasklist | findstr "dnsbrute.exe"

5.png

第三种,内网批量抓取 Web Title & Header

通过把上面两种方式获取到的结果汇总去重,其实已经能定位到一部分资产了,但这显然还是不够清晰,有了上面那些现在也只能告诉我们大概哪个资产域名对应的是哪个内网ip,其实也并不知道这个ip现在到底还存不存活,上面跑的什么服务,什么业务 等等等...

所以,现在还需要再针对这些ip的Web Title & header集中进行一次批量获取,当然,这只是针对Web的,至于其它的各类服务端口banner,后续会单独说明,有了title和响应banner,才好确定下一步哪些是可以优先搞的

另外,你也可以拿着在内网抓到的某些title去外网的各种引擎上搜[ fofa,shodan,google,bing...],以此来大致判断其所对应的外网位置,方便后期找个更合适的点留口子,关于内网抓title,此处已经写好了针对Windows 和 linux扫描脚本,非常简单,只是简单配合curl 实现的一个粗糙的端口扫描功能,不要问我为什么用批处理和shell,简单,快[两分钟实现],系统内置方便,非常适合专门用来写些简单的demo,前提是你的cmd.exe没有被各种杀软强奸,如下实际扫描效果。

Win下:

6.png

Linux下

7.png

说到内网扫描,多提一句,个人非常不建议,同时针对一个ip扫多个端口,如果你不想被封的那么快 [ 实际扫的时候想完全不被对方看到,其实也不太现实,除非你运气足够好,对方正好把你的流量全都漏了,只是到不到阈值,会不会触发报警的问题 ,另外,顺带提下痕迹清理的事情,其实很多东西是不太好清掉的(可能也只是需要更多的时间) ,如果别人真想查,还是能查到一些东西,考验的更多的是海量数据分析处理精度的问题,先不说各种日志,比如流量,只要不是全程加密,你传的工具,执行的命令...在里面都一清二楚(没错,如果可以的话,你是可以尝试利用这种方式直接从流量里收割别人的好工具的),内网一堆探针和出口镜像是很难保证完全的隐蔽,有些设备还是可以的,更多还在于实际用它的人 ],更建议同时针对特定的ip列表只扫一个端口,现实会告诉你,这种方式绝对要比前面那种好,虽然站在检测的角度,两者其实并没有太大的区别。