世界杯进球最多

内网渗透学习-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

whoami

whoami /user

whoami /user && whoami /priv && whoami /all #查看主机权限(whoami /priv)

当前操作系统

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 usernet user xxx #查看详细信息

查看登录情况

qwinstaqwinsta /SERVER:IP #查看远程登录情况

然后开始判断是否有域环境,看主机DNS后缀

ipconfig /all #查看网关IP地址、DNS的ip地址、域名、本机是否和DNS服务器处于同一网段等信息。

上图就是一个域环境

当然判断域环境并不只有这一种方法,后续会提到

查看系统详细信息,同时关注打了什么补丁(方便后续提权,这里附上一个提权辅助的工具https://i.hacking8.com/tiquan,可以根据补丁名字看打了哪些补丁),网络连接状态

systeminfo #是否加入域,加入了会显示域的名字,未加入显示WORKGROUP

wmic qfe get caption,description,hotfixid,installedon #查看补丁

查询补丁信息

wmic qfe get Caption,Description,HotFixID,InstalledOn

包括查看当前任务进程,看用的什么杀软(一样可以用刚刚的链接来判断杀软的类型)

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 sharewmic share get name,path,status

查看当前会话

net session

查看主机开机时间

net statistics workstation

查看机器自启动程序信息

wmic startup get command,caption,user

wmic startup get command,caption

wmic startup list full

查询防火墙相关配置

关闭防火墙

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 等工具查询。

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 权限名