!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/apex_led/php/3ros/simplesamlphp/modules/authX509/lib/Auth/Source/   drwxrwxr-x
Free 13.77 GB of 61.93 GB (22.24%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     X509userCert.php (6.25 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * This class implements x509 certificate authentication with
 * certificate validation against an LDAP directory.
 *
 * @author Emmanuel Dreyfus <manu@netbsd.org>
 * @package simpleSAMLphp
 * @version $Id$
 */
class sspmod_authX509_Auth_Source_X509userCert extends SimpleSAML_Auth_Source {

    
/**
     * x509 attributes to use from the certificate
     * for searching the user in the LDAP directory.
     */
    
private $x509attributes = array('UID' => 'uid');


    
/**
     * LDAP attribute containing the user certificate
     */
    
private $ldapusercert = array('userCertificate;binary');


    
/**
     * LDAPConfigHelper object
     */
    
private $ldapcf;


    
/**
     * Constructor for this authentication source.
     *
     * All subclasses who implement their own constructor must call this
     * constructor before using $config for anything.
     *
     * @param array $info  Information about this authentication source.
     * @param array &$config  Configuration for this authentication source.
     */
    
public function __construct($info, &$config) {
        
assert('is_array($info)');
        
assert('is_array($config)');

        if (isset(
$config['authX509:x509attributes']))
            
$this->x509attributes =
                
$config['authX509:x509attributes'];

        if (
array_key_exists('authX509:ldapusercert'$config))
            
$this->ldapusercert =
                
$config['authX509:ldapusercert'];

        
parent::__construct($info$config);

        
$this->ldapcf = new sspmod_ldap_ConfigHelper($config,
            
'Authentication source ' var_export($this->authIdTRUE));

        return;
    }


    
/**
     * Convert certificate from PEM to DER
     *
     * @param array $pem_data  PEM-encoded certificate
     */
    
private function pem2der($pem_data) {
        
$begin "CERTIFICATE-----";
        
$end   "-----END";
        
$pem_data substr($pem_data,
            
strpos($pem_data$begin)+strlen($begin));
        
$pem_data substr($pem_data0strpos($pem_data$end));
        
$der base64_decode($pem_data);
        return 
$der;
    }


    
/**
     * Convert certificate from DER to PEM
     *
     * @param array $der_data  DER-encoded certificate
     */
    
private function der2pem($der_data) {
        
$pem chunk_split(base64_encode($der_data), 64"\n");
        
$pem "-----BEGIN CERTIFICATE-----\n".$pem.
            
"-----END CERTIFICATE-----\n";
        return 
$pem;
    }


    
/**
     * Finish a failed authentication.
     *
     * This function can be overloaded by a child authentication
     * class that wish to perform some operations on failure
     *
     * @param array &$state  Information about the current authentication.
     */
    
public function authFailed(&$state) {
        
$config SimpleSAML_Configuration::getInstance();

        
$t = new SimpleSAML_XHTML_Template($config,
            
'authX509:X509error.php');
        
$t->data['errorcode'] = $state['authX509.error'];

        
$t->show();
        exit();
    }


    
/**
     * Validate certificate and login
     *
     * This function try to validate the certificate.
     * On success, the user is logged in without going through
     * o login page.
     * On failure, The authX509:X509error.php template is
     * loaded.
     *
     * @param array &$state  Information about the current authentication.
     */
    
public function authenticate(&$state) {
        
assert('is_array($state)');
        
$ldapcf $this->ldapcf;

        if (!isset(
$_SERVER['SSL_CLIENT_CERT']) ||
            (
$_SERVER['SSL_CLIENT_CERT'] == '')) {
            
$state['authX509.error'] = "NOCERT";
            
$this->authFailed($state);
            
assert('FALSE'); /* NOTREACHED */
            
return;
        }

        
$client_cert $_SERVER['SSL_CLIENT_CERT'];
        
$client_cert_data openssl_x509_parse($client_cert);
        if (
$client_cert_data == FALSE) {
            
SimpleSAML_Logger::error('authX509: invalid cert');
            
$state['authX509.error'] = "INVALIDCERT";
            
$this->authFailed($state);

            
assert('FALSE'); /* NOTREACHED */
            
return;
        }

        
$dn NULL;
        foreach (
$this->x509attributes as $x509_attr => $ldap_attr) {
            
/* value is scalar */
            
if (array_key_exists($x509_attr$client_cert_data['subject'])) {
                
$value $client_cert_data['subject'][$x509_attr];
                
SimpleSAML_Logger::info('authX509: cert '.
                                        
$x509_attr.' = '.$value);
                
$dn $ldapcf->searchfordn($ldap_attr$valueTRUE);
                if (
$dn !== NULL)
                    break;
            }
        }

        if (
$dn === NULL) {
            
SimpleSAML_Logger::error('authX509: cert has '.
                                     
'no matching user in LDAP');
            
$state['authX509.error'] = "UNKNOWNCERT";
            
$this->authFailed($state);

            
assert('FALSE'); /* NOTREACHED */
            
return;
        }

        if (
$this->ldapusercert === NULL) { // do not check for certificate match
            
$attributes $ldapcf->getAttributes($dn);
            
assert('is_array($attributes)');
            
$state['Attributes'] = $attributes;
            
$this->authSuccesful($state);

            
assert('FALSE'); /* NOTREACHED */
            
return;
        }

        
$ldap_certs $ldapcf->getAttributes($dn$this->ldapusercert);
        if (
$ldap_certs === FALSE) {
            
SimpleSAML_Logger::error('authX509: no certificate '.
                                     
'found in LDAP for dn='.$dn);
            
$state['authX509.error'] = "UNKNOWNCERT";
            
$this->authFailed($state);

            
assert('FALSE'); /* NOTREACHED */
            
return;
        }


        
$merged_ldapcerts = array();
        foreach (
$this->ldapusercert as $attr)
            
$merged_ldapcerts array_merge($merged_ldapcerts,
                                            
$ldap_certs[$attr]);
        
$ldap_certs $merged_ldapcerts;

        foreach (
$ldap_certs as $ldap_cert) {
            
$pem $this->der2pem($ldap_cert);
            
$ldap_cert_data openssl_x509_parse($pem);
            if(
$ldap_cert_data == FALSE) {
                
SimpleSAML_Logger::error('authX509: cert in '.
                                         
'LDAP in invalid for '.
                                         
'dn = '.$dn);
                continue;
            }

            if (
$ldap_cert_data === $client_cert_data) {
                
$attributes $ldapcf->getAttributes($dn);
                
assert('is_array($attributes)');
                
$state['Attributes'] = $attributes;
                
$this->authSuccesful($state);

                
assert('FALSE'); /* NOTREACHED */
                
return;
            }
        }

        
SimpleSAML_Logger::error('authX509: no matching cert in '.
                                 
'LDAP for dn = '.$dn);
        
$state['authX509.error'] = "UNKNOWNCERT";
        
$this->authFailed($state);

        
assert('FALSE'); /* NOTREACHED */
        
return;
    }


    
/**
     * Finish a succesfull authentication.
     *
     * This function can be overloaded by a child authentication
     * class that wish to perform some operations after login.
     *
     * @param array &$state  Information about the current authentication.
     */
    
public function authSuccesful(&$state) {
        
SimpleSAML_Auth_Source::completeAuth($state);

        
assert('FALSE'); /* NOTREACHED */
        
return;
    }

}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.4808 ]--