前言
内网渗透的过程中,通过收集信息,可以洞察内网拓扑结构,找出内网中最薄弱的环节。
信息收集的深度,直接关系到内网渗透测试的成败
内网信息收集
概述
进入内网后,要对环境有所判断。主要包括
php
1 2 3
(1) 对当前机器角色的判断 (2) 对当前机器所在 环境的拓扑结构进行分析和判断 (3) 对当前机器所处区域的判断
对当前机器角色的判断,指判断当前机器是普通web服务器,开发测试服务器,公共服务器,文件服务器, 服务器,DNS服务器还是存储服务器等,具体的判断过程,是根据机器的主机名,文件, 连接等情况综合完成的。
对当前机器所在 环境的拓扑结构进行分析和判断,指对所处内网进行全面的数据收集和分析整理,绘制出大致的内网整体拓扑结构图
对当前机器所处区域的判断是指机器处于 拓扑中的那个区域,是在DMZ,办公区还是核心区。
收集本机信息
手动收集本机信息
本机信息包括操作系统,权限,内网IP地址段,杀软,端口,服务,补丁更新频率, 连接,共享,会话等。如果是域内主机,操作系统,应用软件,补丁,服务,杀软一般都是批量安装的。
1.查询本机 配置
php
1
ipconfig /all
2.查询操作系统及软件的信息
(1)查询操作系统的版本信息
php
1
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
php
1
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
image-20200523091942157
(2)查看系统体系结构
plain
1
echo %PROCESSOR_ARCHITECTURE%
image-20200523092311657
(3)查看安装的软件及版本,路径等
php
1
wmic product get name,version
image-20200523092509673
因为服务器中尚未安装任何软件,所以就显示如上图。
3. 查询本机服务信息
php
1
wmic service list brief
image-20200523093455077
4. 查询进程列表
执行如下命令,可以查看当前进程列表的进程用户,分析软件,邮件客户端,VPN和杀软等进程
php
1
tasklist
image-20200523093401608
查看进程信息
php
1
wmic process list brief
image-20200523094007096
5. 查看启动程序信息
php
1
wmic startup command,caption
image-20200523094306188
6. 查看计划任务
php
1
schtasks /query /fo LIST /v
image-20200523094558304
*7. 查看开机时间 *
执行如下命令,查看开机时间
php
1
net statistics workstation
image-20200523094910357
8. 查询用户列表
执行如下命令,查看本机用户列表
php
1
net user
image-20200523095346301
通过分析本机用户列表,可以找出内网机器的命名规则。特别是个人机器的名称,可以用来推测整个域的用户命令方式
执行如下命令,获取本地管理员(通常包含域用户)信息
php
1
net localgroup administrators
image-20200523095728956
可以看到,本地管理员有一个组,一个用户,如图2-13所示。默认Dmain Admins组中为域内机器的本地管理员用户。在真实的环境中,为了方便管理,会有域用户被添加为域机器的本地管理用户。
执行如下命令,查看当前在线用户
php
1
query user || qwinsta
image-20200523100902647
**9. 列出或断开本地计算机与所连接的客户端之间的会话**
php
1
net session
10. 查询端口列表
php
1
netstat -ano
image-20200523101851074
11. 查看补丁列表
执行如下命令,查看系统的详细信息
php
1
systeminfo
image-20200523102149634
image-20200523102307651
php
1
注:需注意系统的版本,位数,补丁信息及更新频率等。域主机的补丁通常是批量安装的,通过查看本机补丁列表,就可以找到未打补丁的漏洞。可以看到,当前系统更新了九个补丁
使用wmic命令查看安装在系统中的补丁,具体如下:
php
1
wmic qfe get Caption,Description,HotFixID,InstalledOn
image-20200523103330515
12. 查询本机共享列表
执行如下命令,查看本机共享列表和可访问的域共享列表(域共享在很多时候是相同的)
image-20200523105616990
利用wmic命令查找共享列表,具体如下
php
1
wmic share get name,path,status
image-20200523110932455
13. 查询路由表及所有可用接口的ARP缓存表
image-20200523113029832
image-20200523113715849
14. 查询防火墙相关配置
(1)关闭防火墙
Windows Server 2003以及之前的版本
php
1
netsh firewall set opmode disable
Windows Server 2003之后的版本
php
1
netsh advfirewall set allprofiles state off
(2)查看防火墙配置
php
1
netsh firewall show config
(3)修改防火墙配置
Windows Server 2003及之前的版本,允许指定的程序全部连接
php
1
netsh firewall add allowdprogram c:\nc.exe "allow nc" enable
Windows Server 2003之后版本,情况如下。
允许指定程序进入,命令如下:
php
1
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: \nc.exe"
允许指定程序退出,命令如下:
php
1
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe"
允许3389端口放行,命令如下:
php
1
netsh advfirewall firewall add rule name="Remote Desktop" protocal=TCP dir=in localport=3389 action=allow
自定义防火墙日志的存储位置
php
1
netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
15. 查看 配置情况
执行如下命令,可以看到服务器127.0.0.1的1080端口的 配置信息,如图2-22所示
php
1
reg query "HKEY_CURRENT_USESoftware\Microsoft\Windows\CurrentVersion\Internet Settings"
16. 查询并开启远程连接服务
(1)查看远程连接端口
在命令行环境中执行注册表查询语句,命令如下。连接的端口为0xd3d,转换后为3389
php
1
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStation\RDP-Tcp" /V PortnNumber
(2)在Windows Server 2003 中开启3389端口
php
1
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
(3)在Windows Server 2008和Windows Server 2012中开启3389端口
php
1
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
自动收集本机信息
编写一个bat脚本用于自动化收集本机信息。
image-20200525001943341
Empire下的信息收集
内网工具学习之Empire后渗透
查询当前权限
查看当前权限
查看当前权限,命令如下:
php
1
whoami
获得一台主机的权限后,有如下三种情况
本地普通用户:当前win10本机的user用户
image-20200525224317654
本地管理员用户:当前为win server 2008 R2本机的administrator用户
image-20200525224729027
域内用户:当前为hacke域内的adminstrator用户
image-20200525224901386
在这三种情况中,如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息,而本地管理员用户和域内用户可以查询域内信息。域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以,只有域用户拥有这个权限,当域用户执行查询命令时,会自动使用kerberos协议进行认证,无须额外的输入账号密码
域渗透之Kerberoast攻击
LDAP概念和原理介绍
本地管理员administrator权限可以直接提升为Nauthority或System权限,因此,在域中,除普通用户外,所有机器都有一个机器用户。本质上,机器的system用户对应的就是域里面的机器用户。所以,使用system权限可以运行域内的查询命令。
获取域SID
执行如下命令,获得域SID
php
1
whoami /all
image-20200525231626329
当前域的SID为S-1-5-21-14.......5644
域用户administrator的SID为S-1-5-21-14.......5644-500
查询指定用户的详细信息
php
1
net user XXX /domain
image-20200525232003763
可以看到testuser在域中属于Domain Users组
判断是否存在域
在获得本机的相关信息后,要判断当前内网中是否存在域。如果当前内网中存在域,就需要判断所控主机是否在域内。
使用ipconfig命令
php
1
ipconfig /all
查看***IP地址,DNS的IP地址,域名,本机是否和DNS服务器处于同一网段等信息。通过域名,利用nslookup反向查询
image-20200526165941469
查看系统详细信息
执行命令
php
1
systeminfo
如图所示
image-20200526182917930
如图所示,如果”域”为”WORKGRUOP”,那么当前服务器不在域内。
查询当前登录域及登录用户信息
php
1
net config workstation
image-20200526195850998
当工作站域DNS名称为”域名”,”登录域”用于表示当前登录的用户是域用户还是本地用户,此处表示当前登录为本地用户。
image-20200526200833383
此时表示当前登录的是域用户
判断主域
php
1
net time /domain
执行命令,判断主域(域服务器通常同时作为时间服务器使用)
image-20200526201142634
可见DC.kache.testlab为域服务器
探测域内存活主机
内网存活主机探测是内网渗透测试中不可或缺的一个环节。可在白天和晚上分别进行对比分析存活主机和对应的IP地址
利用NetBIOS快速探测内网
NetBIOS的工作流程就是正常的机器名解析查询应答过程,因此推荐优先使用
php
1
nbtscan.exe 192.168.1.0/20
image-20200526203710918
利用ICMP协议探测内网
使用如下命令循环探测整个C端
php
1
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
image-20200526203133836
此外还可以利用ARP探测内网
探测域内端口
通过查询目标主机的端口开放信息,不仅可以了解目标主机所开放的服务,还可以找出其开放服务的漏洞,分析目标 的拓扑结构等,具体需要关注以下三点:
php
1 2 3
端口的Banner信息 端口上运行的服务 常见应用的默认端口
在进行内网渗透测试时,通常会使用Metasploit内置的端口扫描器进行扫描,也可以上传端口扫描工具进行扫描。
端口的Banner信息,参考文章 戳这里
收集域内信息
确定了当前内网拥有的域,且所控制的主机在域内,就可以进行域内相关信息的收集了。接下来讲的查询命令本质上都是通过LDAP协议到域控制器上进行查询的,所以在查询时,需要进行权限认证。只有域用户才拥有此权限,本地用户无法运行接下来介绍的查询命令(System权限用户除外)
### 查询域
查询域的命令如下:
php
1
net view /domain
image-20200528212921146
查询域内所有计算机
执行如下命令,就可以通过查询得到的主机名对主机角色进行初步判断。
php
1
net view /domain:hacke
image-20200528213114534
查询域内所有用户组列表
执行如下命令,查询域内所有用户组列表
php
1
net group /domain
image-20200528213434255
该域中有13个组。系统自带的常用用户身份如下
php
1 2 3 4 5 6
Domain Admins 域管理员 对域内所有的域控制器有完全控制权限 Domain Computers 域内机器 Domain Controllers 域控制器 Domain Guest 域访客 权限较低 Domain Users 域用户 Enterprise Admins 企业系统管理员用户 对域内所有域控制器有完全控制权限
查询域管理员账号
php
1
net group "domain admins" /domain
查询域控制列表
php
1
net group "domain controllers" /domain
查询所有域成员计算机列表
php
1
net group "domain computers" /domain
image-20200528214914111
获取域密码信息
执行如下命令,获取域密码策略,密码长度,错误锁定等信息。
php
1
net accounts /domain
image-20200528215223633
获取域信任信息
执行如下命令,获取域信任信息
php
1
nltest /domain_trusts
image-20200528215418928
查看域控制器
查看域控制器的机器名
执行如下命令,可以看到,域控制器的机器名为”DC”
php
1
nltest /DCLIST:hacke
image-20200528215708407
查看域控制器的主机名
执行如下命令,可以看到,域控制器的主机名为”dc”
php
1
Nslookup -type=SRV _ldap._tcp
image-20200528225003374
查看当前时间
在通常情况下,时间服务器为主服务器
php
1
net time /domain
image-20200528225251740
查看域控制器组
执行如下命令,查看域控制器组。
plain
1
net group "Domain Controllers" /domain
image-20200528225625032
注:在实际 中一般存在两台或者两台以上的域控制器,用于容灾。
php
1
netdom query pdc
image-20200528225805986
获取域内的用户和管理员信息
查询所有域用户列表
(1)向域控制器进行查询
执行如下命令,向域控制器DC进行查询
php
1
net user /domain
image-20200528230157066
(2)获取域内用户的详细信息
执行如下命令获得域内用户的详细信息
php
1
wmic useraccount get /all
image-20200528230409615
(3)查询本地管理员用户
php
1
net localgroup administrators
image-20200528230620079
查询域管理员用户组
(1)查询域管理员用户
执行如下命令
php
1
net group "domain admins" /domain
image-20200528231229311
(2)查询管理员用户组
执行如下命令
php
1
net group "Enterprise Admins" /domain
image-20200528231520883