One Hat Cyber Team
Your IP :
216.73.216.194
Server IP :
185.33.55.30
Server :
Linux cl30.webspacecontrol.com 5.14.0-611.38.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 10 17:21:28 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.1.34
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
opt
/
cxs2
/
app
/
tasks
/
View File Name :
DiscoverTask.php
<?php /** * DiscoverTask * * @copyright Copyright (c) 2007 DotRoll Kft. (http://www.dotroll.com) * @author Zoltán Istvanovszki <zoltan.istvanovszki@dotroll.com> * @since 2019-06-11 * @package CXS_2.0 */ class DiscoverTask extends \CommonTask { /** * Crawl instance * * @var \Discover\Crawl */ private $crawl; /** * User data domains from json * * @var array */ private $userdatadomains; /** * Initialization */ public function onConstruct() { $this->lock(__CLASS__); if ($this->getType() == 'DirectAdmin') { $roots = \json_decode(\exec('/usr/local/directadmin/directadmin --DocumentRoot'), true); if (empty($roots['users'])) { echo "Empty docroots calling /usr/local/directadmin/directadmin --DocumentRoot\n"; die(); } foreach ($roots['users'] as $user => $docs) { if (empty($docs['domains'])) { $this->userdatadomains[$user] = []; continue; } foreach ($docs['domains'] as $domain => $domainData) { if (!empty($domainData['public_html'])) { if (empty($this->userdatadomains[$user][$domainData['public_html']]) || !\in_array($domain, $this->userdatadomains[$user][$domainData['public_html']])) { $this->userdatadomains[$user][$domainData['public_html']][] = $domain; if (\is_file("/usr/local/directadmin/data/users/$user/domains/$domain.pointers")) { $pointers = \parse_ini_file("/usr/local/directadmin/data/users/$user/domains/$domain.pointers", false, \INI_SCANNER_RAW); foreach (\array_keys($pointers) as $pointer) { $this->userdatadomains[$user][$domainData['public_html']][] = $pointer; } } } } if (empty($domainData['subdomains'])) { continue; } foreach ($domainData['subdomains'] as $sub => $subData) { if (empty($subData['public_html'])) { continue; } if (empty($this->userdatadomains[$user][$subData['public_html']]) || !\in_array("$sub.$domain", $this->userdatadomains[$user][$subData['public_html']])) { $this->userdatadomains[$user][$subData['public_html']][] = "$sub.$domain"; } } } } } else { foreach (\json_decode(\file_get_contents('/etc/userdatadomains.json'), true) as $name => $domain) { if (!isset($this->userdatadomains[$domain[0]][$domain[4]])) { $this->userdatadomains[$domain[0]][$domain[4]][] = $name; } } } } /** * * @param string $hash Username * @param bool $print Print * @return type */ public function mainAction(string $hash = '', bool $print = false) { if (!empty($hash) && $hash != 'all') { if (isset($this->userdatadomains[$hash])) { $this->userdatadomains = [$hash => $this->userdatadomains[$hash]]; } else { $this->userdatadomains = []; } } if (empty($this->userdatadomains)) { echo "I didn't find any account!\n"; return; } // ZebraZ::l($this->userdatadomains); $this->crawl = $this->di->get('crawl'); $GLOBALS['maxHash'] = \count($this->userdatadomains); $GLOBALS['iHash'] = 0; $GLOBALS['terminalCols'] = (int) \explode(' ', \exec('stty size'))[1]; foreach ($this->userdatadomains as $hash => $directories) { $GLOBALS['iHash']++; $result = $this->crawl->setCredentials($hash, $directories)->getCms(); if ($print === true) { ZebraZ::l($result); echo "\n"; } $this->save($hash, $result); } } /** * Save result to a filesystem * * @param string $hash cPanel username * @param array $result Result * @return void */ private function save(string $hash, array $result): void { $dir = \dirname(\APP_PATH) . "/discover/{$hash[0]}/{$hash[0]}{$hash[1]}"; if (!\is_dir($dir)) { \mkdir($dir, 0770, true); } \file_put_contents("$dir/$hash.json", \json_encode($result, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); } }