声明
由于传播、利用本作者所提供信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,本作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并且致歉。谢谢!
✍🏻作者简介:致力于网络安全领域,目前作为一名学习者,很荣幸成为一名分享者,最终目标是成为一名开拓者,很有趣也十分有意义
🤵♂️ 个人主页: @One_Blanks
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
X:当渗透测试进入内网后,第一件事就是对内网环境进行信息收集,然后找到域控服务器,方便渗透测试的进一步展开。
文章目录
本机信息收集
查询网络配置
ipconfig /all
查询用户列表
net user – 查看本机用户列表
net localgroup Adminitrators – 本机管理员(通常含有域控用户)
query user || qwinsta – 查看当前在线用户
查询进程列表
tasklist /v
wmic process list brief
- 两个命令都是查询计算机进程任务的cmd命令
查询操作系统及安装软件版本信息
- 获取操作系统和版本信息
systeminfo
或者进行一个信息筛选,但是不如直接一把梭直接显示出来简便
systeminfo | findstr /B /C:“OS Name” /C:“OS Version”
systeminfo | findstr /B /C:“OS 名称” /C:“OS 版本”
- 查看安装软件以及其版本
wmic product get name,version
powershell “Get-WmiObject -class Win32_Product | Select-Object -Property name,version”
两个命令的输出结果是一样的
查看端口列表
netstat -ano
- 可以根据其开放的端口分析这台计算机在内网中的作用,但更多的是利用本地信息收集的所有内容进行一个综合的判断
查询补丁列表
systeminfo
wmic qfe get caption,description,hotfixid,installedon
查询本机共享
net share
wmic share get name,path,status
查询防火墙配置
- 关闭防火墙
A. Windows Server 2003 系统及以前版本
netsh firewall set opmode disable
B. Windows Server 2003 系统以后版本
netsh advfirewall set allprofiles state off
- 查看配置
netsh firewall show config
- 自定义防火墙日志存储位置
netsh advfirewall set currentprofile logging filename “C:\windows\temp\fw.log”
查询并开启远程连接服务
- 查看RDP服务的真实端口(有的时候会改为别的端口)
REG QUERY “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\winstations\RDP-Tcp” /v portnumber
0xd3d是十六进制,其十进制就是3389端口
- 查看是否开启RDP远程服务
REG QUERY “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections
命令执行后,会显示查询结果。如果结果中显示 fDenyTSConnections
的值为 0x0
(或者数值 0
),则表示 RDP 远程连接服务已开启;如果值为 0x1
(或者数值 1
),则表示 RDP 远程连接服务已关闭
- 开启RDP远程服务(需要管理员权限)
REG ADD “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f
REG ADD
:这是用于添加或修改注册表项的命令。"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"
:这是注册表中的路径,指向与终端服务器(包括 RDP 服务)相关的设置。/v fDenyTSConnections
:/v
表示要操作的注册表值(Value)的名称。fDenyTSConnections
这个值用于控制是否允许 RDP 连接。当该值为 0 时,允许 RDP 连接;为 1 时,禁止 RDP 连接。/t REG_DWORD
:/t
表示数据类型,REG_DWORD
是一种双字节的数据类型,用于存储整数等数值。/d 0
:/d
表示要设置的数据值。这里将fDenyTSConnections
的值设置为 0,即允许 RDP 连接。/f
:表示强制写入,即使目标注册表项已经存在,也会覆盖其原有值。
第一步:获取服务名称(因为并不知道服务的名称,所以先使用该命令进行获取)
wmic service where “Caption like ‘%Remote Desktop%’” get Name
第二步:启动服务(管理员权限)
net start 服务名称
查询当前权限
whoami
- 本地普通用户
-
本地管理员用户
-
域内用户
- 域内管理员用户
域内信息收集
判断是否有域
ipconfig /all
systeminfo
nslookup hacker.testlab – 反向查询命令
net config workstation
net time /domain –
域控在内网中一般也作为时间处理器
三种情况:
1.存在域,当前用户不是域用户
2.存在域,当前用户是域用户
3.不存在域
域内存活主机探测(白天探测一遍、半夜探测一遍)
- 利用icmp协议快速探测内网
ping命令:
> for /L %i in (1,1,254) do @ping -w 1 -n 1 192.168.1.%i | findstr "TTL="
直接探测出两台存活主机
-
VBS脚本:
-
利用arp扫描完整内网
- arp-scan工具
- Invoke-ARPScan.ps1
- Empire中的arpscan模块
- 利用常规TCP/UDP端口扫描探测内网
工具:scanline
命令:sl -h -t 22,80-89,110,389,445,3389,8080,3306 -u 53,161,137,139 -O c:\windows\temp\sl_res.txt -p 192.168.1.1-254 /b
总之
,我们需要注意探测主机的时候我们不只可以使用一种协议,我们可以使用不同的协议去探测,一直探测到完整的内网存活主机,但是要注意探测流量不要过大,避免触发告警。
域内端口扫描
工具:nmap 、masscan、Metasploit
以namp为例:(直接探测端口服务、版本号)
- 端口扫描
nmap -sT --min-rate 10000 -p- 127.0.0.1 -oA nmapsc/ports
- 详细信息扫描
nmap -sT -sV -sC -O -p22,80,443 127.0.0.1 -oA nmapsc/detail
- udp扫描
namp -sU --top-ports 20 127.0.0.1 -oA nmapsc/udp
- 脚本扫描
nmap --script=vuln -p22,80,443 127.0.0.1 -oA nmapsc/vuln
定位域管理员*****
- 常规定位管理员的方法:
- 日志
日志指的是本机机器的管理员日志,可以使用脚本或wevtutil导出查看
- 回话
会话是域内每个机器的登录回话,可以匿名查询,无需权限,可以使用netsess.exe或powerview等工具进行查询
定位域管理员工具
psloggedon.exe
PVEFindADUser.exe
netview.exe
netsess.exe
Nmap的NSE脚本
PowerView脚本-Invoke-UserHunter
Empire下user_hunter模块
查找域管理进程
- A.本机检查
- 获取域管理员列表
net group “Domain Admins” /domain
- 查看本机所有进程
tasklist /v
- 交叉检查(找到域管理进程)
- B.查询域控制器的域用户会话
- 收集域控制器列表
net group “Domain Controllers” /domain
- 收集域管理员列表
net group “Domain Admins” /domain
- 使用Netsess.exe查询每个域控制器,收集所有活动域回话的列表
Netsess.exe -h
- 将域管理员列表与活动会话列表交叉引用,以确定哪些IP地址具有活动域令牌
- C.扫描远程系统上运行的任务
- 收集域管理员的列表
- 运行脚本
for /f %i in (ips.tst) do @echo [+] %i && @tasklist /v /v %i /u user /p password 2>nul >output.txt && for /f %n in (name.txt) do @type output.txt |finder %n >nul && echo [!] %n was found running a process on %i && pause
- D.扫描远程系统上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
PS(PowerShell)收集域内信息
- get-executionpolicy (查看执行策略)
- set-executionpolicy [策略方式] (修改执行策略)
Restricted(默认):不允许任何脚本运行,能防止恶意脚本执行,主要用于安全环境。
AllSigned:要求所有脚本和配置文件都由受信任的发布者签名,保证脚本来源可信。
RemoteSigned:本地创建的脚本可以运行,从网络下载的脚本需要有数字签名才能运行,平衡安全性和便利性。
Unrestricted:可以运行所有脚本,安全性较低,用于受信任的环境。
PowerView脚本
可以直接去github中搜索下载
import-moudule .\powerview.ps1 --导入脚本
一、用户相关信息收集
- 获取域用户列表
Get - NetUser
:此命令用于获取当前域中的用户信息。它会返回诸如用户名、用户描述、用户上次登录时间等详细信息。例如,你可以通过运行这个命令来查看域中所有用户账户的基本情况,帮助识别潜在的目标账户。Get - NetUser - Username <specific_user>
:如果你只想获取特定用户(将<specific_user>
替换为实际用户名)的信息,这个命令就很有用。它可以让你深入了解某个用户账户的详细属性,比如该用户所属的组、是否被禁用等。
- 查找具有特定权限的用户
Find - LocalAdminAccess
:用于查找在本地计算机上具有管理员权限的用户。这在评估系统安全态势时非常重要,因为这些用户可能有较高的权限来执行敏感操作。例如,在渗透测试场景中,攻击者可能会关注这些具有本地管理员权限的用户,以寻找进一步横向移动的机会。
二、组相关命令
- 获取域组列表
Get - NetGroup
:返回当前域中的组信息,包括组名、组描述等。通过这个命令,你可以了解域中的组织结构,比如安全组和通讯组的分布情况,有助于分析访问控制策略。Get - NetGroup - GroupName <specific_group>
:用于获取特定组(将<specific_group>
替换为实际组名)的详细信息,例如该组的成员列表等。这可以帮助你确定哪些用户属于特定的安全组,从而推断他们可能拥有的权限。
- 获取组内成员信息
Get - NetGroupMember - GroupName <group_name>
:可以获取指定组(<group_name>
为组名)内的成员信息。这在评估权限分配和用户角色时很有用,比如你可以查看某个管理员组中有哪些用户,从而确定潜在的高权限账户。
三、计算机相关命令
- 获取域内计算机列表
Get - NetComputer
:获取当前域内的计算机信息,包括计算机名、操作系统版本等。在网络管理和安全审计中,这个命令可以帮助你了解网络中的资产情况,比如有多少台计算机、它们的系统配置等。Get - NetComputer - OperatingSystem <os_name>
:可以筛选出运行特定操作系统(将<os_name>
替换为操作系统名称,如Windows Server 2019
)的计算机。这对于针对性的系统更新、安全漏洞扫描等任务很有帮助。
- 检查计算机的共享资源
Get - NetShare - ComputerName <computer_name>
:用于查看指定计算机(<computer_name>
为计算机名)上的共享资源。这可以帮助你发现潜在的信息泄露风险,例如是否有敏感文件通过共享文件夹暴露在网络中。
域渗透分析工具BloodHound
安装BloodHound所需环境
- 安装JDK
- 安装Neo4j
- 启动Neo4j数据库服务器
- 下载BloodHound (GitHub)
图形化界面,需要什么信息直接点就可以
结果也是利用图形进行输出显示。