Avatar billede christianhp Nybegynder
04. april 2008 - 18:27 Der er 10 kommentarer

Hacked via upload-funktion

Hej,

Jeg har en upload-funktion på min hjemmeside, og da jeg tjekkede den  for et øjeblik siden, var der blevet uploadet 5 filer, deriblandt én php-fil, som ellers ikke er tilladt i mit uploadscript. Blandt dem er der også en enkelt tekst-fil, hvor der står:

HACKED By SenqRonize !

Jeg googlede dem, og fandt bare en masse links til hjemmesider, der er blevet hacked.

Men jeg ved ikke helt, hvad jeg skal gøre med de andre uploadede filer, der alle hedder noget med *.php.*

c.php.jpg
main.php.jpg
cc.php.txt
webadmin.PhP.3gp

Og så lige den her:

phpjackal.php

Skal jeg bare slette dem, og er der risiko for, at der er en eller anden fælde forbundet med at gøre det? Og kan nogen forklare mig, hvad formålet med filerne er? Hvilken funktion de har. Evt også hvordan man garderer sig imod det :)

På selve adressen, hvor de er uploadet til er der ingen ændringer, og tilsyneladende er resten af min hjemmeside (som i modsætning til upload-delen er en wordpress-installation) ikke blevet hacked...
Avatar billede strych9 Praktikant
04. april 2008 - 18:41 #1
Er det hosted på en server du selv administrerer? Der er jo tydeligvis et sikkerhedshul et sted som bør rettes. Filerne kan du slette, men du kan også gemme dem og se hvordan de har været i stand til at omgåes din sikkerhed
Avatar billede christianhp Nybegynder
04. april 2008 - 18:47 #2
Det er one.com's servere, der hoster min webside, men jeg har selv uploadet alle filer, der er på serveren.

Filerne er i øvrigt blevet uploadet af tre gange fra tre forskellige ip-adresser, fortæller min upload-log mig.
Avatar billede erikjacobsen Ekspert
04. april 2008 - 20:33 #3
" én php-fil, som ellers ikke er tilladt i mit uploadscript.  " - jo, det er jo så tilladt, åbenbart. Fjern uploadfunktionen til det er rettet.
Avatar billede olebole Juniormester
04. april 2008 - 20:42 #4
<ole>

Hvis du tillader upload af php-filer - og det gør du jo tydeligvis - kan man ret let slette hele din server og database. Man må formode, det er noget i den retning, filer har været tænkt til, Som Erik skriver, skal du øjeblikkelig fjerne dit upload-script  =)

/mvh
</bole>
Avatar billede christianhp Nybegynder
05. april 2008 - 00:07 #5
Jeg har fjernet det, men jeg har ikke haft angivet .php-filer, som noget man må uploade:

$file_extensions = array(".3gp", ".3gpp", ".3g2", ".amr", ".avi", ".bmp", ".doc", ".flv", ".gif", ".jpg", "jpeg", ".m4a", ".mov", ".mp2", ".mp2a", ".mp3", ".mp4", ".mpe", "mpeg", ".mpg", ".ogg", ".ogm", ".png", ".swf", ".txt"); // Add or delete the file extensions you want to allow

Fra hvad jeg selv har kunnet finde på google, så er phpjackal.php skabt af "Netjackal" (siger mig ikke noget), men kan sandsynligvis fungere som en bagdør til ens hjemmeside.

phpjackal figurerer IKKE i min upload-log...

Kan nogen fortælle mig, om jeg kan downloade den til min computer og læse den i notepad uden nogen form for risiko? Jeg er ikke så familiær med den slags...
Avatar billede erikjacobsen Ekspert
05. april 2008 - 08:24 #6
Det viser ingenting om hvad du gør, bare du viser et array med extensions. Du skal bruge det rigtigt :)  (Og så kan det selvfølgelig være et anden hul)

Ja, du kan ftp-e den .php fil til din computer, og læse den med notesblok uden risiko.
Avatar billede christianhp Nybegynder
05. april 2008 - 12:10 #7
Okay, det var mest for at vise, hvad jeg selv havde defineret som tilladt at uploade. Jeg har ikke selv skrevet upload-scriptet, så jeg skal ikke kunne sige, om der er et hul i det. Men jeg poster gerne lige indholdet af de to filer, hvis der er nogen, der kan give et bud på det. Jeg kan nemlig ikke selv uploade php-filer via upload-scriptet.

Der er to filer: uploader.php og upload.php

Upload.php ser sådan her ud:

<?
    include("uploader.php"); // Don't put anything above this line or you'll get errors
?>
        <p><strong><span style="background: #fff; color: #000"><? if($_REQUEST["message"] == "") echo "Upload en fil her."; else echo $_REQUEST["message"]?></span></strong></p>
        <form action="upload.php" enctype="multipart/form-data" id="upload" method="post">
            <p><input id="userfile" name="userfile" size="45" type="file" /><input name="upload" type="submit" value="Upload fil" /><br /></p>

            <p>Tilladte filtyper: <strong><?=$file_extensions_list?></strong></p>

            <p>Maksimal filstørrelse: <strong><?=$maximum_file_size?> bytes (~<?=round($maximum_file_size/1024)?>KB)</strong></p>

<p>Der er problemer med at uploade filer, som begynder med tre eller flere tal i rækkefølge. Gør din fil det, så omdøb den venligst og prøv igen.</p>

<p>Har du problemer med at uploade? <a href="mailto:XXXXX@XXX.XXX">Skriv til mig.</a> Skriv "fejlmelding" i emnet.</p>

<p>Tilbage til <a href="http://XXX.XXX" title="XXX.XXX">forsiden.</a></p>

            <p>Powered by: <a href="http://hypersilence.net" title="Silentum Uploader v1.3.0">Silentum Uploader v1.3.0</a></p>
        </form>

            </table>


Uploader.php ser sådan her ud:

<?
    /*
    Silentum Uploader v1.3.0
    Modified November 23, 2007
    uploader.php copyright 2005-2007 "HyperSilence"
    */

    // Begin options

    $allow_file_deletion = true; // To allow visitors to delete files, leave this at true; otherwise, change it to false

    $file_extensions = array(".3gp", ".3gpp", ".3g2", ".amr", ".avi", ".bmp", ".doc", ".flv", ".gif", ".jpg", "jpeg", ".m4a", ".mov", ".mp2", ".mp2a", ".mp3", ".mp4", ".mpe", "mpeg", ".mpg", ".ogg", ".ogm", ".png", ".swf", ".txt"); // Add or delete the file extensions you want to allow

    $file_extensions_list =".3gp, .3gpp, .3g2, .amr, .avi, .bmp, .doc, .flv, .gif, .jpg, .jpeg, .m4a, .mov, .mp2, .mp2a, .mp3, .mp4, .mpe, .mpeg, .mpg, .ogg, .ogm, .png, .swf, .txt"; // Type the same as above, without the quotes separating them

    $max_length = 45; // The maximum character length for a file name

    $maximum_file_size = "20480000"; // In bytes

    $upload_log_file = "upload_log.txt"; // Change this to the log file you want to use

    // End options

    $folder_directory = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]);
    $message = "";
    $set_chmod = 0;
    $site_uri = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
    $upload_directory = "";
    $upload_uri = $folder_directory."/";

    if($allow_file_deletion == true) $status = "Tilladt";
    else $status = "Ikke tilladt";

    if($_REQUEST["delete"] && $allow_file_deletion) {
    $resource = fopen($upload_log_file,"a");
    fwrite($resource,date("F d, Y / h:i:sa")." - ".$_REQUEST["delete"]." Slettet af ".$_SERVER["REMOTE_ADDR"]."\n");
    fclose($resource);

    if(strpos($_REQUEST["delete"],"/.") > 0);
    elseif(strpos($_REQUEST["delete"],$upload_directory) === false);
    elseif(substr($_REQUEST["delete"],0,6) == $upload_directory) {
    unlink($_REQUEST["delete"]);
    $message = "Filen er blevet slettet.";
    header("Location: $site_uri?message=$message");
    }
    }

    elseif($_FILES["userfile"]) {
    $resource = fopen($upload_log_file,"a");
    fwrite($resource,date("F d, Y / h:i:sa")." - ".$_FILES["userfile"]["name"]." "
    .$_FILES["userfile"]["type"]." uploadet af".$_SERVER["REMOTE_ADDR"]."\n");
    fclose($resource);

    $file_type = $_FILES["userfile"]["type"];
    $file_name = $_FILES["userfile"]["name"];
    $file_ext = strtolower(substr($file_name,strrpos($file_name,".")));
    @chmod($upload_uri."".$file_name, 0755);
    if($_FILES["userfile"]["size"] > $maximum_file_size) {
    $message = "FEJL: Filen må ikke være større end ".$maximum_file_size." bytes.";
    }

    elseif($file_name == "") $message = "FEJL: Vælg venligst den fil, du vil uploade.";
    elseif(strlen($file_name > $max_length)) $message = "FEJL: Filens navn må ikke være længere end ".$max_length." karakterer. Omdøb filen og prøv igen.";
    elseif(!preg_match("/^[A-Z0-9_.\- ]+$/i",$file_name)) $message = "FEJL: Filnavnet indholder ugyldige karakterer.";
    elseif(!in_array($file_ext, $file_extensions)) $message = "FEJL: <ins>$file_ext</ins> er ikke en tilladt filtype.";
    else $message = upload_file($upload_directory, $upload_uri);
    header("Location: $site_uri?message=$message");
    }

    elseif(!$_FILES["userfile"]);
    else $message = "FEJL: Du har valgt en ugyldig fil.";

    $open = opendir($upload_directory);
    $uploaded_files = "";
    while($file = readdir($open)) {
    if(!is_dir($file) && !is_link($file)) {
    $uploaded_files .= "        <tr>
                <td style=\"background: #fff; color: #000; text-align: left; width: 70%\"><a href=\"$upload_directory$file\" title=\"$file (".filesize($upload_directory.$file)." bytes)\">".$file."</a> (".filesize($upload_directory.$file)." bytes)</td>";
    if($allow_file_deletion)
    $uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><a href=\"?delete=$upload_directory".urlencode($file)."\" title=\"Delete File\">Delete File</a></td>";
    else
    $uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><del><strong>Delete File</strong></del></td>";
    $uploaded_files .= "
            </tr>
            <tr>
                <td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\">Uploaded <strong>".date("F d, Y / h:ia", filemtime($upload_directory.$file))."</strong></td>";
    $uploaded_files .="
            </tr>
    ";
    }
    }

    function upload_file($upload_directory, $upload_uri) {
    $file_name = $_FILES["userfile"]["name"];
    $file_name = str_replace(" ","_",$file_name);
    $file_path = $upload_directory.$file_name;
    $temporary = $_FILES["userfile"]["tmp_name"];

    $result = move_uploaded_file($temporary, $file_path);
    if(!chmod($file_path,0777))
    $message = "FEJL: Upload-biblioteket bliev ikke fundet eller det var ikke tilladt at skrive til det.";
    else $message = ($result)?"Filen er blevet uploadet." : "Der er sket en ukendt fejl.";
    return $message;
    }
?>
Avatar billede erikjacobsen Ekspert
05. april 2008 - 12:37 #8
Det kan være du har været udsat for "NULL Byte" angrebet: http://www.bright-shadows.net/tutorials/tbs_wiwa.txt led efter "Null Byte". Du stoler for meget på data fra brugeren.
Avatar billede christianhp Nybegynder
06. april 2008 - 15:49 #9
Det lyder meget sandsynligt, synes jeg. Selv efter at have læst og søgt lidt, er jeg dog ikke rigtigt noget frem til en løsning. Jeg ved, at register_globals er slået fra, men jeg er uklar omkring, hvad jeg ellers kan gøre for at undgå NULL byte angreb?

Vil det hjælpe at slå safe mode til i php.ini?
Avatar billede erikjacobsen Ekspert
06. april 2008 - 15:52 #10
Jeg kigge videre forleden, men glemte at vende tilbage. Din

    elseif(!preg_match("/^[A-Z0-9_.\- ]+$/i",$file_name)) $message = "FEJL: Filnavnet indholder ugyldige karakterer.";

burde fange null-bytes.  Visse udbydere gør det selv i deres firewalls. Prøv

    http://n0p.com/index.php
    http://n0p.com/index.php?hej=sa
    http://n0p.com/index.php?hej=s%00a

Så jeg ved faktisk ikke om det er hvad der er sket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester