本帖最后由 gclome 于 2020-7-18 07:54 编辑
原文链接:内网存活自动化探测、
0x01 实战场景说明
众所周知,日常内网渗透中,在确认已经稳住阵脚,翻完当前机器之后的第一步,就是去搜集目标内网的各类敏感资产,中间免不了会进行各种各样的探测动作,而存活探测便是这其中的一项
0x02 常规内网存活段搜集途径
这就带来一个问题,就是当我们拿到目标内网的一台机器权限之后,到底该怎么去弄清,当前机器到底能通到哪些内网段,或者说 从当前机器上能看到的内网存活段到底有哪些,没错,通过翻已控机的 详细网络配置, rdp/ssh登录日志,web访问日志,网络连接,arp / dns 缓存记录,各类服务配置文件,如,数据库连接配置文件,本机host文件 等等等.... 确实也能发现到不少内网段,但仍可能找不全
为什么一定要发现的这么全?一方面是因为,存活找的越多,后续能发现的敏感资产自然也就越多,我们能下手的地方也就相对越多,其实当目标内网大到一定的程度,再加上时间一长,运维人员的来回流动,可能到最后连对方自己的管理员都不太确定内网中到底有哪些资产,另一方面也是因为,存活发现的越多,你对当前内网的整个架构拓扑掌握的就越清晰,后续控的也就越深越稳,这些毋庸置疑,最重要的一方面还是,比如,在一些Vlan ACL 限制相对比较严的内网,由于目标管理员的粗心或者操作失误,可能就会存在一些能直接通到目标核心内网的段被漏网之鱼(Vlan)(DMZ突破?),反正,诸如此类的问题吧,我们还是需要尽可能发现的全一些
0x03 无条件内网存活探测
原理其实很简单,我们都知道, 常规标准内网段分别为 10.x.x.x ,172.16.x.x -172.31.x.x , 192.168.x.x ,注意,此处我们暂不考虑非标准内网段的情况 (实际中有很多目标内网很可能用的是自定义的内网段,比如,13.98.27.x ,咋一眼看上去还以为是公网ip,其实它是内网ip ), 而网关绝大多数都位于 .1 或者 .254的位置 ,这似乎是个什么网管潜规则(同样,非常特殊的极个别情况,我们暂不考虑),更重要的是,网关几乎都是可以ping通的,了解了这些,后面的思路就很清晰了, 现在只需要逐个去ping 上述所有标准内网段的 .1 和 .254 这两个ip,通过icmp返回,即可快速发现当前内网的所有存活段, 具体扫描脚本如下( Windows & Linux ) ,如果场景需求特殊,再对着稍微改改即可
Windows 版: - @echo off
- rem 内网存活段自动发现脚本 [Windows]
- rem By Klion
- rem 2020.7.1
- setlocal enabledelayedexpansion
- for /l %%i in (0,1,255) do (
- for /l %%k in (0,1,255) do (
- ping -w 1 -n 1 10.%%i.%%k.1 | findstr "TTL=" >nul || ping -w 1 -n 1 10.%%i.%%k.254 | findstr "TTL=" >nul
- if !errorlevel! equ 0 (echo 10.%%i.%%k.0/24 is alive ! >> alive.txt ) else (echo 10.%%i.%%k.0/24 May be sleeping ! )
- )
- )
- for /l %%s in (16,1,31) do (
- for /l %%d in (0,1,255) do (
- ping -n 1 -w 1 172.%%s.%%d.1 | findstr "TTL=" >nul || ping -w 1 -n 1 172.%%s.%%d.254 | findstr "TTL=" >nul
- if !errorlevel! equ 0 (echo 172.%%s.%%d.0/24 is alive ! >> alive.txt ) else (echo 172.%%s.%%d.0/24 May be sleeping ! )
- )
- )
- for /l %%t in (0,1,255) do (
- ping -n 1 -w 1 192.168.%%t.1 | findstr "TTL=" >nul || ping -n 1 -w 1 192.168.%%t.254 | findstr "TTL=" >nul
- if !errorlevel! equ 0 (echo 192.168.%%t.0/24 is alive ! >> alive.txt ) else (echo 192.168.%%t.0/24 May be sleeping ! )
- )
复制代码
Linux版:
- #!/bin/bash
- # 内网存活段自动探测脚本 [Linux]
- # By Klion
- # 2020.7.1
- for i in {0..255}
- do
- for j in {0..255}
- do
- ping -c 1 -w 1 10.$i.$j.1 | grep "ttl=" >/dev/null 2>&1 || ping -c 1 -w 1 10.$i.$j.254 | grep "ttl=" >/dev/null 2>&1
- if [ $? -eq 0 ];then
- echo 10.$i.$j.0/24 is alive ! >> aliveHost.txt
- else
- echo 10.$i.$j.0/24 May be sleeping !
- fi
- done
- done
- for k in {16..31}
- do
- for u in {0..255}
- do
- ping -c 1 -w 1 172.$k.$u.1 | grep "ttl=" >/dev/null 2>&1 || ping -c 1 -w 1 172.$k.$u.254 | grep "ttl=" >/dev/null 2>&1
- if [ $? -eq 0 ];then
- echo 172.$k.$u.0/24 is alive ! >> aliveHost.txt
- else
- echo 172.$k.$u.0/24 May be sleeping !
- fi
- done
- done
- for t in {0..255}
- do
- ping -c 1 -w 1 192.168.$t.1 | grep "ttl=" >/dev/null 2>&1 || ping -c 1 -w 1 192.168.$t.254 | grep "ttl=" >/dev/null 2>&1
- if [ $? -eq 0 ];then
- echo 192.168.$t.0/24 is alive ! >> aliveHost.txt
- else
- echo 192.168.$t.0/24 May be sleeping !
- fi
- done
复制代码
现在看来是不是非常非常简单 ,我想我应该是说清楚了,上面的脚本, 只需要你有一个稳定的可操作的bash 或者 cmd shell 即可,完全依靠系统内置工具 ,即可一把完整抓出所有内网存活段(根本不需要再事先到处去找各种存活段),虽然是有些慢,但还好是在我们能承受的范围,有些兄弟可能会说,当前机器突然大量起这种icmp请求(共计139776个icmp request)监控上很明显,势必会引起对方警觉,其实,通常情况下都不必太过于担心, 至于 我们拿到所有存活段之后的事情就非常明了了,比如,可以对这些存活段集中进行各种各样的操作 ,不过那些都是后话了,抽空再细说
0x04 最后,说点闲话
还是要先给所有一直在默默关注我的弟兄们,诚心地说声抱歉,顺带表声感谢,看了下最后一次发文时间,转眼间半年已经过去了,短短半年也早已把自己变得面目全非,这么久没更新,一个确实因为平时要上班,比较忙也比较累,很多时候也想写,但真的是没有太多剩余精力去支撑自己,回到宿舍基本倒头就睡,另一方面,也是因为真正想沉下心来认认真真踏踏实实的去做些自己喜欢做的事情,不想过多的抛头露面,给自己纠缠一些不必要的是非 (非常抱歉,我可能并不属于某个圈子,也不属于某一类人,只是一直在认真做自己而已) ,现在不管是生活,工作还是心态 都基本已趋于稳定,希望弟兄也能体谅
刚刚有意无意的去翻了下之前的一些文章,除了满满的唾弃感,几乎感受不到任何价值的存在,毕竟,错的多了,才能真正慢慢成长起来,勇敢直视面对,积极改正即可 以后的文章,可能都会用类似上面的这种风格去写,不再追求多而全,尽量一篇文章只去解决一个实际问题(就当是一个tips吧),这样弟兄们看起来也不会太累,也更容易用起来(能吸收才是关键),自己也不会花太多的时间,编辑的太累,不管怎样,我一直还是那个未忘初心的自己,希望弟兄们也能一起认真坚持
- https://github.com/klionsec/ScanerPlus
复制代码
期待能有更多的志同道合弟兄来一起交流学习,欢迎弟兄们的积极转发,点赞和 鼓励 ( 还是那句话,维护不易,乱七八糟的人就不要来了,非常感谢 )
|