渗透的本质是信息收集,当我们拿到webshell或者通过鱼叉攻击拿到内网终端控制权限的时,在我们对内网展开渗透之前,首先要做的是详细的信息收集,信息收集的程度直接决定着之后的渗透是否顺利

0x01 收集本机信息简介

不管是内网还是内网中,信息收集都是重要的第一步。对内网中一台机器,其所处内网的结构是什么、其角色是什么、使用这台机器的人的角色是什么,以及这台机器上安装了什么杀毒软件、这台机器是通过什么方式上网的、这台机器是笔记本电脑还是台式机器等问题,都需要通过信息收集来科大

0x02 手动信息收集

本机信息包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般为批量安装。

通过本机相关细腻,可以进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命令方式等

1、查询网络配置信息

获取本机网络配置信息

1
ifconfig /all

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

(1)查询操作系统和版本信息

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

如果是中文版操作系统,输入则输入如下命令

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

(2)查看系统体系结构

1
echo %PROCESSOR_ARCHITECTURE%

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

利用wmic命令,将结果输出到文本文件中。如下具体命令

1
wmic product get name,version

利用powershell命令,收集软件的版本信息

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

3、查询本机服务信息

查询本机服务信息

1
wmic service list brief

4、查询进程列表

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

1
tasklist

执行如下命令,查看进程信息

1
wmic process list brief

常见杀毒软件的进程

进程 软件名称
360sd.exe 360杀毒
360tray.exe 360实时保护
ZhuDongFangYu.exe 360主动防御
KSafeTray.exe 金山卫士
SafeDogUpdateCenter.exe 服务器安全狗
McAfee McShield.exe McAfee
Egui.exe NOD32
AVP.EXE 卡巴斯基
Avguard.exe 小红伞
Bdagent.exe BitDefender

5、查看启动程序信息

查看启动程序信息

1
wmic startup get command,caption

6、查看计划任务

1
schtasks /query /fo LIST /v

7、查看主机开机时间

查看主机开机时间

1
net statistics workstation

8、查询用户列表

查看本机用户列表,通过分析本机用户列表,可以找出内网机器的命令规则。个人机器的名字,可用来推测整个域的用户命令方式

1
net user

获取本地管理员(通常包含用户)信息

1
net localgroup administrators

本地管理员有一个用户和一个组,默认的Domain Admins组中为域内机器的本地管理员用户,在实际的环境中,会有域用户被添加为域机器的本地管理员用户

查看当前在线用户

1
query user || qwinsta

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

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

1
net session

10、查询端口列表

查看端口列表、本机开放的端口所对应的服务和应用程序

1
netstat -ano

这里可以根据当前机器和哪些主机建立来连接、以及TCP、UDP等端口的使用和监听情况,从而通过网络连接进行初步的判断(如在代理服务器中可能会有很多机器开放来代理端口、更新服务器可能开放来更新端口8530,DNS服务器可能开放了53端口)

11、查看补丁列表

查看系统的详细信息

1
systeminfo

关注系统的版本、位数、域、补丁信息及更新频率等。域内主机基本批量安装,通过查看本机补丁列表从而找到未打补丁的漏洞,这里可以看到只打了两个补丁

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

1
wmic qfe get Caption,Description,HotFixID,InstalledOn

补丁的名称、描述、ID、安装时间等信息

12、查询本机共享列表

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

1
net share

利用wmic命令查找共享列表

1
wmic share get name,path,status

13、查询路由表及所有可用借口的ARP缓存表

查询路由表及所有可用借口的ARP(地址解析协议)缓存表

1
2
route print
arp -a

14、查询防火墙相关配置

(1)关闭防火墙

windwos server 2003及之前的版本

1
netsh firewall set opmode disable

Windows server 2003之后的版本

1
netsh advfirewall set allprofiles state off

(2)查看防火墙配置

1
netsh firewall show config

(3)修改防火墙配置

windwos 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="Rmote Desktop" protocol=TCP dir=in localport=3389 action=allow

(4)自定义防火墙日志存储位置

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

15、查看代理配置情况

可以看到服务器代理配置信息

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

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

(1)查看远程连接端口

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

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

(2) 在windwos server 2003中开启3389端口

1
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

(3)在windwos server 2008和windows server 2012中开启3389端口

1
wmic /namespace:\\root\cimv2\terminalservices path win32_terminal servicesetting where (__CLASS !="") call setallowtsconnections 1 //2008不成功
1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  //2008 管理员cmd执行

以下为2012开启方式

1
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

0x03 自动收集信息

为了简化操作,可以创建一个脚本,在目标机器上完成流程、服务、用户账号、用户组、网络接口、硬盘信息、网络共享信息、操作系统、安装的补丁、安装的软件、启动时运行的程序、时区等信息的查询工作。网上有相关的脚本,我们也可以自己定制一个,如下是一个利用WMIC收集目标机器信息的脚本

WMIC(windows管理工具命令行),默认请款修改,任何版本的windows xp的低权限用户不能访问WMIC,windows7以上本本的低权限用户允许访问WMIC并执行相关查询操作,下载地址

0x04 Empire下的主机信息收集

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

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

0x05 查询当前权限

1、查看当前权限

查看当前权限

1
whoami

在获取一台主机权限后,有如下三种情况

  • 本地普通用户:当前为win-2008本机的user用户
  • 本地管理员用户:当前为win7-x64-test本机的administrator用户
  • 域内用户:当前为hacke域内的

在这三种情况喜爱,如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息,而本地管理员用户和域内用户可以查选域内信息。原理是:域内的所有查询都是通过域控制器来实现的(基于LDAP协议),而这个查询需要经过权限认证,所以只有域内用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无需额外输入账号和密码

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

2、获取域SID

获取域SID,当前域hacke的SID为S-1-5-21-3125703835-992822856-3564750058,域用户testuser的SID为S-1-5-21-3125703835-992822856-3564750058-1105

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

查询指定用户的信息信息

1
net user testuser /domain

看到当前用户在本地组中没有本地管理员权限,在域中属于Domain Users组

0x06 判断是否存在域

在获取了本机相关性信息后,要判断当前内网中是否存在域。如果当前内网中存在域,就需要判断所控主机是否在域内

1、使用ipconfig命令

使用ipconifg /all可以查看网管IP地址、DNS的IP地址、域名、本机是否和DNS服务器出域同一网段等信息

1
ipconfig /all

通过反向解析查询命令nslookup来解析域名的IP地址。用解析得到的IP地址进行对比,判断域控制器和DNS服务器是否在同一台服务器上

2、查看系统详细信息

“域”既域名(当前hacke.testlab)”登录服务器”为域控制器。如果“域”为“WORKGROUP”表示当前服务器不在域内

1
systeminfo

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

“工作站域DNS名称”为域名(如果“WORKGROUP”表示当前为非域环境),“登录域”用于表示当前登录用户是域用户还是本地用户,此时显示为当前登录的用户的域用户

1
net config workstation

4、判断主域

判断主域(域服务器通常会同时作为时间服务器使用)

1
net time /domain

执行命令后会有如下三种情况

  • 存在域,但当前用户不是域用户,会出现“发生系统错误,拒绝访问”
  • 存在域,且当前用户是域用户,会有如下提示

  • 当前网络环境为工作组,不存在域,会出现“找不到域WORKGROUP的域控制器”

0x07 探测域内存活主机

内网存活主机探测是内网渗透测试中不可或缺的一个环节。可分为白天晚上分别进行探测,以对比分析存活主机和对应的IP地址

1、利用NetBIOS快速探测内网

NetBIOS是局域网程序使用的一种应用程序编程接口(API)为程序提供了请求低级别服务的统一命令集,为局域网提供了网络及其他特殊功能。几乎所有局域网都是在NetBIOS协议的基础上工作的。NetBlos也是计算机的标示名,主要用于局域网中计算机的互访。工作流程为正常的机器名解析查询应答过程。

nbtscan是一个命令行工具,用于扫描本地或远程TCP/IP网络上的开放NetBIOS名称服务器。nbtscan有windows和linux两个版本,上传到目标服务器后输入IP地址范围运行就好

第一列显示为IP地址,第二列尾及其名称和所在域的名称,最后一列是机器所开启的服务列表

输入nbt.exe不输入任何参数,即可查看帮助文件,获取更多的使用细节

2、利用ICMP协议快速探测内网

除了利用NetBIOS探测内网,还可以利用ICMP协议探测内网

依次对内网中的每个IP地址执行ping命令,可以快速找出内网中所有存活的主机。在渗透测试中,可以使用如下命令快速探测整个C段

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

B段查找

1
for /l %i in (1,1,255) do @ping -a 192.0.%i.1 -w 1 -n 1 | find /i "Ping"

3、通过ARP扫描探测内网

(1)arp-scan工具

上传arp.exe后运行,可自定义掩码、指定扫描范围等

1
arp.exe -t 192.168.1.0/20

arpscan.exe下载地址:https://www.2cto.com/soft/201001/16987.html#download

所需dll文件:https://cn.dll-files.com

(2) Empire中的arpscan模块

Empire内置了arpscan模块,该模块用于局域网内发送ARP数据包,收集活跃主机IP地址和MAC地址信息

在Empire 中输入命令usemodule situational_awareness/network/arpscan可使用其内置的arpscan模块

(3) Nishang中的Invoke-ARPScan.ps1脚本

使用Nishang中的Invoke-ARPScan.ps1脚本,可以将脚本上传到目标主机上运行,也可以直接远程加载脚本、自定义掩码和扫描范围

1
powershell.exe -exec bypass -Command ""

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

ScanLine是一款经典的端口扫描工具,可以在所有本本的Widnows操作系统中使用,支持TCP/UDP端口扫描

1
scanline -h -t 22,80,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -O c:\\windows\temp\log.txt -p 192.168.1.1-254

0x08 扫描域内端口

通过查询目标主机的端口开放信息,可以了解目标主机所开放的服务,找到其所开放服务的漏洞、分析目标网络的拓扑结构等,关注如下三点:

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

在授权的情况下,像nmap masscan都是不错的选择,以及一些自定义的端口扫描脚本

1、利用telnet命令进行扫描

telnet协议是TCP/IP协议族的一员,是internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在目标计算机上使用Telnet协议,可以与目标服务器建立连接

2、metasploit端口扫描

使用命令search portscan命令进行搜索,这里使用TCP扫描

1
2
3
4
5
search portscan
set ports 1-1024
set RHOSTS 192.168.1.3
set THREADS 10
run

3、powersploit的invoke-portscan.ps1脚本

powersploit的invoke-portscan.ps1脚本,建议无文件扫描

4、Nishang的Invoke-Portscan模块

Invoke-PortScan是Nishang的端口扫描模块,用于发现主机、解析主机名、扫描端口。输入命令Get-Help Invoke-PortScan -full可查看帮助

4、端口Banner信息

在通过扫描发现端口后,可使用客户端连接工具或NC,获取服务器端的Banner信息。在获取Banner后可以在漏洞库中查找对应CVE编号的POC、EXP,在ExploitDB、Seebug等平台上查看相关的漏洞利用工具,从而进行验证漏洞是否存在。

  • 文件共享服务端口
端口号 端口说明 使用说明
21、22、69 FTP/TFTP文件传输协议 允许匿名的上传、下载、爆破和嗅探操作
2049 NFS服务 配置不当
389 LADP 注入、允许匿名访问、弱口令
  • 远程连接服务器端口
端口号 端口说明 使用说明
22 SSH远程连接 爆破、SSH隧道及内网代理转发、文件传输
23 Telnet远程连接 爆破、嗅探、弱口令
3389 RDP远程桌面连接 Shift后门(Windows server2003以下版本)、爆破
5900 VNC 弱口令爆破
5632 PcAnywhere服务 抓取密码、代码执行
  • Web应用服务端口
端口号 端口说明 使用说明
80、443、8080 常见的Web服务端口 Web攻击、爆破、对应服务器版本漏洞
7001、7002 weblogic控制台 java反序列化、弱口令
8080、8090 JBoss、Resin、Jetty、Jenkins 反序列化、控制台弱口令
9090 WebSphere控制台 java反序列化、弱口令
4848 GlassFish控制台 弱口令
1352 Lotus Domino邮件服务 弱口令、信息泄露、爆破
10000 webmin控制面板 弱口令
  • 数据库服务端口
端口号 端口说明 使用说明
3306 MySQL数据库 注入、提权、爆破
1433 MSSQL数据库 注入、提权、SA弱口令、爆破
5432 Orace数据库 TNS爆破、注入、反弹shell
27017、27018 PostgreSQL数据库 爆破、注入、弱口令
6379 Redis数据库 可尝试未授权访问、弱口令爆破
5000 Sysbase/DB2数据库 爆破、注入
  • 邮件服务端口
端口号 端口说明 使用说明
25 SMTP邮件服务 邮件伪造
110 POP3协议 爆破、嗅探
143 IMAP协议 爆破
  • 网络常见协议端口
端口号 端口说明 使用说明
53 DNS域名系统 允许区域传送、DNS劫持、缓存投毒、欺骗
67、68 DHCP服务 劫持、欺骗
161 SNMP协议 爆破、搜集目标内网信息
  • 特殊服务端口
端口号 端口说明 使用说明
2181 ZooKeeper服务 未授权访问
8069 Zabbix服务 远程执行、SQL注入
9200、9300 Elasticsearch服务 远程执行
11211 Mencached服务 未授权访问
512、513、514 Linux rexec服务 爆破、远程登录
873 Rsync服务 匿名访问、文件上传
3690 SVN服务 SVN泄露、未授权访问
50000 SAP Management Console 远程执行