内网渗透基础与信息收集
内网渗透基础
什么是内网?
内网就是我们平常说的局域网(Local Area Network,LAN),是指在某一区域内由多台计算机互联成的计算机组。
也就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组。它可以是邻居之间的2台电脑,也可以是一幢100层大楼里的1000台电脑。局域网可以是独立封闭运行的,也可以是和外网相连接的。
工作组
有时候一个局域网中可能存在成百上千的电脑,为了更方便地使用这些电脑,就需要将这些电脑进行分组处理,于是就产生了**工作组(Work Group)**的概念。
例如:将运维安全部门的1000台计算机根据它的功能分成运维组和安全组,但同时这1000台计算机还是对等的
工作组就像一个可以自由进入和退出的社团,方便同组的计算机互相访问。没有集中管理作用,工作组所有计算机都是平等的
域
当部门管理员想设置一个可以在运维安全部门的1000台计算机上登录和访问资源的账户时,难道要一台计算机一台计算机的去设置账户吗?这也太麻烦了,且不说可能计算机不止1000台。这时候就需要我们的域派上用场
域(Domain)是一个有安全边界的计算机集合。 可以简单的把域理解成升级版的工作组,但有一个严格的集中管理控制机制。
域控制器(Domain Controller,DC)相当于一个单位的门禁系统。DC中存在由这个域的账户、密码、属于这个域的计算机等信息构成的数据库,DC是整个域的通信枢纽。
域环境:单域、父域和子域、域树(tree)、域森林(forest,林)、DNS域名服务器
- 单域:就是单个的域,但在一个域内,一般至少要两台域服务器,一台作为DC,另一台用来当备份DC,避免DC瘫痪了,无法正常使用
如果部门的业务没有复杂的要求,一个单域就能满足要求
- 父域和子域:两个域在默认情况下不能互通,但是在做了全局组之后,父域用户可以登录子域,向下继承
出于管理需求或特定的安全策略,有时候需要用到父域和子域搭配使用,比如安全部需要一个不同于其他部门的特定的安全策略,就可以把它划到子域
- 域树:多个域通过父域和子域信任关系建立的集合。一个域树中,一个父域可以包含多个子域,如果两个同级的域需要相互访问,就得建立信任关系(Trust Relation)。
- 域森林:多个域树通过建立信任关系组成的集合。
当公司需要兼并的时候,被兼并公司的域树不能直接挂在兼并公司的域树下,就需要建立信任关系来构成域森林
- 域名服务器:用于实现域名(Domain Name)和与之相对应的IP地址转换的服务器。
需要注意的是:由于DNS服务器和域控制器通常配置在同一台机器上,所以在渗透测试中大都是通过寻找DNS服务器来确定域控制器的位置
活动目录
活动目录(Active Directory,AD)是域环境中提供目录服务的组件。 目录用于存储有关网络对象(如用户、组、计算机、共享资源、打印机和联系人等)的信息。目录服务是帮助用户快速准确的从目录中查找到他所需要的信息的服务。其中将层次结构的目录及索引信息存储在数据库中,就是活动目录数据库(AD库)。
把内网看成一本字典,内网中的各种关系和资源就是字典内容,活动目录就是索引。
管理层次分明:A集团(域森林) -> 子公司(域树) -> 部门(域) -> 员工
AD相当于树干
活动目录的功能
- 帐号集中管理:所有帐号均存储在服务器中,以便执行命令和重置密码等。
- 软件集中管理:统一推送软件,统一安装网络打印机等。利用软件发布策略分发软件,可以让用户自由选择安装软件。
- 环境集中管理:利用AD可以统一客户端桌面,IE,TCP/IP等设置。
- 增强安全性:统一部署杀毒软件和病毒扫描任务、集中化管理用户的计算机权限、统一制订用户密码策略等。可以监控网络,对资料进行统一管理。
- 更可靠,更少的宕机时间:例如:利用AD控制用户访问权限,利用群集、负载均衡等技术对文件服务器进行容灾设定。网络更可靠,岩机时间更少。
活动目录就是微软提供的统一管理基础平台。ISA、Exchange、SMS都依赖它
域控制器DC和活动目录AD区别
DC的本质是一台计算机,AD的本质是提供目录服务的组件。
如果内网中的一台计算机上安装了AD,它就变成了DC(用于存储AD库的计算机)。
安全域的划分
安全域划分的目的是将一组安全等级相同的计算机划入同一个网段内, 在网络边界上通过防火墙来实现对其他安全域的NACL(网络访问控制策略), 使得其风险最小化。
一般安全域划分为:DMZ和内网。也就是图中IDS所在的绿色框(DMZ)和蓝色方框(内网)
DMZ(Demilitarized Zone 非军事化区)称为隔离区。 是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区。
DMZ不能访问内网、DMZ不能访问外网(此策略有例外,如mail服务)。
内网又可以划分为:办公区和核心区。办公区会安装防病毒软件、主机入侵检测产品(HIDS)等,运维使用堡垒机(跳板机)来统一管理用户的登陆行为。
而核心区储存着企业最重要的信息数据,具有着严密的保护。一般只有运维和it主管才能直接访问
域内计算机分类
域控制器、成员服务器、客户机和独立服务器。字面意思,简单理解就可以了
域内权限
域内置组分为:域本地组(Domain Local Group)、全局组(Global Group)、通用组(Universal Group)
- 域本地组:来自所有域,只能访问本域资源(Domain Local Group)<域本地组:来自全林用于本域>
- 全局组:来自本域,能访问所有建立信任关系的域的资源(global Group)<全局组:来自本域用于全林>
- 通用组:来自所有域,能访问所有域的资源(Universal Group),该组成员不是保存在各自的域控制器,而是保存在全编目录(GC)<通用组:来自全林用于全林>
- A-G-DL-P策略:A(account)用户账号,G(global Group)全局组,U(Universal Group)通用组,DL(Domain Local Group)域本地组,P(Permission)资源权限.
管理员通过配置安全组访问权限,就可以为所有加入安全组的用户账号配置同样的权限。
全局组相当于域账号,可以在全局使用,域本地组相当于本地账号,只能本机上使用。
将用户张三(域帐号Z3)加入到域本地组administrators中,并不能使Z3对非DC的域成员计算机有任何特权,但若加入到全局组Domain Admins中,张三就是域管理员了,可以在全局使用,对域成员计算机是有特权的。
A-G-DL-P策略, 是指将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限。 在A-G-DL-P策略形成以后,当给一个用户某一个权限的时候,只要把这个用户加入到某一个域本地组就可以了。
有两个域,A和B,A中的5个财务人员和B中的3个财务人员都需要访问B中的“FINA”文件夹。这时,可以在B中建一个DL(域本地组),因为DL的成员可以来自所有的域,然后把这8个人都加入这个DL,并把FINA的访问权赋给DL。这样做的坏处是什么呢?因为DL是在B域中,所以管理权也在B域,如果A域中的5 个人变成6个人,那只能A域管理员通知B域管理员,将DL的成员做一下修改,B域的管理员太累了。这时候,我们改变一下,在A和B域中都各建立一个全局组(G),然后在B域中建立一个DL,把这两个G都加入B域中的DL中,然后把FINA的访问权赋给 DL。哈哈,这下两个G组都有权访问FINA文件夹了,是吗?组嵌套造成权限继承嘛!这时候,两个G分布在A和B域中,也就是A和B的管理员都可以自己管理自己的G啦,只要把那5个人和3个人加入G中,就可以了!以后有任何修改,都可以自己做了,不用麻烦B域的管理员!这就是A-G-DL-P。
常用域本地组权限:
Administrators(管理员组),最重要的权限; Remote Desktop Users(远程登录组)。
- 常用全局组权限: Domain Admins(域管理员组),最最重要的权限,一般来说域渗透是看重这个; Domain Users(域用户组)。
- 常见通用组权限: Enterprise Admins(企业系统管理员组)、 Schema Admins(架构管理员组),也是最最重要的权限。
内网信息收集
信息收集一直是渗透测试中关键的一步,只有尽可能完整地收集到信息,才能为后面进一步渗透创造更多的机会,同样在内网渗透中信息收集也至关重要。
当我们进入内网后,面对的是一无所知的新环境,所以需要先对环境进行一些初步判断和信息收集。一般流程如下:
- 主机信息搜集
- 域内存活主机探测
- 域内端口扫描
- 域内用户和管理员权限的获取
- 等等
搜集本机信息
通常需要收集网络配置信息、操作系统及软件的信息、本机服务信息、进程列表、启动程序信息、计划任务、主机开机时间、用户列表、连接会话、端口列表、补丁列表、本机共享列表、路由表和Arp缓存表、防火墙相关配置、代理配置情况、远程连接服务等。
WMIC(Windows Management Instrumentation Command-Line,Windows管理工具命令行)是最有用的Windows命令行工具。Windows7以上版本的低权限用户才允许访问WMIC并执行相关查询操作。使用WMIC,不仅可以管理本地计算机,还可以管理同一域内的所有计算机(需要一定权限),而且在被管理的计算机上不可事先安装WMIC(但大多数 Windows 系统自带 wmic 命令)。
需要注意的是:安全狗禁止net
,360也会弹窗,可以尝试net1
,或者使用wmic
,如net user -> wmic useraccouat
设置计划任务at
在Win8已经弃用,取而代之的是schtasks
。
查询网络配置信息
1 |
|
查询操作系统及软件信息
查询操作系统和版本信息
1 |
|
1 |
|
若是中文版操作系统:
1 |
|
查询系统体系结构(感觉用处不大)
1 |
|
查看安装的软件及版本等信息
1 |
|
查询本机服务信息
1 |
|
查询进程列表
1 |
|
查询开机自启任务及计划任务信息
1 |
|
查询用户列表、开机时间
查看本机用户列表
1 |
|
获取本地管理员信息
1 |
|
查看当前在线用户
1 |
|
查询开机时间
1 |
|
查询端口、补丁、本机共享列表
查询端口列表
1 |
|
查看补丁列表
1 |
|
查询本机共享列表
1 |
|
查询路由表及所有可用接口的ARP缓存表
1 |
|
防火墙相关配置
关闭防火墙
1 |
|
查看防火墙配置
1 |
|
修改防火墙配置
1 |
|
自定义防火墙日志的存储位置
1 |
|
查询代理配置情况和开启远程连接服务
查询代理配置情况
1 |
|
查看远程连接端口
1 |
|
查询当前权限
有三种情况:本地普通用户、本地管理员用户、域内用户。
如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息;而本地管理员用户和域内用户可以查询域内信息。
域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无需额外输入账号和密码。
本地管理员Administrator权限可以直接提升为System权限(使用PsExec等),因此,在域中,除普通用户外,所有的机器都有一个机器用户(用户名为机器名加上$)。在本质上,机器的system用户对应的就是域里面的机器用户。所以,使用System权限也可以运行域内的查询命令。
查看当前权限
1 |
|
获取域sid
1 |
|
查询指定用户的详细信息
1 |
|
判断是否存在域
- 域控制器和DNS服务器是否在同一台服务器上?(使用nslookup反向解析)
1 |
|
查看到ip,再通过反向解析域名ip地址
1 |
|
- 通过查看系统详细信息
1 |
|
systeminfo
中的域即域名、登陆服务器指的是域控制器。如果“域”为“WORKGROUP”则表示当前服务器不在域内
- 查询当前登录域及登录用户信息
1 |
|
“工作站域DNS名称”为域名(如果为“WORKGROUP”表示当前为非域环境)
“登陆域”用于表示当前是域用户还是本地用户
- 判断主域(域服务器通常会同时作为时间服务器使用)
1 |
|
探测存活主机
具体有这么些方法,但我还是觉得,这里就不多赘述了,到时候把隧道搭起来,用fscan比较方便
- netbios-nbt.exe
- icmp-ping
- arp-arpscan
- tcp,udp-scanline
例如目标ip为192.168.1.1(记得得先代理好流量)
1 |
|
扫描域内端口
端口的Banner信息,使用nc、telnet、nmap可以快速获取。
但我还是想说,fscan启动!
1 |
|
收集域内信息
域内查询命令在本质上都是通过LDAP协议到域控制器上进行查询的。
在默认情况下,Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限。
系统自带常见用户身份:
- Domain Admins :域管理员
- Domain Computers :域内机器
- Domain Controllers: 域控制器
- Domain Guest :域访客,低权限
- Domain Users:域用户
- Enterprise Admins:企业系统管理员用户
查询域
1 |
|
查询域内所有计算机(以域hack为例)
1 |
|
查询域内所有用户组列表
1 |
|
查询所有域成员计算机列表
1 |
|
获取域密码信息
1 |
|
获取域信任信息
1 |
|
查找域控制器
- 通过查看域控制器的机器名
1 |
|
xxxx为域名
- 通过查看域控制器的主机名
1 |
|
- 通过查看当前时间
通过时间服务器为主域控制器
1 |
|
- 查看域控制器组
1 |
|
1 |
|
获取域内的用户和管理员信息
域内Domain Admins组中的用户默认为域内机器的本地管理员用户。
查询所有域用户列表
向域控制器进行查询
1 |
|
获取域内用户的详细信息
1 |
|
查看存在的用户
1 |
|
查询本地管理员组用户
1 |
|
查询域管理员用户组
查询域管理员用户
1 |
|
查询管理员用户组
1 |
|
定位域管理员
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限。也就是说,当计算机被添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中。因此,域管理员组的成员均可访问本地计算机,且具备完全控制权限。
定位域管理员的常规渠道:一是日志,二是会话
上工具
- psloggedon.exe
1 |
|
具体用法网上找都有
- netview.exe
- 等等
查找域管理进程
在获取了管理员权限的系统中寻找域管理员登录进程,进而搜集域管理员的凭据,为之后的域权限提示做准备。
渗透测试人员在某个内网环境中获得了一个域普通用户的权限,首先通过各种方法获得当前服务器的本地管理员权限,然后分析当前服务器的用户登录列表及会话信息,知道哪些用户登陆了这台服务器。如果渗透测试人员通过分析发现,可以获取权限的登录用户都不是域管理员账户,同时没有域管理员组的用户登录这台服务器,就可以使用另一个账号并寻找该账号在内网的哪台机器上具有管理权限,再枚举这台机器上的登录用户,然后继续进行渗透测试,直至找到一个可以获取域管理员权限的有效路径为止。
域管理员模拟方法:如果已经拥有一个meterpreter会话,就能使用Incognito来模拟域管理员或添加域管理员
本机检查
获取域管理员列表
1 |
|
列出本机所有进程及进程用户
1 |
|
查询域控制器的域用户会话
查询域控制器列表
1 |
|
收集域管理员列表
1 |
|
收集所有活动域的会话列表
1 |
|
查询远程系统中的运行任务
扫描远程系统的NetBIOS信息
内网划分及拓扑结构
域分析工具:BloodHound 目前还没用过,不知道现在过时没有,不过看介绍是挺方便了,能够节省很长时间
分析目标服务器所使用的的Web服务器、后端脚本、数据库、系统平台等。
常见Web架构:
- ASP + Access + IIS 5.0/6.0 + Windows Server 2003
- ASPX + MSSQL + IIS 7.0/7.5 + Windows Server 2008
- PHP + MySQL + IIS、Apache、Nginx
- JSP + MSSQL、ORACLE + Tomcat