目录
主要部分
知识点
收集本机信息
主要收集操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁及更新频率、网络连接、共享、会话等,可采用手动和自动收集两种方式
查询当前权限
主要收集当前用户权限、域SID、或者某些指定用户信息
判断是否存在域
主要通过查询ipconfig、systeminfo等命令获取信息判断是否在域内
探测域内存活主机
探测内网或域内存活主机,利用netbios、icmp或者ARP进行探测
扫描域内端口
探测主机存活端口、服务,为后续内网漏洞探测利用做准备
收集域内基础信息
收集域内基础信息,包括域名、域内主机、域控等
查找域控制器
定位域控制器
获取域内的用户和管理员信息
查询域内用户、域内管理员等信息
定位域管理员
查找域管理进程
收集域管理进程,可以查找登录进程,进而收集域管理员的凭据
利用powershell收集域信息
敏感资料
收集本机或域的敏感资料
分析域内网段划分情况及拓扑结构
根据收集的信息分析、画出内网及域拓扑
域分析工具BloodHound
利用BloodHound进行域内情况分析
域内信息收集-Linux主机
收集Linux主机信息
信息收集是内网渗透的关键。进入内网后的第一步就是信息收集,而且信息收集往往一直贯穿整个内网渗透过程。
进入内网后,一般首先会对本机和内部网络进行信息收集。包括本机:网络配置及连接情况、翻文件、找命令执行历史记录、配置文件、数据库信息、管理员登录信息、总结密码规律、用户相关信息等;对内部网络/其它主机:存活IP、主机名、开放端口和服务等。利用收集到的信息主要针对未修复漏洞、弱点等来横向渗透扩大战果。
内网漫游可以重点关注邮件服务器、OA系统、版本控制服务器、集中运维管理平台、统一认证系统、域控 等,尝试突破核心系统权限、核心业务和核心数据。
刚进入内网,很多信息都不知道,面对的是一片黑暗森林。所以往往第一步就是对当前网络环境分析。
我是谁?(角色)
这是哪?(网络拓扑)
我在哪?(所处网络)
1、收集本机信息
本机信息收集包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁及更新频率、网络连接、共享、会话等,针对域内主机,一般操作系统、应用软件、补丁、服务、杀毒软件都是批量安装的。
本机信息收集可采用手动收集和工具自动收集。
手动收集 查询网络配置 根据ipconfig查询本机网络配置信息,可以看到有几个网卡,每个网卡的IP配置,是否有域,域名及DNS
查询操作系统及版本 1 2 systeminfo|findstr /B /C:"OS Name" /C:"OS Version" systeminfo|findstr /B /C:"OS 名称" /C:"OS 版本"
另外利用systeminfo也可以查询主机名、网卡、域、补丁 等信息。当域不是WORKGROUP
,主机就是真实在域内的。
查看系统体系结构 1 echo %PROCESSOR_ARCHITECTURE%
查看安装的软件信息 可以利用WMIC(Windows Management InstrumentationCommand Line)或者powershell来查看安装的软件信息
1 2 wmic product get name,version powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
查询本机服务信息
查询进程列表 tasklist可以查看当前进程列表和进程用户,分析软件、邮件客户端、VPN、杀毒软件进程
1 2 tasklist wmic service list brief
常见的杀毒软件进程,另外附上别人总结的杀软进程名:https://www.cnblogs.com/hookjoy/p/10899119.html
1 2 3 4 5 6 7 8 360sd.exe 360杀毒 360tray 360实时保护 ZhuDongFangYu.exe 360主动防御 KSafeTray.exe 金山卫士 SafeDogUpdateCenter.exe 服务器安全狗 HipsTray.exe 火绒 McAfee McShield.exe McAfee ...
查看启动程序信息 1 wmic startup get command,caption
查看计划任务 1 schtasks /query /fo LIST /v
查看主机开机时间 1 net statistics workstation
查询用户列表 查看本机用户
获取本地管理员信息(包括域用户)
1 net localgroup administrators
查看当前在线用户
列出本地计算机和连接的客户端的会话
查询端口
查询补丁及其更新频率 对于补丁,需要注意系统的版本、位数、域、补丁信息和更新频率。域内主机补丁通常会批量安装,通过查看补丁列表,可以找出未打补丁的漏洞。
1 2 systeminfo wmic qfe get Caption,Description,HotFixID,InstalledOn
查询本机共享列表 查看本机共享列表和可访问的域共享列表
1 2 net share wmic share get name,path,status
查询路由表及所有可用接口的ARP缓存表
查看代理配置情况 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
在windows Server 2003开启3389
1 wmic path win32_terminalservicesetting where (__CLASS != “”) call setallowtsconnections 1
在windows Server 2008和2012 中开启3389
1 2 3 1、wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 2、wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1 3、reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
查看防火墙相关配置 关闭防火墙
1 2 3 4 # Windows server 2003及之前的版本 netsh firewall set opmode disable # Windows server 2003之后的版本 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 2 3 4 5 6 # 允许指定程序全部连接 netsh advfirewall firewall add rule name="pass nc" dir=in action=allow programe="C:\nc.exe" # 允许指定程序退出 netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow programe="C:\nc.exe" # 允许3389端口放行 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"
翻找本地敏感文件及密码本 网核心敏感数据,不仅包括数据库,电子邮件,也包含个人数据,业务数据,技术数据等等,大部分敏感数据基本都在内网中。查找敏感文件,可参考:https://my.oschina.net/u/4196756/blog/4444701
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 站点源码备份文件、数据库备份文件、配置信息文件等等 浏览器保存的密码和浏览器的cookie、敏感软件如xshell、keepass等记录的密码 其他用户会话,3389和ipc$连接记录,回收站中的信息等等 Windows的无线密码 网络内部的各种账号密码,包含电子邮箱,VPN,FTP等等 命令执行历史记录 总结密码规律 本地用户习惯 1.指定目录下搜集各类敏感文件 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*" 2.指定目录下的文件中搜集各种账号密码 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
凭证收集 凭证等信息收集,参考:https://blog.csdn.net/nilwiaoglwigjwlg/article/details/82834068或https://yoga7xm.top/2019/04/09/IPentest-admin/#Windows-Hash%E8%8E%B7%E5%8F%96
常用工具mimikatz、wce、Invoke-WCMDump、vaultcmd(win系统自带)
WMIC自动收集 使用WMIC自动收集,winxp低权限用户不允许访问WMIC,Windows7以上版本的低权限用户允许访问WMIC,下载地址:http://www.fuzzysecurity.com/scripts/files/wmic_info.rar
WMIC脚本内容如下:
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
执行结果以列表的形式列出服务、用户、用户组、网络接口、硬盘、补丁、自启动程序、软件、操作系统和时区的详细信息:
2、查询当前权限 查看当前用户权限
查询whoami可能返回三种结果:本地普通用户、本地管理员、域内用户。
对于本地普通用户,只能查询本机的相关信息;本地管理员和域内用户可以查询域内相关信息。
域内用户查询原理是域内所有查询都通过域控制器实现,基于LDAP协议,域内相关信息查询需要经过权限认证。当域用户执行查询命令时,会使用Kerberos协议认证。
本地管理员Administrator权限可提升为Ntauthority或System权限,在域内除普通用户外,所有主机都有一个机器用户,用户名是机器名+”$“。在本质上,机器的system用户对应的就是域内的机器用户,所以使用System权限可以运行域相关查询命令。简单来说就是System权限能查询域内相关信息,而Administrator可直接提权为System。
获取域SID 可以查询当前用户SID和域的SID
查询指定用户详细信息 1 net user username /domain
3、判断是否存在域 域内一般控制了大量的主机,所以进入内网后重要的一步也是寻找域。
判断所控主机是否在域内,采用以下方法。
ipconfig命令判断是否在域内 查看网络配置信息,如果有域会有主DNS后缀 和DNS服务器,主DNS后缀没有的一定不在域内。
Systeminfo判断是否在域内 systeminfo查询结果域显示WORKGROUP
就不在域内,否则在域内。
1 systeminfo | findstr /B /C:"域"
查询当前登录域和登录用户信息
通过时间服务器判断 域服务器一般会同时为时间服务器
不存在域,会返回找不到域控制器:
存在域,并且当前用户是域用户,会返回时间:
存在域但当前用户不是域用户,会显示”发生系统错误5“。
4、探测域内存活主机
内网存活主机探测非常重要,方便对存活主机进行下一步渗透拿下。在白天和晚上分别探测 方便进行对比。
以下方式推荐优先使用NetBIOS和ICMP。
利用NetBIOS探测
NetBIOS ,为网上基本输入输出系统(英语:Network Basic Input/Output System)的缩写,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。严格来说,NetBIOS不是一种网上协议,而是应用程序接口(API)。
几乎所有的局域网都在NetBIOS基础上工作。NetBIOS提供了名称服务,包括名称登录与名称解析,主要用于局域网中的计算机互访。其工作流程是正常的机器名解析查询应答过程,推荐优先使用该方法探测。
netscan命令行工具在内网使用时要先上传到目标主机,支持linux和windows平台。扫描速度比较快,可以反馈出IP、域名和主机名、开启的服务。
1 2 3 4 5 6 7 8 9 10 nbt.exe 192.168.1.1/24 开启的服务类型主要包括以下几种: SHARKING - 存在正在运行的文件和打印共享服务,不一定有内容共享 DC - 存在域控 U=USER - 该主机有登录名为User的用户 IIS - 安装了IIS服务器 EXCHANGE - 安装了Exchange服务 NOTES - 安装了Lotus Notes电子邮件客户端 ? - 没有识别出NetBIOS资源
利用ICMP探测 对内网IP执行ping命令来探测存活主机。
1 for /L %I in (1,1,254) DO @ping -w 1 -n 1 1.1.1.%I | findstr "TTL="
利用ARP探测 可以用arp-scan、Empire的arpscan模块、Nishang的Invoke-ARPScan.ps1。
arp-scan:
Empire的arpscan模块:
1 2 3 usemodule situational_awareness/network/arpscan set Range 1.1.1.1-.1.1.1.254 execute
Nishang的Invoke-ARPScan.ps1:
1 powershell -exec bypass -Command "& {Import-Module C:\Users\29176\Desktop\tools\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 1.1.1.1/24}"
5、域内端口 服务信息收集 通过常规TCP/UDP端口扫描探测内网 ScanLine是一款经典的端口扫描工具,可以在所有版本Windows操作系统中使用,可以探测存活主机和端口
1 scanline -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,5432 -u 53,161,137,139, -O c:\results.txt -p 1.1.1.1-254 /b
telnet命令
S扫描器 1 s.exe TCP 1.1.1.1 1.1.1.2 21,22,80,89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,5432,53,161,137,139 256 /Banner /save
1 /auxiliary/scanner/portscan/tcp
Nishang的Invoke-PortScan模块 1 Invoke-PortScan -StartAddress 1.1.1.1 EndAddress 1.1.1.254 -ResolveHost
6、收集域内基础信息 确定了主机所在网络有域并且主机在域内,可以进一步收集域内信息。
查询域
查询域内所有计算机 1 net view /domain:SERVER08
查询域内所有用户组列表
获取所有域成员计算机列表 1 net group "domain computers" /domain
获取域密码信息
获取域信任消息
7、查找域控制器 查看域控的机器名
查看当前时间
查看域控制器组
8、获取域内用户和管理员信息 查询所有域用户列表 1 2 3 4 5 6 # 通过向DC进行查询,其中krbtgt用户不仅可以创建票据授权服务(TGS)的加密密钥,还可以实现多种域内权限持久化方法 net user /domain # 获取域内用户详细信息 wmic useraccount get /all # 查看存在的用户 dsquery user
查询管理员相关信息 1 2 3 4 5 6 # 查询本地管理员组用户 net localgroup administrators # 查询域管理员用户 net group "domain admins" /domain # 查询管理员用户组 net group "Enterprise Admins" /domain
定位域管理员 如果在Windows域中已经获得了普通用户权限,希望在域内横向移动,需要知道域内用户登录位置、它是否是任何系统的本地管理员、它所属的组、是否有权访问文件共享等。枚举主机、用户和组,有助于更换的了解域的布局。
常用域管理员定位工具有psloggedon.exe、PVEFindADUser.exe、netsess.exe以及hunter、NetView等,在Powershell中,最常用的是PowerView。
9、查找域管理进程 在渗透过程中,一个典型的域渗透提权过程,通常围绕着收集明文凭据或者通过mimikatz提权等方法,在获取了管理员权限的系统中寻找域管理员登录进程,进而收集域管理员的凭据。如果内网环境复杂,渗透人员无法立即在拥有权限的系统中获得域管理员进程,那么通常可以采用以下方法:在跳板机直接跳转,直至获取域管理员权限,同时进行一些分析工作,进而找到渗透测试的路径。
本机检查 列出本机的所有有进程及进程用户
查询域控制器的域用户会话 在域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理会话系统列表。
1 2 3 4 5 6 7 8 # 查询域控列表 net group "Domain Controllers" /domain # 收集域管理员列表 net group "domain admins" /domain # 收集所有活动域的会话列表,下载地址: NetSess -h # 交叉引用域管理员列表域活动会话列表 FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul >session.txt && FOR /F %a in (admins.txt) do @type sessions.txt | @findstr /I %a
10、Linux主机信息收集 参考:https://blog.csdn.net/qq_45226339/article/details/105663902
操作系统信息收集 发行版本 1 2 3 4 cat /etc/issue ls /etc/*-release cat /etc/lsb-release(Debian) cat /etc/red-release(Redhat)
目标操作系统内核、多少位 1 2 3 4 5 cat /proc/version uname -a uname -mrs rpm -q kernel ls /boot | grep linuz
环境变量 1 2 3 4 5 6 7 8 /etc/profile /etc/bashrc ~/.bash_profile ~/.bash_history ~/.bashrc ~/.bash_bgout env set
运行的服务和进程 1 2 3 4 5 6 7 ps -ef ps -aux top cat /etc/services ps aux | grep root ps -ef | grep root
安装的程序 1 2 3 4 5 6 ls -alh /usr/bin ls -alh /sbin dpkg -l rpm -qa ls -alh /var/cache/apt/archivesO ls -alh /var/cache/yum/
定时任务 1 2 3 4 5 6 7 8 9 10 11 12 crontab -l ls -alh /var/spool/cron ls -al /etc/ | grep cron ls -al /etc/cron* cat /etc/cron* cat /etc/at.allow cat /etc/at.deny cat /etc/cron.allow cat /etc/cron.deny cat /etc/crontab cat /etc/anacrontab cat /var/spool/cron/crontabs/root
从文件中获取用户、密码信息 1 2 3 4 grep -i user [filename] grep -i pass [filename] grep -C 5 "password" [filename] find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password "
网络相关信息 网络配置和端口监听 1 2 3 4 5 6 7 8 bin /ifconfig -a cat /etc/network/infaces cat /etc/resolv.conf cat /etc/sysconfig/network cat /etc/networks iptables -L hostname dnsdomainname
与哪些主机在通讯? 1 2 3 4 5 6 7 8 9 10 lsof -i lsof -i :80 grep 80 /etc/services netstat -pantu netstat -antpx netstat -tulpn chkconfig --list chkconfig --list | grep 3:on last w
用户及敏感信息收集 1 2 3 4 5 6 7 8 9 10 11 12 13 id who w last cat /etc/passwd | cut -d: -f1 grep -v -E "^#" /etc/passwd | awk -F: '1}' awk -F: '($3 == "0") {print}' /etc/passwd cat /etc/sudoers sudo -l cat /etc/passwd cat /etc/group cat /etc/shadow ls -alh /var/mail/
可能存在密码的文件? 1 2 3 cat /var/apache2/config.inc cat /var/lib/mysql/mysql/user.MYD cat /root/anaconda-ks.cfg
历史记录 1 2 3 4 5 cat ~/.bash_history cat ~/.nano_history cat ~/.atftp_history cat ~/.mysql_history cat ~/.php_history
私钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat ~/.ssh/authorized_keys cat ~/.ssh/identity.pub cat ~/.ssh/identity cat ~/.ssh/id_rsa.pub cat ~/.ssh/id_rsa cat ~/.ssh/id_dsa.pub cat ~/.ssh/id_dsa cat /etc/ssh/ssh_config cat /etc/ssh/sshd_config cat /etc/ssh/ssh_host_dsa_key.pub cat /etc/ssh/ssh_host_dsa_key cat /etc/ssh/ssh_host_rsa_key.pub cat /etc/ssh/ssh_host_rsa_key cat /etc/ssh/ssh_host_key.pub cat /etc/ssh/ssh_host_key