403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/classes/general/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/classes/general/rsaopenssl.php
<?
class CRsaOpensslProvider extends CRsaProvider
{
	//$_PRIV - secret key in PEM format
	protected $_PRIV = '';

	public function SetKeys($arKeys)
	{
		parent::SetKeys($arKeys);
		$this->_PRIV = $arKeys["PRIV"];
	}

	public function LoadKeys()
	{
		$arKeys = unserialize(COption::GetOptionString("main", "~rsa_keys_openssl", ""), ['allowed_classes' => false]);
		if(!is_array($arKeys))
			return false;
		$arKeys["PRIV"] = COption::GetOptionString("main", "~rsa_key_pem", "");
		return $arKeys;
	}

	public function SaveKeys($arKeys)
	{
		$privKey = $arKeys["PRIV"];
		unset($arKeys["PRIV"]);
		COption::SetOptionString("main", "~rsa_keys_openssl", serialize($arKeys));
		COption::SetOptionString("main", "~rsa_key_pem", $privKey);
	}
	
	public function Decrypt($data)
	{
		$key = openssl_pkey_get_private($this->_PRIV);
	
		$out = '';
		$blocks = explode(' ', $data);
		foreach($blocks as $block)
		{
			$out1 = '';
			openssl_private_decrypt(strrev(base64_decode($block)), $out1, $key, OPENSSL_NO_PADDING);
			$out1 = strrev($out1);
	 		$out .= $out1;
		}
		$out = rtrim($out);
	
		return $out;
	}

	public function Keygen($keylen=false)
	{
		if($keylen === false)
			$keylen = 1024;
		else
			$keylen = intval($keylen);

		$fname = $_SERVER["DOCUMENT_ROOT"]."/bitrix/tmp/openssl.cnf";
		if(!file_exists($fname))
		{
			CheckDirPath($fname);
			file_put_contents($fname, '');
		}

		$keys = openssl_pkey_new(array(
			"private_key_type"=>OPENSSL_KEYTYPE_RSA, 
			"private_key_bits"=>$keylen,
		    "config" => $fname,
		));

		if($keys)
		{
			openssl_pkey_export($keys, $privkey, null, array("config" => $fname));
			$k = self::get_openssl_key_details($privkey);

			if(is_array($k))
			{
				return array(
					"M" => base64_encode(strrev($k['n'])),
					"E" => base64_encode(strrev($k['e'])),
					"D" => base64_encode(strrev($k['d'])),
					"PRIV" => $privkey,
					"chunk" => $keylen/8,
				);
			}
		}
		return false;
	}

	private static function get_openssl_key_details($key)
	{
		//PEM to DER
		$lines = explode("\n", trim($key));
		unset($lines[count($lines)-1]);
		unset($lines[0]);
		$der = implode('', $lines);
		$der = base64_decode($der);

		//DER is in ASN.1 notation
		$body = new CASNReader();
		$body->Read($der);
		$bodyItems = $body->GetSequence();
	
		if(!empty($bodyItems))
		{
			if(is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3] ?? null))
			{
				$n = $bodyItems[1]->GetValue();
				$e = $bodyItems[2]->GetValue();
				$d = $bodyItems[3]->GetValue();
			
				return array("n"=>$n, "e"=>$e, "d"=>$d);
			}
			elseif(is_object($bodyItems[2]))
			{
				$body = new CASNReader();
				$body->Read($bodyItems[2]->GetValue());
				$bodyItems = $body->GetSequence();
				
				if(is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3]))
				{
					$n = $bodyItems[1]->GetValue();
					$e = $bodyItems[2]->GetValue();
					$d = $bodyItems[3]->GetValue();
	
					return array("n"=>$n, "e"=>$e, "d"=>$d);
				}
			}
		}
		return false;
	}
}
?>

Youez - 2016 - github.com/yon3zu
LinuXploit