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 rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更