大家好,这里是 渗透攻击红队 的第 72 篇文章,本公众号会记录一些红队攻击的案例,不定时更新!请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关!
PS:祝所有人中秋节快乐~
当渗透测试人员进入内网后,面对的是一片“黑暗森林”,所以渗透测试人员首先会对当前所处的网络环境进行判断,通常的判断分为三种。
而我们就需要对当前内网进行信息搜集,信息搜集越多对内网越了解你才能在内网渗透中如鱼得水,因为内网渗透的本质其实就是信息搜集!
假设攻击者已经获取到 redteam.com 域里的 web-2012 机器的控制权限,接下来我使用 Cobalt Strike 来进行演示内网信息搜集。
本篇文章的配套视频已经上传到哔哩哔哩,大家可在文章末尾或者阅读全文查看。
域森林下的内网信息搜集大全
域环境?or 工作组?
当我们通过 Web 漏洞或者其他的手段获取到了一个命令执行的口子后,我们想要对当前服务器进行深层次的内网渗透,那么必须得知道当前机器所在的环境是 工作组 还是 域 ,因为两种环境的攻击手法不同,所以我们需要根据不同的环境来做不同的处理!
1、查看当前网卡和IP信息:
ipconfig /all
由上图可见,当前机器有两个网卡,并且 主 DNS 后缀 是一个域名,一般来说只有域机器才会有域名显示,而在工作组下显示的是空:
通过查看网卡信息也能知道当前机器是否在域内,是否是一台域机器。
2、查看系统详细信息
systeminfo
通过查看系统详细信息我们发现域显示了一个域名 redteam.com ,这就代表当前机器是一台域机器,在域里。
而在工作组环境的机器只会显示出 WORKGROUP:
通过查看系统详细信息也能知道当前机器是否在域内,是否是一台域机器还是工作组机器。
3、查看当前登录域及域用户
net config workstation
通过执行命令后发现 工作站域 会显示出你当前的域叫 REDTEAM,而工作组则只会显示出:WORKGROUP
通过查看当前登录域及域用户也能知道当前机器是否在域内,是否是一台域机器还是工作组机器。
4、查看域内时间
net time /domain
通过执行以上命令后有三种情况:
通过查看域内时间也能知道当前机器是否在域内,是否是一台域机器还是工作组机器。
本机信息搜集
分清楚是域还是工作组后,我们就可以对当前机器进行信息搜集了。
ipconfig /all
通过查看网络配置信息,我们可以知道当前机器有两个网卡,有两个网卡也就代表我们可以扩大范围进行内网横行渗透,资产也就多了。”资产多也就代表我们有更多机会拿到域内其他主机的权限”!
英文版系统用这条命令:
systeminfo | findstr /B /C:"OS Nmae" /C:"OS Version"
中文版系统用这条命令:
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
知道了当前系统是 Windows Server 2012 R2 Standard 后,假设我们权限是一个普通用户权限,我们想要提权为 SYSTEM 或者其他高权限,那么我们就可以针对性的去搜集 Windows Server 2012 R2 Standard 的提权 EXP,这也是我们搜集信息的目的之一。
echo %PROCESSOR_ARCHITECTURE%
通过查看查看系统体系结构我们就可以知道当前机器可以运行什么“软件”,因为我们在内网渗透中会用到很多工具,很多工具不一定是 AMD 的,所以我们需要考虑到兼容性的问题,这也是我们搜集信息的目的之一。
wmic product get name,version
通过搜集当前本机安装了那些软件后,我们就知道当前机器的使用情况,比如某个软件有一些溢出、提权漏洞、又或者我们可以利用一些软件进行 DLL 劫持提权,当然这都是后话了。
wmic service list brief
通过搜集当前本机的服务信息,我们就可以知道当前机器上有哪些服务,是开启的还是关闭的。
1、查看当前进程列表和软件进程
tasklist
2、查看当前进程列表对应的用户身份
tasklist /v
通过执行这条命令我们可以知道每个进程对应的用户,是那个用户启动的这个软件,但是这条命令只能看到和你一样级别或者比你低权限的用户的进程,这条命令我们会经常用到,后续讲 令牌窃取 会用到。
3、查看当前进程是否有杀毒软件(AV)
tasklist /svc
通过执行完这条命令后,我们就可以知道当前有哪些软件,以及对应的 PID 号、服务名,我们还可以吧执行命令的返回结果去查询是否有杀毒软件:
Github 上有开源的脚本,我们搭建好了直接使用,在这里就不多阐述。
wmic startup get command,caption
通过查看启动程序信息我们可以知道当前机器开机的时候会运行哪些软件,这也可以利用自启动劫持。
schtasks /query /fo LIST /v
通过查看本机计划任务我们就能知道当前机器上“某个时间”会运行哪些软件,我们就可以利用这一点来做定时任务劫持。
net statistics workstation
通过查看本机的开机时间,我们就能判断这台机器的管理员是不是经常关机,是不是经常在登陆这台机器。
net user
通过查看当前机器有那些用户,我们就可以知道当前机器有没有其他管理员,又或者是有没有其他黑客”来过”这台机器,是不是留下了一个后门。
query user || qwinsta
通过查看当前在线用户我们就可以知道当前机器有没有管理员在登陆,因为有的时候我们可能需要远程登录到目标服务器上,万一你盲目的登陆到目标服务器上,那么是不是就暴露了?就是这么一个道理。
netstat -ano
通过查看本机端口开放情况我们就可以知道当前机器有没有与其他机器进行连接,又或者可以分析到当前机器有没有开放远程桌面 3389、MySQL 服务 3306 … 等等
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
通过查看目标补丁情况我们就可以知道当前机器上有哪些补丁打了,有一些漏洞补丁是不是没打,没打补丁的话那么我们就可以对某个漏洞进行利用。
route print
arp -a
通过查询路由表及所有可用接口的ARP缓冲表,我们就可以知道当前网络的分布情况,内网有没有其他机器 …
netsh firewall show config
通过查看防火墙配置我们就能知道当前机器是否开了防火墙,或者一些防火墙配置信息 …
若是想修改防火墙配置信息就可以使用:
win 2003及之前的版本,运行指定程序全部连接:netsh firewall add allowedprogram c:\nc.exe "allow nc" enablewin 2003之后的版本用这条:netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"允许指定程序连出,命令如下netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe" 允许 3389 端口放行,命令如下netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow 自定义防火墙日志储存位置 netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
若是想要关闭防火墙就可以使用:
win 2003及之前的版本用这条命令:netsh firewall set opmode disablewin 2003之后的版本用这条命令:netsh advfirewall set allprofiles state off
查看远程桌面服务是否开启,在 cmd 下使用注册表查询语句,命令如下,得到连接端口为 0xd3d,转换后为 3389
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
一些开启远程桌面的命令:
# 在 Windows Server 2003 中开启 3389 端口 wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1# 在 Windows Server 2008 和 Windows Server 2012 中开启 3389 端口 wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1 # 在 Windows 7 中开启 3389 端口reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
域内信息搜集
搜集完本机的一些配置信息、IP信息、网卡信息、补丁信息后,我们接下来就要搜集域内的信息了,比如:域用户、域管理员、域控制器等信息。
whoami /all
关于获取域sid的作用以后我写了票据传递攻击后大家就了解了。
net user /domain
通过查询域内用户我们就可以知道这个域内所有用户名,这也是可以知道这个域的大小到底有多大的一个命令。
假如我们要查询 saulGoodmang 这个域用户的信息,我们就可以使用:
net user saulgoodman /domain
net view /domain
通过查询域列表发现当前只有一个 REDTEAM 域。
net group "domain admins" /domain
可以看到当前域有两个域管理员:admin、administrator。
net time /domain
通过查看域内时间(时间服务器),我们得知了当前域的时间,我们就可以使用定时任务+IPC来运行一些bat文件。
我们还知道当前域的时间服务器是 AD2-2016,我们可以 Ping 一下它的机器名就知道它的 IP 是多少:
这样就知道了当前域的时间服务机器 AD2-2016 的 IP 为 10.10.10.11。
net localgroup administrators /domain
这条命令会显示本地管理员和域管理员。
net group /domain
查看域的用户组我们可以知道每个组是做什么的,比如一些大型企业或者集团会有 财务组、信息科组、工厂组 … 等等,那么假设我们要针对于某个部门、某个组、某个人来进行渗透是不是搜集组信息就尤为关键了?
netdom query pdc
通过查看主域控制器我们就可以知道当前域的核心域控就是 AD-2016 这台机器。
net group "Domain Controllers" /domain
一个域可以有多个域控制器,通过查看域控制器列表我们就可以得到域控制器对应的机器名是多少,如果想要知道它的 IP 是多少,我们只需要 Ping 它的机器名即可得到域控制器的 IP 地址:
由上图可见,域控机器名为 AD-2016 的 IP 是 10.10.10.10,域控机器名为 AD2-2016 的 IP 是 10.10.10.11,知道域控的 IP 后,我们就可以针对性的对域控制器渗透,只渗透核心机器,拿下域控制器权限整个域也就拿到手了。
nltest /domain_trusts
通过查询域信任信息我们就可以知道当前有多少个域,域名是多少。
net accounts /domain
通过查询域密码信息我们就可以知道当前域用户多久修改一次密码,密码策略是多少(我们就可以根据密码策略来制定一份密码字典,盲目的用字典会很浪费时间)。
当然这些信息搜集的命令我都写到了 Cobalt Strike 的插件里了,在我的知识星球 渗透攻击红队 即可下载,作为一个优秀的红队人员,一定要写一个适合于自己的工具或者插件,这样能够不管是我们做渗透还是内网渗透都有很大的效率,能够大大减少我们做一些手工的操作。
结尾
到此第二章域内信息搜集就到这里了,内网渗透、域渗透的本质其实就是信息搜集,只要你搜集内网的信息越多,你才能了解一个内网是做什么的,那些地方会有瑕疵,那些地方会有可能被红队人员攻破的地方。