《内网安全攻防:渗透测试实战指南》读书笔记:内网信息收集

Posted 思源湖的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《内网安全攻防:渗透测试实战指南》读书笔记:内网信息收集相关的知识,希望对你有一定的参考价值。

目录

前言

本篇继续阅读学习《内网安全攻防:渗透测试实战指南》,是第二章内网信息收集,主要介绍了当前主机信息搜集、域内存活主机探测、域内端口扫描、域内用户和管理员权限的获取、如何获取域内网段划分信息和拓扑架构分析等,并介绍了域分析工具BloodHound的使用(本篇笔记没记该工具)

  • 我是谁?——对当前机器角色的判断
  • 这是哪?——对当前机器所处网络环境的拓扑结构进行分析和判断
  • 我在哪?——对当前机器所处区域的判断

一、收集本机信息

1、手动搜集

(1)查询网络配置

ipconfig /all

(2)查询操作系统及软件的信息

查看操作系统和版本信息

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
//适用于英文的操作系统,中文的:
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

查看系统体系结构

echo %PROCESSOR_ARCHITECTURE%

查看安装的软件及版本、路径等

wmic product get name,version

Powershell版本:

powershell.exe "Get-WmiObject -class Win32_Product | Select-Object -Property name,Version"

(3)查询本机服务信息

wmic service list brief

(4)查询进程列表

tasklist
//或者
wmic process list brief

常见杀毒软件进程如下:

360sd.exe
360tray.exe
ZhuDongFangYu.exe
KSafeTray.exe
SafeDogUpdateCenter.exe
McAfee McShield.exe
egui.exe //NOD32
AVP.EXE  //卡巴斯基
avguard.exe		//小红伞
bdagent.exe		//BitDefender

(5)查看启动程序信息

wmic startup get command,caption

(6)查看计划任务

schtasks /query /fo LIST /v

(7)查看主机开机时间

net statistics workstation

(8)查询用户列表

net user
//获取本地管理员组成员:
net localgroup adinistrators
//查看当前再线用户
query user || qwinsta

(9)列出或断开本地计算机与所连接的客户端之间的会话

net session

(10)查询端口列表

netstat -ano

(11)查询补丁列表

systeminfo

使用wmic命令查看安装在系统中的补丁:

wmic qfe get Caption,Description,HotFixID,InstalledOn

(12)查询本机共享列表

net share
//wmic:
wmic share get name,path,status

(13)查询路由表及所有可用接口的ARP缓存表

route print
arp -a

(14)查询防火墙相关配置

关闭防火墙

//windows server 2003之前
netsh firewall set opmode disable
//Windows server 2003之后
netsh advfirewall set allprofile state off

查看防火墙配置

netsh firewall show config

修改防火墙配置

  • windows server 2003之前允许指定程序全部连接
    netsh firewall add allowedprogram c:\\nc.exe "allow nc" enable
    
  • 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
    
    自定义防火墙日志的存储位置
netsh advfirewall set currentprofile logging filename "C:\\windows\\temp\\fw.log"

(15)查看代理配置情况

reg query "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"

(16)查询并开启远程连接服务

查看远程连接端口

reg query "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp" /V PortNumber
  • 在Windows server 2003中开启3389

    wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
    
  • 在Windows server 2008和2012中

    wmic /namespace:\\\\root\\cimv2\\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
    //修改注册表方式
    reg query "HKLM\\System\\CURRENT\\CONTROLSET\\CONTROL\\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
    

2、自动搜集

WMIC(Windows Management Instrumentation Command-Line,Windows管理工具命令行)是最有用的Windows命令行工具

  • Windows XP的低权限用户不允许访问WMIC
  • Windows7以上版本的低权限用户允许访问WMIC并执行相关查询操作
  • 不仅可以管理本地计算机,还可以管理同一域内的所有计算机(需要一定权限),而且在被管理的计算机上不可事先安装WMIC

书里提供了一个使用WMIC的脚本,执行上一节所有命令,并将结果写入html文件:

for /f "delims=" %%A in ('dir /s /b %WINDIR%\\system32\\*htable.xsl') do set "var=%%A"

wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html

3、Empire下的主机信息收集

Empire提供了用于收集主机信息的模块

查看本机用户、域组成员、密码设置时间、剪贴板内容、系统基本信息、网络适
配器信息、共享信息等:

usemodule situational_awareness/host/winenum
execute

有管理员权限的情况下,查看目标主机事件日志、应用程序控制策略日志、RDP登录信息、PowerShell脚本运行和保存的信息等:

usemodule situational_awareness/host/computerdetails

二、查询当前权限

1、查看当前权限

whoami /all

有三种情况:本地普通用户、本地管理员用户、域内用户

如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息;而本地管理员用户和域内用户可以查询域内信息。

域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无需额外输入账号和密码。

本地管理员Administrator权限可以直接提升为System权限(使用PsExec等),因此,在域中,除普通用户外,所有的机器都有一个机器用户(用户名为机器名加上$)。在本质上,机器的system用户对应的就是域里面的机器用户。所以,使用System权限也可以运行域内的查询命令。

2、查询指定用户的详细信息

net user xxx /domain

三、判断是否存在域

1、查看dns服务器

域控制器和DNS服务器是否在同一台服务器上?(使用nslookup反向解析)

ipconfig /all
//将查看到的DNS服务器用nslookup进行解析
nslookup dc.test.local

2、查看系统详细信息

systeminfo中的域即域名、登陆服务器指的是域控制器。

systeminfo | findstr /B /C:"登录服务器"
//如果结果不为"WORKGROUP"则主机为域主机

3、查询当前登录域及登录用户信息

net group workstation

4、判断主域

net time /domain
//命令用于查看域内时间,同时也可以查看域控制器

三种情况:

  • 错误5:存在域,但当前用户不是域用户
  • 显示信息:存在域,且当前用户是域用户
  • 找不到域控制器:不存在域

四、探测域内存活主机

1、NetBios快速探测

NetBIOS是局域网程序使用的一种API,为程序提供了请求低级别服务的统一的命令集。NetBIOS也是计算机的标识名,主要用于局域网中计算机的互访。

使用nbtscan(http://www.unixwiz.net/tools/nbtscan.html)

nbt.exe 192.168.1.0/20

2、使用ICMP探测

对每个IPping

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

3、ARP扫描

通过ARPscan工具扫描探测内网

arp.exe -t 192.168.1.0/20

Empire中的ARPscan模块

usemode situational_awareness/network/arpscan
execute

Nishang中的Invoke-ARPScan.ps1

powershell.exe -exec bypass -Command "& (Import-module c:\\windows\\temp\\Invoke-ARPscan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20)" >> c:\\windows\\temp\\log.txt
type c:\\windows\\temp\\log.txt

4、通过常规的TCP/UDP端口扫描探测内网

上传ScanLine进行扫描:

scanline -h -t 22,80-90,110,445 -u 53,161 -O c:\\windows\\temp\\log.txt -p 192.168.1.1-254 /b

五、扫描域内端口

需要关注的点:

  • 端口的Banner信息
  • 端口上运行的服务
  • 常见应用的默认端口

1、Telnet

命令类似于

telnet DC 22

2、S扫描器

S扫描器是早期的快速端口扫描工具

  • 支持大网段扫描
  • 特别适合运行在Windows Sever 2013以下版本的操作系统
  • 保存在result.txt中
S exe TCP 192.168.1.1 192.168.1.254 80,8080,3839 256./Banner /save

3、Metasploit端口扫描

Metasploit不用多说

use auxiliary/scanner/portscan/tcp
set ports 1-1000
set RHOST 192.168.1.1
set THREADS 10
run

4、其他

还可以使用如PowerSploit、NiShang的Invoke-portscan脚本
然后一些漏洞的信息可以参考

六、收集域内信息

本节的域内查询命令在本质上都是通过LDAP协议到域控制器上进行查询的,故需要域用户的权限,本地用户无法运行(除非是System用户)

在默认情况下,Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限

命令如下:

net view /domain
//查询域

net view /domain:HACKE
//查询域内所有计算机

net group /domain
//查询域内所有用户组列表

net group "domain computers" /domain
//查询所有域成员计算机列表

net accounts /domain
//获取域内密码信息

nltest /domain_trusts
//域内信任信息

七、查找域控制器

命令如下:

nltest /DCLIST:hacke
//查看域控制器的机器名

net time /domain
//查看当前时间

nslookup -type=SRV _ldap._tcp
//查看域控制器的主机名

net group "Domain Controllers" /domain
//查看域控制器组

netdom query pdc
//查看主控制器

八、获取域内用户和管理员信息

1、查询所有域用户列表

//查询所有域用户列表
net user /domain

//获取域内用户的详细信息
wmic useraccount get /all

//查看存在的用户,但是这个只能在域控或者安装了对应服务的主机使用,否则会提示命令不存在
dsquery user

//查找目录中的计算机
dsquery computer

//查询本地管理员组用户,域内Domain Admins组中的用户默认为域内机器的本地管理员用户
net localgroup administrators

2、查询域管理员用户组

//查询域管理员用户组
net group "domain admins" /domain

//查询管理员用户组
net group "Enterprise Admins" /domain

九、定位域管理员

在内网中,通常会部署大量的网络安全系统和设备,例如IDS、IPS、日志审计、安全网关、反病毒软件等。

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

在获取了Windows域中的普通权限在进行横向渗透时,需要知道域内用户登录的位置,是否是任何系统/主机的本地管理员,以及所属组等信息。能够使用的工具有:psloggedon.exe、PVEFindADUser.exe、netness.exe、hunter、NetView、PowerView。

1、psloggedon.exe

能够通过此工具查看远程计算机的资源,也就是说能够查看目标主机有哪些账户在登录状态

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psloggedon

psloggedon.exe \\\\DC

2、PVEFindADUser.exe

PVEFindADUser能够用于查找活动目录用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户:本地用户、通过RDP登录的用户、用于运行服务和计划任务的用户。(这个工具需要.NET 3.5)

Windows Server 2012安装.NET 3.5可能不成功,需要指定安装源:https://www.cr173.com/soft/921507.html

下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn

PVEFindADUser.exe <参数>

参数:

  • -h:显示帮助信息
  • -u:检查程序是否有新版本
  • -current[“username”]:如果仅指定了-current参数,将获取目标计算机上当前登录的所有用户;如果指定了用户名(Domain\\Usemame),则显示该用户登录的计算机
  • -last[“username”]:如果仅指定了-last参数,将获取目标计算机的最后的登录用户;如指定了用户名(Domain\\Usemame),则显示此用户上次登录的计算机。根据网络的安全策略,可能会隐藏最后的登录用户的用户名,此时使用该工具可能无法得到该用户名
  • -noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行ping命令
  • -taget:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主机;如果指定了此参数,则后跟由逗号分隔的主机名列表

3、NetView.exe

NetView是一个枚举工具,使用WinAPI枚举系统,利用NetSessionEnum找寻登陆会话,利用NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登录的用户。同时还能够查询共享入口和有价值的用户。

下载地址:https://github.com/mubix/netview

netview.exe <参数>

参数:

  • -h:显示帮助信息
  • -f aaa.txt:指定要提取主机列表的文件
  • -e aaa.txt:指定要排除的主机名的文件
  • -o aaa.txt:将所有输出重定向到指定的文件
  • -d aaa.txt:指定要提取主机列表的域°如果没有指定’则从当前域中提取主机列表
  • -g group:指定搜索的组名。如果没有指定,则在Domain Admins组中搜索
  • -c:对已找到的共享目录/文件的访问权限进行检查

4、PowerView

PowerView是—款PowerShell脚本,提供了辅助定位关键用户的功能

下载地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView

5、Empire

Empire中也存在此类型的脚本:

usemodule situational_awareness/network/powerview/user_hunter
execute

6、Nmap的NSE脚本

通过Nmap的NSE脚本获取远程机器的登陆会话

smb-enum-sessions.nse获取域内主机的用户登录会话,查看当前是否有用户登录,无需管理员权限

  • smb-enum-domains.nse对域控制器进行信息收集,可以获取主机信息用户、可使用密码策略的用户等
  • smb-enum-users.nse可以使用此脚本对域控进行扫描

下载地址:https://nmap.org/nsedoc/scripts/smb-enum-sessions.html

十、查找域管理进程

在获取了管理员权限的系统中寻找域管理员登录进程,进而搜集域管理员的凭据

一个假设情况:

渗透测试人员在某个内网环境中获得了一个域普通用户的权限,首先通过各种方法获得当前服务器的本地管理员权限,然后分析当前服务器的用户登录列表及会话信息,知道哪些用户登陆了这台服务器。如果渗透测试人员通过分析发现,可以获取权限的登录用户都不是域管理员账户,同时没有域管理员组的用户登录这台服务器,就可以使用另一个账号并寻找该账号在内网的哪台机器上具有管理权限,再枚举这台机器上的登录用户,然后继续进行渗透测试,直至找到一个可以获取域管理员权限的有效路径为止。

有一篇参考:五种寻找 “Domain Admin” 运行的进程的方法

1、本机检查

//获取域管理员列表
net group "Domain Admins" /domain

//列出本机的所有进程和进程用户
tasklist /v

2、查询域控的域用户会话

//查询域控列表
net group "Domain Controllers" /domain

//收集域管理员列表
net group "Domain Admins" /domain

//收集所有活动域的会话列表
netsess -h

然后可以用GetDomainAdmms(GDA)批处理脚本:

@echo off
cls

REM #######################################################
REM Author and Stuff
REM #######################################################
REM Script Name: Get Domain Admins (GDA)
REM Author: Scott Sutherland (nullbind) <scott.sutherland@netspi.com>
REM Publish Date: 12/5/2011

REM #######################################################
REM Shout Outz!
REM #######################################################
REM Thank you Mark Beard (pacmandu) <pacmandu@gmail.com> and humble-desser
REM for your updating the script to accept multipe part domain names.

REM #######################################################
REM Script Summary
REM #######################################################
REM The primary goal of this script is to locate systems 
REM running processes with a Domain Admin account so that penetesters
REM can conduct cleaner privilege escalation in Active Directory domains.  
REM This way pentesters dont have to spray shells all over the place with
REM metasploit+psexec+meterpreter and scrape for admin tokens. :)

REM #######################################################
REM Check  Variables 
REM #######################################################
REM - Target Domain
IF EXIST target del target
echo %userdnsdomain% | gawk -F "." "print $0" > target
SET /p target_domain= < target
DEL target


REM - Checking total number of words in a given domain name and save on totalvar 
IF EXIST num_words del num_words
echo %userdnsdomain% | gawk  -F "." " total = total + NF ; END  print total+0 " > num_words
SET /p totalvar= < num_words
DEL num_words

REM - Define all variables to be used later (e.g: var1=hacking, var2=lab, var3=local)
IF EXIST domainname del domainname
FOR /L %%G IN (1,1,%totalvar%) DO (echo %userdnsdomain% | gawk -F "." "print $%%G" > %%G
SET /p var%%G= < %%G
gawk "BEGIN  while (a++<1) s=s \\"dc=%%var%%G%%\\"; print s " >> domainname
DEL %%G )

REM - Parsing the domain variables to be insert into domain_parameters (e.g: dc=%var1%,dc=%var2%,dc=%var3%)
IF EXIST domainname_var del domainname_var
gawk "NR==1x=$0;nextNFx=x\\",\\"$0ENDprint x" domainname > domainname_var
DEL domainname

REM - Fix parsing issues
IF EXIST domainname_var2 del domainname_var2
SET /p temp_var= < domainname_var
@echo %temp_var% | sed "s/'//" > domainname_var2
SET /p domain_parameter= < domainname_var2
DEL domainname_var 
DEL domainname_var2
 
REM #######################################################
REM - Preparing arguments passed by "-c" (custom) flag 
REM #######################################################

IF EXIST c_target del c_target
@echo %2 > c_target
SET /p c_target_domain= < c_target
DEL c_target

IF EXIST c_num_words del c_num_words
@echo %2 | gawk  -F "." " total = total + NF ; END  print total+0 " > c_num_words
SET /p c_totalvar= < c_num_words
DEL c_num_words


IF EXIST c_domainname del c_domainname
FOR /L %%G IN (1,1,%c_totalvar%) DO (echo %2 | gawk -F "." "print $%%G" > %%G
SET /p c_var%%G= < %%G
gawk "BEGIN  while (a++<1) s=s \\"dc=%%c_var%%G%%\\"; print s " >> c_domainname
DEL %%G )

REM - Parsing the domain variables to be insert into domain_parameters (e.g: dc=%var1%,dc=%var2%,dc=%var3%)
IF EXIST c_domainname_var del c_domainname_var
gawk "NR==1x=$0;nextNFx=x\\",\\"$0ENDprint x" c_domainname > c_domainname_var
DEL c_domainname

REM - Fix parsing issues
IF EXIST c_domainname_var2 del c_domainname_var2
SET /p c_temp_var= < c_domainname_var
@echo %c_temp_var% | sed "s/'//" > c_domainname_var2
SET /p c_domain_parameter= < c_domainname_var2
DEL c_domainname_var 
DEL c_domainname_var2


if [%1] equ [] goto :SYNTAX
if [%1] equ [-h] goto :SYNTAX
if [%1] equ [-c] goto :CUSTOM
if [%1] equ [-a] goto :CURRENT
if [%1] equ [-l] goto :DUMPUSERSLDAP
if [%1] equ [-s] goto :DUMPUSERSSMB


goto :end
REM #######################################################

:SYNTAX
echo ------------------------------------------------------------
echo            GET DOMAIN ADMIN (GDA)
echo ------------------------------------------------------------
echo This script can be used to enumerate users that exist in 
echo the current machines domain and locate systems running 
echo processes as a domain admin
echo ------------------------------------------------------------
echo Syntax: 
echo -l Dump list of users from current domain using LDAP
echo -s dumps list of users from current domain using SMB (enum)
echo -c Get list of DA sessions - custom domain
echo -a Get list of DA sessions - local machine's domain
echo ------------------------------------------------------------
REM #######################################################
REM Check for require binaries
REM #######################################################
IF NOT EXIST NetSess.exe GOTO missingfiles
IF NOT EXIST grep.exe GOTO missingfiles
IF NOT EXIST gawk.exe GOTO missingfiles
IF NOT EXIST adfind.exe GOTO missingfiles
IF NOT EXIST uniq.exe GOTO missingfiles
IF NOT EXIST findpdc.exe GOTO missingfiles
goto end

:missingfiles
echo                  ERROR
echo ----------------------------------------
echo The following required files 
echo are missing:	
echo - NetSess.exe 
echo - grep.exe 
echo - gawk.exe  
echo - adfind.exe 
echo - uniq.exe
echo - findpdc.exe
goto :end

:DUMPUSERSLDAP
IF EXIST users_ldap.txt del users_ldap.txt
echo HERE:%domain_parameter%
@adfind -b %domain_parameter% -f "objectcategory=user" -gc | grep -i "sAMAccountName:" | gawk -F ":" "print $2" | gawk -F " " "print $1"| sort > users_ldap.txt
echo .
echo .
echo Results have been exported to users_ldap.txt
goto :END

:DUMPUSERSSMB
findpdc %userdomain% 1 >> pdc1.txt
gawk -F "\\\\" "print $3" pdc1.txt > pdc.txt
SET /P PDC= < pdc.txt
del pdc1.txt
del pdc.txt
enum.exe -N  %PDC% | grep -v "getting" | grep -v "up..." | grep -v "\\$" | grep -v "server:" | gawk -F " " "print $1" >> users_smb1.txt
enum.exe -N  %PDC% | grep -v "getting" | grep -v "up..." | grep -v "\\$" | grep -v "server:" | gawk -F " " "print $2" >> users_smb1.txt
enum.exe -N  %PDC% | grep -v "getting" | grep -v "up..." | grep -v "\\$" | grep -v "server:" | gawk -F " " "print $3" >> users_smb1.txt
enum.exe -N  %PDC% | grep -v "getting" | grep -v "up..." | grep -v "\\$" | grep -v "server:" | gawk -F " " "print $4" >> users_smb1.txt
cat users_smb1.txt | grep -v "^$" | uniq | sort > users_smb.txt
del users_smb1.txt
users_smb.txt

goto :end

:CUSTOM
IF EXIST datargets.txt del datargets.txt
REM ####################################################### 
REM GET LIST OF DOMAIN CONTROLLERS WITH ADFIND
REM ####################################################### 
@adfind -b -sc dcdmp %c_domain_parameter% -gc | grep -i ">name:" | gawk -F " " "print $2" | sort | uniq >> dcs.txt 2>&1
echo -----------------------------------------------
echo Getting list of Domain Controllers...
echo -----------------------------------------------

REM ####################################################### 
REM GET LIST OF DOMAIN ADMINS WITH ADFIND
REM ####################################################### 
echo -----------------------------------------------
echo Getting list of Domain Admins...
echo -----------------------------------------------
@adfind -b %c_domain_parameter% -f name="Domain Admins" -gc > myadmins1.txt
grep -i "member:" myadmins1.txt > myadmins2.txt
sed -e s/^>member:" "CN=/'/g myadmins2.txt > myadmins3.txt
sed -e s/,/',/g myadmins3.txt > myadmins4.txt
type myadmins4.txt | gawk -F "," "print $1" > myadmins5.txt
sed s/'//g myadmins5.txt > dcadmintmp.txt
REM DEL myadmins*.txt

REM PARSE LIST OF DOMAIN ADMINS
FOR /f "tokens=1 delims=" %%a IN ('type dcadmintmp.txt') do @adfind -b %c_domain_parameter% -f name="%%a" | grep -i "sAMAccountName" | sed -e s/^>sAMAccountName:" "//g >> dcadmins.txt
DEL dcadmintmp.txt

REM ####################################################### 
REM SCAN FOR ACTIVE DOMAIN ADMIN SESSIONS (NETSESS)
REM ####################################################### 
echo -----------------------------------------------
echo Getting list of Active Domain Admin Sessions...
echo -----------------------------------------------
for /f %%a in ('type dcs.txt') do NetSess.exe %%a >> mysessions.txt 

REM Identify domain admin sessions
for /f %%a in ('type dcadmins.txt') do grep -i %%a mysessions.txt >> mysessions2.txt

echo =============================>>datargets.txt
echo TARGET DOMAIN                >>datargets.txt
echo ----------------------------->>datargets.txt
echo %c_target_domain%            >>datargets.txt
echo _                            >>datargets.txt
goto :report


:CURRENT
IF EXIST datargets.txt del datargets.txt
REM ####################################################### 
REM GET LIST OF DOMAIN CONTROLLERS WITH ADFIND
REM ####################################################### 
findpdc %userdomain% 1 >> pdc1.txt
gawk -F "\\\\" "print $3" pdc1.txt > pdc.txt
SET /P PDC= < pdc.txt
del pdc1.txt
del pdc.txt
@adfind -b -sc dcdmp %domain_parameter% -f name=%PDC% -gc | grep -i ">name:" | gawk -F " " "print $2" | sort | uniq >> dcs.txt 2>&1
echo -----------------------------------------------
echo Getting list of Domain Controllers...
echo -----------------------------------------------

REM ####################################################### 
REM GET LIST OF DOMAIN ADMINS WITH ADFIND
REM ####################################################### 
echo -----------------------------------------------
echo Getting list of Domain Admins...
echo -----------------------------------------------
@adfind -b %domain_parameter% -f name="Domain Admins" -gc > myadmins1.txt
grep -i "member:" myadmins1.txt > myadmins2.txt
sed -e s/^>member:" "CN=/'/g myadmins2.txt > myadmins3.txt
sed -e s/,/',/g myadmins3.txt > myadmins4.txt
type myadmins4.txt | gawk -F "," "print $1" > myadmins5.txt
sed s/'//g myadmins5.txt > dcadmintmp.txt
REM del myadmins*.txt

REM PARSE LIST OF DOMAIN ADMINS
FOR /f "tokens=1 delims=" %%a IN ('type dcadmintmp.txt') do @adfind -b %domain_parameter% -f name="%%a" | grep -i "sAMAccountName" | sed -e s/^>sAMAccountName:" "//g >>dcadmins.txt
DEL dcadmintmp.txt

REM ####################################################### 
REM SCAN FOR ACTIVE DOMAIN ADMIN SESSIONS (NETSESS)
REM ####################################################### 
echo -----------------------------------------------
echo Getting list of Active Domain Admin Sessions...
echo -----------------------------------------------
FOR /f %%a in ('type dcs.txt') do NetSess.exe %%a >> mysessions.txt 

REM Identify domain admin sessions
FOR /f %%a in ('type dcadmins.txt') do grep -i %%a mysessions.txt >> mysessions2.txt

echo =============================>>datargets.txt
echo TARGET DOMAIN                >>datargets.txt
echo ----------------------------->>datargets.txt
echo %userdnsdomain%              >>datargets.txt
echo _                            >>datargets.txt

:report
REM ####################################################### 
REM PRINT REPORT
REM #######################################################
echo .
echo .
echo =============================>>datargets.txt
echo Domain Controllers           >>datargets.txt
echo ----------------------------->>datargets.txt
echo =============================
echo Domain Controllers
echo -----------------------------
uniq dcs.txt | sort >> datargets.txt
uniq dcs.txt | sort


echo =============================
echo Domain Admins
echo -----------------------------
echo _                            >>datargets.txt
echo ====以上是关于《内网安全攻防:渗透测试实战指南》读书笔记:内网信息收集的主要内容,如果未能解决你的问题,请参考以下文章

《内网安全攻防:渗透测试实战指南》读书笔记:内网信息收集

《内网安全攻防:渗透测试实战指南》读书笔记:隐藏通信隧道技术

《内网安全攻防:渗透测试实战指南》读书笔记:隐藏通信隧道技术

《内网安全攻防:渗透测试实战指南》读书笔记:跨域攻击分析及防御

《内网安全攻防:渗透测试实战指南》读书笔记:跨域攻击分析及防御

《内网安全攻防:渗透测试实战指南》读书笔记:跨域攻击分析及防御