内网安全学习笔记-Ⅱ:内网信息收集
目录
| 主要部分 | 知识点 |
|---|---|
| 收集本机信息 | 主要收集操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁及更新频率、网络连接、共享、会话等,可采用手动和自动收集两种方式 |
| 查询当前权限 | 主要收集当前用户权限、域SID、或者某些指定用户信息 |
| 判断是否存在域 | 主要通过查询ipconfig、systeminfo等命令获取信息判断是否在域内 |
| 探测域内存活主机 | 探测内网或域内存活主机,利用netbios、icmp或者ARP进行探测 |
| 扫描域内端口 | 探测主机存活端口、服务,为后续内网漏洞探测利用做准备 |
| 收集域内基础信息 | 收集域内基础信息,包括域名、域内主机、域控等 |
| 查找域控制器 | 定位域控制器 |
| 获取域内的用户和管理员信息 | 查询域内用户、域内管理员等信息 |
| 定位域管理员 | |
| 查找域管理进程 | 收集域管理进程,可以查找登录进程,进而收集域管理员的凭据 |
| 利用powershell收集域信息 | |
| 敏感资料 | 收集本机或域的敏感资料 |
| 分析域内网段划分情况及拓扑结构 | 根据收集的信息分析、画出内网及域拓扑 |
| 域分析工具BloodHound | 利用BloodHound进行域内情况分析 |
| 域内信息收集-Linux主机 | 收集Linux主机信息 |
信息收集是内网渗透的关键。进入内网后的第一步就是信息收集,而且信息收集往往一直贯穿整个内网渗透过程。
进入内网后,一般首先会对本机和内部网络进行信息收集。包括本机:网络配置及连接情况、翻文件、找命令执行历史记录、配置文件、数据库信息、管理员登录信息、总结密码规律、用户相关信息等;对内部网络/其它主机:存活IP、主机名、开放端口和服务等。利用收集到的信息主要针对未修复漏洞、弱点等来横向渗透扩大战果。
内网漫游可以重点关注邮件服务器、OA系统、版本控制服务器、集中运维管理平台、统一认证系统、域控等,尝试突破核心系统权限、核心业务和核心数据。
刚进入内网,很多信息都不知道,面对的是一片黑暗森林。所以往往第一步就是对当前网络环境分析。
我是谁?(角色)
这是哪?(网络拓扑)
我在哪?(所处网络)
1、收集本机信息
本机信息收集包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁及更新频率、网络连接、共享、会话等,针对域内主机,一般操作系统、应用软件、补丁、服务、杀毒软件都是批量安装的。
本机信息收集可采用手动收集和工具自动收集。
手动收集
查询网络配置
根据ipconfig查询本机网络配置信息,可以看到有几个网卡,每个网卡的IP配置,是否有域,域名及DNS
1 | ipconfig /all |

查询操作系统及版本
1 | systeminfo|findstr /B /C:"OS Name" /C:"OS Version" |

另外利用systeminfo也可以查询主机名、网卡、域、补丁等信息。当域不是WORKGROUP,主机就是真实在域内的。

查看系统体系结构
1 | echo %PROCESSOR_ARCHITECTURE% |

查看安装的软件信息
可以利用WMIC(Windows Management InstrumentationCommand Line)或者powershell来查看安装的软件信息
1 | wmic product get name,version |

查询本机服务信息
1 | wmic service list brief |

查询进程列表
tasklist可以查看当前进程列表和进程用户,分析软件、邮件客户端、VPN、杀毒软件进程
1 | tasklist |

常见的杀毒软件进程,另外附上别人总结的杀软进程名:https://www.cnblogs.com/hookjoy/p/10899119.html
1 | 360sd.exe 360杀毒 |
查看启动程序信息
1 | wmic startup get command,caption |

查看计划任务
1 | schtasks /query /fo LIST /v |

查看主机开机时间
1 | net statistics workstation |

查询用户列表
查看本机用户
1 | net user |

获取本地管理员信息(包括域用户)
1 | net localgroup administrators |

查看当前在线用户
1 | query user |

列出本地计算机和连接的客户端的会话
1 | net session |

查询端口
1 | netstat -ano |

查询补丁及其更新频率
对于补丁,需要注意系统的版本、位数、域、补丁信息和更新频率。域内主机补丁通常会批量安装,通过查看补丁列表,可以找出未打补丁的漏洞。
1 | systeminfo |


查询本机共享列表
查看本机共享列表和可访问的域共享列表
1 | net share |


查询路由表及所有可用接口的ARP缓存表
1 | route print |


查看代理配置情况
1 | reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" |

查询并开启远程服务
查看远程连接端口
1 | reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber |

在windows Server 2003开启3389
1 | wmic path win32_terminalservicesetting where (__CLASS != “”) call setallowtsconnections 1 |
在windows Server 2008和2012 中开启3389
1 | 1、wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 |

查看防火墙相关配置
关闭防火墙
1 | # Windows server 2003及之前的版本 |
查看防火墙配置
1 | netsh firewall show config |
修改防火墙配置
Windows Server 2003及以前版本 允许指定程序全部连接
1 | netsh firewall add allowedprogram c:\nc.exe "allow nc" enable |
Windows Server 2003之后版本
1 | # 允许指定程序全部连接 |
自定义防火墙日志存储位置
1 | netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log" |
翻找本地敏感文件及密码本
网核心敏感数据,不仅包括数据库,电子邮件,也包含个人数据,业务数据,技术数据等等,大部分敏感数据基本都在内网中。查找敏感文件,可参考:https://my.oschina.net/u/4196756/blog/4444701
1 | 站点源码备份文件、数据库备份文件、配置信息文件等等 |
凭证收集
常用工具mimikatz、wce、Invoke-WCMDump、vaultcmd(win系统自带)
WMIC自动收集
使用WMIC自动收集,winxp低权限用户不允许访问WMIC,Windows7以上版本的低权限用户允许访问WMIC,下载地址:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
WMIC脚本内容如下:
1 | for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A" |
执行结果以列表的形式列出服务、用户、用户组、网络接口、硬盘、补丁、自启动程序、软件、操作系统和时区的详细信息:

2、查询当前权限
查看当前用户权限
1 | whoami |

查询whoami可能返回三种结果:本地普通用户、本地管理员、域内用户。
对于本地普通用户,只能查询本机的相关信息;本地管理员和域内用户可以查询域内相关信息。
域内用户查询原理是域内所有查询都通过域控制器实现,基于LDAP协议,域内相关信息查询需要经过权限认证。当域用户执行查询命令时,会使用Kerberos协议认证。
本地管理员Administrator权限可提升为Ntauthority或System权限,在域内除普通用户外,所有主机都有一个机器用户,用户名是机器名+”$“。在本质上,机器的system用户对应的就是域内的机器用户,所以使用System权限可以运行域相关查询命令。简单来说就是System权限能查询域内相关信息,而Administrator可直接提权为System。
获取域SID
可以查询当前用户SID和域的SID
1 | whoami /all |

查询指定用户详细信息
1 | net user username /domain |

3、判断是否存在域
域内一般控制了大量的主机,所以进入内网后重要的一步也是寻找域。
判断所控主机是否在域内,采用以下方法。
ipconfig命令判断是否在域内
查看网络配置信息,如果有域会有主DNS后缀和DNS服务器,主DNS后缀没有的一定不在域内。
1 | ipconfig /all |

Systeminfo判断是否在域内
systeminfo查询结果域显示WORKGROUP就不在域内,否则在域内。
1 | systeminfo | findstr /B /C:"域" |


查询当前登录域和登录用户信息
1 | net config workdstation |

通过时间服务器判断
域服务器一般会同时为时间服务器
1 | net time /domain |
不存在域,会返回找不到域控制器:

存在域,并且当前用户是域用户,会返回时间:

存在域但当前用户不是域用户,会显示”发生系统错误5“。
4、探测域内存活主机
内网存活主机探测非常重要,方便对存活主机进行下一步渗透拿下。在白天和晚上分别探测 方便进行对比。
以下方式推荐优先使用NetBIOS和ICMP。
利用NetBIOS探测
NetBIOS,为网上基本输入输出系统(英语:Network Basic Input/Output System)的缩写,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。严格来说,NetBIOS不是一种网上协议,而是应用程序接口(API)。
几乎所有的局域网都在NetBIOS基础上工作。NetBIOS提供了名称服务,包括名称登录与名称解析,主要用于局域网中的计算机互访。其工作流程是正常的机器名解析查询应答过程,推荐优先使用该方法探测。
netscan命令行工具在内网使用时要先上传到目标主机,支持linux和windows平台。扫描速度比较快,可以反馈出IP、域名和主机名、开启的服务。
1 | nbt.exe 192.168.1.1/24 |

利用ICMP探测
对内网IP执行ping命令来探测存活主机。
1 | for /L %I in (1,1,254) DO @ping -w 1 -n 1 1.1.1.%I | findstr "TTL=" |

利用ARP探测
可以用arp-scan、Empire的arpscan模块、Nishang的Invoke-ARPScan.ps1。
arp-scan:
1 | arp.exe -t 1.1.1.1/24 |

Empire的arpscan模块:
1 | usemodule situational_awareness/network/arpscan |
Nishang的Invoke-ARPScan.ps1:
1 | powershell -exec bypass -Command "& {Import-Module C:\Users\29176\Desktop\tools\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 1.1.1.1/24}" |

5、域内端口 服务信息收集
通过常规TCP/UDP端口扫描探测内网
ScanLine是一款经典的端口扫描工具,可以在所有版本Windows操作系统中使用,可以探测存活主机和端口
1 | scanline -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,5432 -u 53,161,137,139, -O c:\results.txt -p 1.1.1.1-254 /b |

telnet命令
1 | telnet DC 3389 |
S扫描器
1 | s.exe TCP 1.1.1.1 1.1.1.2 21,22,80,89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,5432,53,161,137,139 256 /Banner /save |
Metasploit扫描
1 | /auxiliary/scanner/portscan/tcp |
Nishang的Invoke-PortScan模块
1 | Invoke-PortScan -StartAddress 1.1.1.1 EndAddress 1.1.1.254 -ResolveHost |
6、收集域内基础信息
确定了主机所在网络有域并且主机在域内,可以进一步收集域内信息。
查询域
1 | net view /domain |

查询域内所有计算机
1 | net view /domain:SERVER08 |

查询域内所有用户组列表
1 | net group /domain |

获取所有域成员计算机列表
1 | net group "domain computers" /domain |

获取域密码信息
1 | net accounts /domain |

获取域信任消息
1 | nltest /domain_trusts |

7、查找域控制器
查看域控的机器名
1 | nltest /DCLIST:SERVER08 |

查看当前时间
1 | net time /domain |

查看域控制器组
1 | netdom query pdc |

8、获取域内用户和管理员信息
查询所有域用户列表
1 | # 通过向DC进行查询,其中krbtgt用户不仅可以创建票据授权服务(TGS)的加密密钥,还可以实现多种域内权限持久化方法 |

查询管理员相关信息
1 | # 查询本地管理员组用户 |

定位域管理员
如果在Windows域中已经获得了普通用户权限,希望在域内横向移动,需要知道域内用户登录位置、它是否是任何系统的本地管理员、它所属的组、是否有权访问文件共享等。枚举主机、用户和组,有助于更换的了解域的布局。
常用域管理员定位工具有psloggedon.exe、PVEFindADUser.exe、netsess.exe以及hunter、NetView等,在Powershell中,最常用的是PowerView。
9、查找域管理进程
在渗透过程中,一个典型的域渗透提权过程,通常围绕着收集明文凭据或者通过mimikatz提权等方法,在获取了管理员权限的系统中寻找域管理员登录进程,进而收集域管理员的凭据。如果内网环境复杂,渗透人员无法立即在拥有权限的系统中获得域管理员进程,那么通常可以采用以下方法:在跳板机直接跳转,直至获取域管理员权限,同时进行一些分析工作,进而找到渗透测试的路径。
本机检查
列出本机的所有有进程及进程用户
1 | tasklist /v |

查询域控制器的域用户会话
在域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理会话系统列表。
1 | # 查询域控列表 |
10、Linux主机信息收集
参考:https://blog.csdn.net/qq_45226339/article/details/105663902
操作系统信息收集
发行版本
1 | cat /etc/issue |
目标操作系统内核、多少位
1 | cat /proc/version |
环境变量
1 | /etc/profile |
运行的服务和进程
1 | ps -ef |
安装的程序
1 | ls -alh /usr/bin |
定时任务
1 | crontab -l |
从文件中获取用户、密码信息
1 | grep -i user [filename] |
网络相关信息
网络配置和端口监听
1 | bin /ifconfig -a |
与哪些主机在通讯?
1 | lsof -i |
用户及敏感信息收集
1 | id |
可能存在密码的文件?
1 | cat /var/apache2/config.inc |
历史记录
1 | cat ~/.bash_history |
私钥
1 | cat ~/.ssh/authorized_keys |