写在前面的话

在一次红队分析中,我们成功以非特权用户的身份在一个外围网页中实现了命令执行。本文将介绍并分析漏洞(CVE-2018-1685)以及该漏洞的利用方式,该漏洞允许攻击者读取目标主机中的任意文件,但目前还没有针对该漏洞的公开细节。除此之外,我们还会介绍一种技术,在加入了活动目录域的Linux设备(通过Kerberos)中将这种类型的漏洞(任意文件读取)转换为完整的系统渗透并实现任意命令执行。

权限提升

我们的测试设备是一台近期刚刚更新的Red Hat服务器,因此我们无法利用内核漏洞来实现提权。经过一系列常规检测之后,我们发现了一些带有SUID的root级别可执行程序:/home/db2test/sqllib/adm:

total 5.3M

drwxr-sr-x.  2 db2test db2test  112 Oct  8 10:29 .

drwxrwsr-t. 19 db2test db2test 4.0K Oct  8 10:32 ..

-r-sr-xr-x.  1 db2test db2test 152K Oct  8 10:29 db2audit

-r-sr-xr-x.  1 root    db2test  19K Oct  8 10:29 db2cacpy

-r-xr-xr-x.  1 db2test db2test 195K Oct  8 10:29 db2cap

-r-sr-x---.  1 root    db2test  32K Oct  8 10:29 db2iclean

-r-sr-x---.  1 root    db2test  87K Oct  8 10:29 db2licm

-r-xr-xr-x.  1 db2test db2test 120K Oct  8 10:29 db2set

-r-sr-sr-x.  1 db2test db2test 4.7M Oct  8 10:29 db2trc

“db2test”用户貌似跟一个DB2测试安装油管,即一个IBM的数据库管理系统。搜索引擎求助一番之后,我们发现了一个关于这些可执行程序(db2cacpy)的安全公告(由厂商发布)。

CVE-2018-1685漏洞描述:

解决方案和缓解策略:

虽然厂商并没有披露关于该漏洞的任何技术细节,但我们可以找到两个有意思的地方:该漏洞允许本地用户读取系统中的任意文件;

在解决方案中,厂商提到删除这部分代码将会导致添加数据库时无法向/etc/services中添加端口;

了解到这些内容之后,我们就可以继续下一步了。

CVE-2018-1685:漏洞捕捉

首先,为了分析漏洞,我们在本地下载了这些可执行程序。除此之外,我们还需要下载大约10个DB2代码库来让工具正确运行。

经过初始的静态分析之后,我们就可以拆分其各种行为了。代码接收两个命令行参数,并会在程序继续执行之前对它们执行相应的检测。

第一个检测

第一个检测是以某种混淆方式进行的,判断第一个参数是否跟存储在cleartext中的密钥相匹配:

第二个检测

在第二个检测中,将会判断第二个参数是否是以字符串“/tmp/services.”开头的,这很可能是因为另外的DB2组件是以这种模式来生成文件的:

漏洞分析

如果这两个检测都通过了,工具将会把指定的文件拷贝到/etc/services,并重写该文件。下面给出的是这个过程的简化版伪代码:func main(argc, argv[]) {

init_db2()

if (argc is 3)

{

if (argv[1] equals HARDCODED_KEY) {

if (argv[2] startsWith "/tmp/services.") {

copy_file(argv[2], "/etc/services")

}

}

}

}

那么,我们该如何利用这个读取任意文件漏洞呢?没错,就是通过路径遍历!如果我们在/tmp中创建一个名为“services.”的目录(或以这个字符串开头的),我们就可以触发/tmp/services./../../etc/shadow的拷贝行为,并通过第二个检测。

我们可以点击【这里】获取到漏洞利用PoC代码,它还会在漏洞利用完成之后恢复原来的/etc/services文件。需要注意的是,第一个检测中的密钥可能会根据DB2的版本或安装配置的不同而有所变化。

从任意读取到以root权限实现命令执行

由于我们的测试设备是一台通过Kerberos加入活动目录域的Linux服务器,因此我们首先要检测/tmp中是否存在有效的TGT(ccache文件),以便实现数据复用。但是,这些数据都已经过期了。因此,我们需要寻找另一种不需要用户交互的途径,即keytab文件。

keytab文件中包含了计算机账号的密钥(Red Hat中默认为/etc/krb5.keytab),你可以使用这个密钥来伪造TGS服务令牌。

为了从keytab中提取出密钥,我们使用了我们的DB2漏洞利用代码以及这个【脚本】:

接下来,使用impacket中的ticketer.py工具,我们可以创建一个针对服务器中SSH服务的TGS,并以域用户命名,而这个域用户拥有设备上的管理员权限:

最后,我们可以使用生成的令牌来通过SSH与设备进行连接,并使用Kerberos完成身份验证。然后,以root权限执行任意命令:

总结

在这篇文章中,我们学习了如何去利用一个众所周知但并未披露技术细节的安全漏洞,这也就是为什么我们一直在强调必须尽快为每一个应用程序安装安全补丁的原因!

linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统相关推荐

  1. 95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;Android Studio 4.2 发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. web安全从基础术语、windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新)

    web安全知识从基础术语.windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新) 专业术语 web环境搭建 windows基础 linux基础 linux系统命令 linux命令 ...

  3. linux内核漏洞分类,blog/linux kernel double-free类型漏洞的利用.md at master · snorez/blog · GitHub...

    对linux kernel double-free类型漏洞的较通用利用方法 update Wed Nov 29 16:39:01 HKT 2017 linux kernel 4.14 released ...

  4. ctf中linux内核态的漏洞挖掘与利用系列1

    说明 该系列文章主要是从ctf比赛入手,针对linux内核上的漏洞分析.挖掘与利用做讲解,本篇文章主要介绍内核漏洞利用所需的前置知识以及准备工作. linux内核态与用户态的区别 以 Intel CP ...

  5. linux bash 漏洞 利用,Linux Bash发现重大漏洞

    Linux Bash发现重大漏洞 Posted: 26. 09. 2014 | Author: QuenyWell | Category: Linux GNU Bourne Again Shell ( ...

  6. 项目三 探索并利用漏洞对未知web server权限提升(CTF实战 Kioptrix#2靶机渗透测试)

    大家好,我是SuieKa.此是实训项目三,要求根据未知靶机(Kioptrix#2)探索漏洞,并利用漏洞进行权限提升实验项目,希望对朋友们有所帮助. 树 一.神器开路,对未知操作系统的全面扫描 1.SQ ...

  7. thinkphp日志泄漏漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  8. ThinkPHP V5.0.5漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  9. 文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞

    文章目录 文件上传漏洞 漏洞概述 漏洞成因 漏洞危害 WebShell 大马 小马 GetShell 漏洞利用的条件 PUT方法上传文件 漏洞的防御.绕过和利用 黑白名单策略 安装upload-lab ...

最新文章

  1. 【ACM】杭电OJ 2000
  2. perl 对ENV环境变量的使用
  3. openwrt转载--openwrt框架分析
  4. java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】
  5. 在 MFC SDI 程序中实现多语言程序界面
  6. 音视频技术开发周刊 | 175
  7. 【英语学习】【WOTD】peer-to-peer 释义/词源/示例
  8. python模块是一个可共享的程序_python基础-模块
  9. Ubuntu14.04环境下配置TFTP服务器
  10. 洛谷P3952 时间复杂度
  11. ethtool查看网卡以及修改网卡配置
  12. Object-C——三大特性之多态
  13. 卡爆mysql_荐 MySQL死锁和卡死分析
  14. Java之—hutool工具类二维码生成跟背景图合并输出
  15. linux获取本地ip命令,Shell获取当前主机ip地址
  16. 腾讯2020校园招聘-后台
  17. 小米路由器显示网络未连接到服务器,小米路由器不能上网(连不上网)解决方法...
  18. 随堂笔记4——文本编辑器Vim
  19. JAVA飞机大战网络联机对战
  20. 怎样在Windows下挂载ESP分区

热门文章

  1. C语言拾零(to be continued)
  2. 属性名_CSS -- 属性选择器
  3. mysql jdbc 5.1.6_mysql5.0+Mysqljdbc5.1.6.jar的整合 | 學步園
  4. 【Leetcode | easy】回文数
  5. 【STM32】FreeRTOS 列表和列表项
  6. 【STM32】端口复用和重映射,完全重映射,部分重映射
  7. 硬核创客DIY遥控氦气球飞行器——会飞的鲨鱼的诞生的全过程
  8. 基于小波变换的图像压缩解压缩仿真
  9. 基于FPGA的costas环同步系统仿真与分析
  10. 最轻量级的C协程库:Protothreads