No.171-HackTheBox-Linux-Rope-Walkthrough渗透学习

2024-03-08 17:10

本文主要是介绍No.171-HackTheBox-Linux-Rope-Walkthrough渗透学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

**

HackTheBox-Linux-Rope-Walkthrough

**
¬
靶机地址:https://www.hackthebox.eu/home/machines/profile/200
靶机难度:疯狂(5.0/10)
靶机发布日期:2020年3月1日
靶机描述:
Rope is an insane difficulty Linux machine covering different aspects of binary exploitation. The
web server can be exploited to gain access to the file system and download the binary. The
binary is found to be vulnerable to format string exploitation, which is leveraged to get remote
code execution. After gaining foothold, the user is found to have access to a shared library, which
can be modified to execute code as another user. A service running on localhost can be exploited
via a ROP (Return Oriented Programming) attack to gain a root shell.

作者:大余
时间:2020-07-23

请注意:对于所有这些计算机,我是通过平台授权允许情况进行渗透的。我将使用Kali Linux作为解决该HTB的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

一、信息收集

在这里插入图片描述
可以看到靶机的IP是10.10.10.147…
在这里插入图片描述

我这里利用Masscan快速的扫描出了22,9999端口,在利用nmap详细的扫描了两个端口情况…看图即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本循环运行,并在httpserver二进制文件崩溃或退出时执行。 让我们
下载二进制文件并进行分析。
在这里插入图片描述
32位的elf…
在这里插入图片描述
NX开启,目前受保护状态…
NX位是:CPU中使用的一项技术,可确保某些内存区域(例如堆栈和堆)无法执行,而其他部分(例如一段代码)无法写入,这样可以防止我们将shellcode写入堆栈并执行它…

在这里插入图片描述
简单的测试,存在/的输出,和字符串有关系?
在这里插入图片描述
木有IDA,mac最新版系统没法安装IDA,只能用ghidra进行逆向分析了…
直接查看main,发现了其中的规律…

从main开始,还在底部看到一个输出accept…
初始设置后,二进制文件调用open_listenfd绑定到所需的端口(local)并启动监听请求,然后它打印一些信息,然后放入循环中,直到发出请求为止,最后通过accept()收到…

收到请求后,输入文件描述符local_12c传递给process()函数以及sockaddr结构,二进制文件调用fork()生成一个子进程,然后其余的执行继续在新产生的过程中,然后调用parse_request(),该文件将文件路径返回到local_xx缓冲区,进行open()syscall来访问文件并检查文件是否存在…
在这里插入图片描述
查看log_access,保留了sockaddr结构中的主机地址,并且调用printf()来打印日志。 第一个printf打印状态码和地址,第二个printf不使用%s格式字符串直接打印请求的文件,这里在二进制文件中就引发了格式字符串漏洞,会导致任意读取和写入访问…
这就是攻入点…
在这里插入图片描述
知道了格式字符串漏洞后,通过测试,从堆栈读取数据…
知道了41414141(AAAA)和42424242(BBBB)的偏移分别为53和54…(0x41414141-AAAA)
知道了控制内存地址的偏移量以及由写入的字节数printf,我们可以使用pwntools fmtstr_payload 生成格式字符串有效负载…写入EXP即可…

在这里插入图片描述
最后,程序加载的地址和程序使用的库…
有了565ad000和f7dac000,可以利用它来执行libc库的路径…
在这里插入图片描述
最后根据分析,我在EXP创建了一个命令,该命令将一些base64回显到中base64 -d中,可看到执行后的shell以base64进行写入执行…获得了反向外壳…
继续查看用户的sudo特权,发现可以以r4j用户身份运行readlogs…
在这里插入图片描述
这里不太稳定,直接利用ssh输入key,直接登录更放心稳定…
在这里插入图片描述
二进制文件在执行时打印出/var/log/auth.log的内容…
执行中查看下liblogs状态…
在这里插入图片描述
可以看到具有写入权限…写入个shell,他会自动带liblogs执行直接就能获得外壳了…GO
在这里插入图片描述
简单的gcc编写的shell(不陌生了),然后gcc编译后,通过ssh的scp上传覆盖即可…
然后执行该程序,获得了r4j用户权限…读取到了user_flag信息…
这真是太难了…

在这里插入图片描述
不多说,直接ssh-key继续利用ssh登录r4j用户…方便后面渗透…

在这里插入图片描述
由于该靶机就是二进制提权的靶机,我继续ps aux直接查看了所有root权限执行的程序…
发现了contact可以分析…开始吧

在这里插入图片描述
可看到靶机本地还开放了1337端口…
在这里插入图片描述
将文件下载下来后…开始检查…
Checksec显示所有保护机制均已启用…
这里堆栈金丝雀和PIE绝对是大麻烦…都开启了保护机制…
后面不得不绕过这两个保护机制来利用二进制文件提权…了解下
在这里插入图片描述
这就是金丝雀…百度百科…google也很多解释,自己查吧
下面思路就是,查找并溢出缓冲区位置,然后找到金丝雀的可利用处进行利用…
由于PIE已激活,需要找到有效的偏移量…这是最难点…就是查找内存泄漏以计算加载库的地址…
最后构建一个ROP植入shell…

在这里插入图片描述
IDA打算晚点windows虚拟机装…
目前没有IDA,只能勉强用Ghidra神器进行逆向分析…
可以看到最重要的点是FUN_0010140e,双击查看下该进程的怎么执行的…
在这里插入图片描述
这里包含我们在启动二进制文件时看到的printf,此功能很可能是主要功能…
它在端口1337上设置侦听器(0x539)…
该forkProcess()函数创建一个子进程以与客户端进行交互…

在这里插入图片描述
函数FUN_001014ee收到连接后立即用fd进行调用…
FUN_001014ee是处理功能,该函数执行fork()并生成一个子进程,然后使用write()函数
向客户端发送提示,然后调用另一个函数…
流程函数创建一个子流程来处理请求,这是有好处的,因为堆栈金丝雀对于子进程不会更改,程序中似乎存在实际的编程错误,可看到它不打印PID,而是调用getuid()并打印用户ID,然后通过多次连接到实例…
在这里插入图片描述
通过测试可看到显著的效果…
pid始终为0(进程由root运行,因此uid为0),fd为4(稍后将对此进行介绍)…
在这里插入图片描述
FUN_0010159a:此函数调用recv()函数并从客户端读取0x400,即128个字节,此输入被写入local_48缓冲区,该缓冲区的长度为56个字节…
如果输入发送的长度大于56会导致缓冲区溢出…但是由于以下原因,无法直接利用此溢出:
堆栈金丝雀的存在,堆栈金丝雀是一个包含8个随机字节的值,它位于在堆栈底部上方。 在该功能存在之前,将存储此值后并检查是否有更改…(重要)金丝雀的任何更改都将导致异常并退出流程…
recv_data()函数从用户接收多达1024(0x400)个字节,并将其写入56字节大缓冲区中,这是此二进制文件的攻击媒介,可以从这儿入手…
在这里插入图片描述
在开始利用漏洞之前,让我们下载使用的libc文件…以在本地运行拿权更方便…省的还要镜像1337过来网络不稳定…

在这里插入图片描述
https://made0x78.com/bseries-defeat-stack-cookies/
这张图很好解释了接下来的事情,利用蛮力逐字节堆栈金丝雀的原理在本文中有很好的解释…

基本思想是我们一次将堆栈中的值覆盖一个字节,如果我们得到完成的消息,知道被覆盖的值没有更改,并且我们有一个正确的字节,然后可以转到下一个字节,依此类推…
可以参考文章里的思路,但是EXP得自己编写…这里我就不多介绍了,都是无限测试中…

在这里插入图片描述
这里坚信只有自己知道,这里一定要libc.so文件下载到本地,先从本地跑测试,本地能拿shell了,在直接进行靶机即可…省很多时间…每次找金丝雀裂缝点,都要10多20分钟…

可看到获得了root权限和flag…
我还进一步的利用ssh,登录了root,稳定的外壳…然后进行了各种信息收集枚举…
这是个简单的系统…只有二进制漏洞可以利用,没有别的地方可以提权了…

好难,这是深入版的缓冲区溢出吗?花了我两三天时间…学到很多东西…需要继续脑补下代码审计写EXP的功率,和栈堆二进制的一些理论原理…

加油加油!!
最后我会在每篇NO文章后面注明,我不会在每个图片下面附上命令了,我没有心情像NO1~50一样去详细解释每个知识点了,望理解。

由于我们已经成功得到root权限查看user和root.txt,因此完成这台疯狂的靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。

在这里插入图片描述

这篇关于No.171-HackTheBox-Linux-Rope-Walkthrough渗透学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787789

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面