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

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.